[php] FormHandler & autoload conflict?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Makkelijk
  • Registratie: November 2000
  • Laatst online: 18:44
Ik heb een probleem met formhandler en autoload. Zodra ik formhandler gebruik probeert hij code die ik via de addHTML methode aan het formulier toevoeg te includen. In de code van formhandler (zie hieronder) gebeurd weinig met de html code. Ook heb ik de addHTML code gedebugged door de code steeds verder te strippen, maar zelfs al plaats ik er een lege string in dan geeft het nog problemen. Ik kan me niet voorstellen dat anderen er niet tegen aan lopen maar ik heb niets kunnen vinden op het formhandler forum, in de formhandler faq of via google. Mijn inziens wordt het probleem door autoload veroorzaakt en niet door formhandler

Op het moment dat ik een form submit krijg ik het volgende probleem:

code:
1
2
3
4
Warning (2): index.php at 9 include_once( <fieldset>  <legend>E-mail verzenden</legend>  <ol>  .class.php) [function.include-once]: failed to open stream: Invalid argument
Warning (2): index.php at 9 include_once() [function.include]: Failed opening ' <fieldset> <legend>E-mail verzenden</legend> <ol> .class.php' for inclusion (include_path='.;C:\xampp\php\pear\;./pagina;./smarty')
Warning (2): index.php at 9 include_once( </ol> </fieldset> .class.php) [function.include-once]: failed to open stream: Invalid argument
Warning (2): index.php at 9 include_once() [function.include]: Failed opening ' </ol> </fieldset> .class.php' for inclusion (include_path='.;C:\xampp\php\pear\;./pagina;./smarty')


autoload heb ik al uitgekleed tot:
code:
1
2
3
function __autoload($class_name) {
    include_once $class_name . '.class.php';
}


Dit zijn de relevante functies uit mijn php code

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public function sendmail($data){
          //verstuur mail
          //geef vooral een waarschuwing
    }
    
    public function showForm() {
        //maak een nieuwe object
        $form = new FormHandler();
        $form->setMask(" 
            <li>
                <label for=\"%name%\">%title%%seperator%</label>
                %field% %help% %error%
            </li>",true
        );  
        $form->useTable(false);
        
        //begin van formulier
        $form -> addHTML("
            <fieldset>
            <legend>E-mail verzenden</legend>
            <ol>
        ");
        
        //hidden veld voor u_id
        $form->TextField('Naam','u_naam',FH_STRING);
        $form->TextField('E-mail adres','u_email',FH_EMAIL_HOST);
        $form->TextArea('Bericht','u_land');
        $form->submitButton('Verzenden');
        
        //eind van formulier
        $form -> addHTML("
            </ol>
            </fieldset>
        ");
        
        $form->onCorrect(array( $this , 'sendmail' ));
        $html = $form->flush( true );
        $this->smarty->assign('contactform',$html); 
    }


Formhandler doet het volgende met addHTML
(stukje code uit formhandler)

PHP:
1
2
3
4
function addHTML( $html )
{
    $this->_fields[] = array( '__HTML__', $html );
}


en vervolgens bij het weergeven van het formulier:
(stukje code uit formhandler)

PHP:
1
2
3
4
5
6
7
8
case '__HTML__':
case '__LINE__':
// but only if the html or line is on this page!
if($page == $iDisplayPage )
{
    $form .= $field[1];
}
break;


Iemand enig idee? _/-\o_

[ Voor 21% gewijzigd door Makkelijk op 04-05-2008 14:12 . Reden: Duidelijkere probleemomschrijving ]

Badieboediemxvahajwjjdkkskskskaa


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

En wat heb je zelf al geprobeerd om dit probleem op te lossen? Je bent al aan het debuggen geslagen? Alleen je foutmelding + code dumpen en hopen dat ij het voor je gaan oplossen is hier niet de bedoeling. Zie ook Programming Beleid - De Quickstart. Wil je aub de gevraagde informatie aanvullen?
Zo te zien probeert je autoload classes te laden a.d.h.v. de strings die je nu meegeeft aan je FormHandler. Dat lijkt me niet helemaal te kloppen ;)

Daarnaast heeft FormHandler vast een supportdesk, forum, FAQ e.d. Wat wordt daar gezegd?

[ Voor 14% gewijzigd door Creepy op 02-05-2008 16:08 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Makkelijk
  • Registratie: November 2000
  • Laatst online: 18:44
Sorry, ik heb gedebugged, forum en faq doorzocht. Ik had al geconstateerd dat autoload die klasses probeert te laden aan de hand van strings, en dat gedrag snap ik dus niet. Ik update de startpost wel even!

Badieboediemxvahajwjjdkkskskskaa


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Blijkbaar verwacht addHTML de naam van een class? Misschien is het handig om even in de source van de formHandler class te kijken om te zien wat er in de addHTML method gebeurt..

Sundown Circus


Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 00:44

orf

De simpelste (maar ook meest ranzige) oplossing is een file_exists te doen in je autoload functie. Dat is hoe ik het laatst opgelost heb.

Acties:
  • 0 Henk 'm!

  • Ramon
  • Registratie: Juli 2000
  • Laatst online: 01:16
Met die autoload laad je dus de class FormHandler op het moment dat je "new FormHandler" doet, maar die class kan die dus niet vinden omdat je die een andere naam hebt gegeven. Wanneer je die autoload goed instelt kan je die require ook weghalen.

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


Acties:
  • 0 Henk 'm!

  • Makkelijk
  • Registratie: November 2000
  • Laatst online: 18:44
RedRose schreef op vrijdag 02 mei 2008 @ 18:12:
Blijkbaar verwacht addHTML de naam van een class? Misschien is het handig om even in de source van de formHandler class te kijken om te zien wat er in de addHTML method gebeurt..
Code stond in startpost!
Ramon schreef op vrijdag 02 mei 2008 @ 18:21:
Met die autoload laad je dus de class FormHandler op het moment dat je "new FormHandler" doet, maar die class kan die dus niet vinden omdat je die een andere naam hebt gegeven. Wanneer je die autoload goed instelt kan je die require ook weghalen.
Ehhh. nee, dat slaat totaal niet op mijn topic.
Formulier wordt sowieso goed weergegeven trouwens, pas na het submitten komt het probleem voor. Dit was ik nog vergeten te vermelden maar is wel belangrijk.
orf schreef op vrijdag 02 mei 2008 @ 18:14:
De simpelste (maar ook meest ranzige) oplossing is een file_exists te doen in je autoload functie. Dat is hoe ik het laatst opgelost heb.
Dit zal ik voorlopig doen, goed idee

Badieboediemxvahajwjjdkkskskskaa


Acties:
  • 0 Henk 'm!

  • Ramon
  • Registratie: Juli 2000
  • Laatst online: 01:16
Heb je het al geprobeerd dan? de FormHandler class zo te plaatsen en te noemen dat de require weg kan?

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


Acties:
  • 0 Henk 'm!

  • Makkelijk
  • Registratie: November 2000
  • Laatst online: 18:44
Ramon schreef op zaterdag 03 mei 2008 @ 14:23:
Heb je het al geprobeerd dan? de FormHandler class zo te plaatsen en te noemen dat de require weg kan?
Ik snap niet wat je bedoeld, de require weg? Dat is toch het idee van autoload?

Badieboediemxvahajwjjdkkskskskaa


Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Ik zou zeggen haal die whitespace eens weg tussen $form -> addHTML en maak er $form->addHTML van. De syntax hilighter van tweakers geeft al aan dat daar iets niet in orde is. Verder zal die autoload van je niet werken als je dezelfde naamgeving gebruikt voor je php bestanden als je doet voor de FormHandler.

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • Ramon
  • Registratie: Juli 2000
  • Laatst online: 01:16
Makkelijk schreef op zaterdag 03 mei 2008 @ 14:26:
[...]


Ik snap niet wat je bedoeld, de require weg? Dat is toch het idee van autoload?
ehh die autoload wordt getriggerd als je "new FormHandler" doet, dus dan kan je die require(formhandler) weghalen.

Moet je wel zorgen dat die FormHandler in de goede folder staat en dezelfde naamgeving heeft als je andere classes. Dus formhandler.class.php.

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Wat triggerd de autoload?

Plaats eens wat debug regels tussen de verdachten. Dus echo boven $form->addHtml ... . en misschien op wat andere plaatsen. En dan kijken wie de autoload doet.

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • ChessSpider
  • Registratie: Mei 2006
  • Laatst online: 01-08 19:01
Mocht er bij mensen twijfel zijn wat autoload doet;
In PHP 5, this is no longer necessary. You may define an __autoload function which is automatically called in case you are trying to use a class/interface which hasn't been defined yet. By calling this function the scripting engine is given a last chance to load the class before PHP fails with an error.
http://nl2.php.net/manual/en/language.oop5.autoload.php

ps. Zo op het eerste ogenblik ontbreekt er VEEL in jouw code.
Een case zonder switch{}, public functies die niet in een class zitten..\


En als ik jou was zou ik kijken waarom hij
' </ol> </fieldset> .class.php'
probeert te includen. Wat is er op regel 9? Niet die comment lijkt mij.

[ Voor 85% gewijzigd door ChessSpider op 03-05-2008 19:17 ]


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

ChessSpider schreef op zaterdag 03 mei 2008 @ 19:14:
Mocht er bij mensen twijfel zijn wat autoload doet;

[...]


http://nl2.php.net/manual/en/language.oop5.autoload.php

ps. Zo op het eerste ogenblik ontbreekt er VEEL in jouw code.
Een case zonder switch{}, public functies die niet in een class zitten..\
Hij heeft veel weg gelaten omdat hij het niet relevant vind voor dit probleem.Het is namelijk niet handig en niet wenselijk om complete source code op een forum te dumpen. Dan kijkt er toch niemand meer naar.
En als ik jou was zou ik kijken waarom hij
' </ol> </fieldset> .class.php'
probeert te includen. Wat is er op regel 9? Niet die comment lijkt mij.
Regel 9 is de include_once van de autoload.

En dat is eigenlijk wel erg intressant, want waar is de fatal error? Zodra je new <CLASS> doet en de class niet gevonden kan worden dan krijg je een fatal error.

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Makkelijk
  • Registratie: November 2000
  • Laatst online: 18:44
ChessSpider schreef op zaterdag 03 mei 2008 @ 19:14:
Mocht er bij mensen twijfel zijn wat autoload doet;

[...]


http://nl2.php.net/manual/en/language.oop5.autoload.php

Een case zonder switch{}, public functies die niet in een class zitten..\
die cases is een stukje van de code van formhandler, niet van mij.

public functies zitten wel in een class, ik heb alleen de functies die over het afhandelen van het formulier gaan er in gezet.

een fatal error krijg je toch alleen

die require die ramon bedoeld snap ik nu pas. Die heb ik er in gezet als debug poging..

Badieboediemxvahajwjjdkkskskskaa


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Plaats eens een debug_print_backtrace in je __autoload, dan zie je vrijwel meteen waar de fout vandaan komt. De functie method_exists roept __autoload aan in isCorrect(), een is_object() check zou dat moeten verhelpen

Acties:
  • 0 Henk 'm!

  • Makkelijk
  • Registratie: November 2000
  • Laatst online: 18:44
Dankje, weer wat geleerd!

Badieboediemxvahajwjjdkkskskskaa


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Ik merk net dat 't op nog wat plaatsen nodig is, maar dat zul je vanzelf wel ondervinden.
Pagina: 1