Toon posts:

[PHP]Undefined variable

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo allen,
Ik vind sinds kort iets raar.

Ik programmeer tegenswoordigs met Error_Reporting(E_ALL), onder andere omdat ik van mening ben dat Grum gelijk heeft, en omdat ik gewoon bugloze code wil schrijven.

Maar nu stuit ik op iets merkwaardigs.
Als ik zeg:
PHP:
1
<?if(!$Headline){    $Headline = "Healine is leeg";}?>

of
PHP:
1
<?if(empty($Headline)){    $Headline = "Healine is leeg";}?>

of
PHP:
1
<?if(!isset($Headline)){    $Headline = "Healine is leeg";}?>

en ik spreek mijn script aan zonder $Headline te definieren, begint Error_Reporting er over te klagen.
Ik kan dus geen scripts meer aanspreken die controleren of variabelen zijn ingevuld, want als ze niet zijn ingevuld dan maakt E_R een flouwe opmerking.
Nu is de vraag dus waarom dit volgens E_R zo'n doodzonde is. Ik wil gewoon per se een variable aanmaken als hij leeg is.
(De bedoeling is natuurlijk dit:
PHP:
1
<?if(empty($Headline)){      echo "<form method=\"post\" action=\"$PHP_SELF\">            <input type=\"hidden\" name=\"HTML\" value=\"$HTML\">        <input type=\"text\" name=\"Headline\">        <input type=\"submit\" value=\"Toevoegen\">        </form>";}?>

)

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

isset zou het gewoon moeten doen?

Maar waar komt die variable vandaan?

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
Die variabele komt nergens vandaan. Dat is het em nou juist. $Headline bestaat nog niet, en daar klaagt E_R dus over. De bedoeling is dus dat de $ wordt aangemaakt.
Op woensdag 27 maart 2002 14:14 schreef LuCarD het volgende:
isset zou het gewoon moeten doen?
Nogmaals getest:
code:
1
Warning: Undefined variable: Headline in C:\apache\htdocs\content\powerbuilder\save.php on line 23

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:39
Bovenaan:

var $headline;

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

PHP:
1
<?error_reporting(E_ALL);if (!isset($nietbestaand))echo "bestaatniet";?>

Dit geeft de string "bestaatniet" zonder een warning. Dus dit zoek je?

Programmer - an organism that turns coffee into software.


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:39
Wel raar trouwens idd, isset zou idd als enige moeten werken ZONDER foutmelding.

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op woensdag 27 maart 2002 14:18 schreef daniel_hoenderdos het volgende:
Die variabele komt nergens vandaan. Dat is het em nou juist. $Headline bestaat nog niet, en daar klaagt E_R dus over. De bedoeling is dus dat de $ wordt aangemaakt.
[..]
De variable komt nergens vandaan??? Waarom test je er dan op. Dan weet je toch dat hij er nooit zal zijn...

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
als ik als enige in mijn scripje:
PHP:
1
<?if (!isset($nietbestaand)) Echo "bestaatniet";?>

zet doetie het wel, en als ik
PHP:
1
<?if(!isset($Headline))    {        echo "<form method=\"post\" action=\"$PHP_SELF\">                <input type=\"hidden\" name=\"HTML\" value=$HTML                <input type=\"text\" name=\"Headline\">                <input type=\"submit\" value=\"Toevoegen\">              </form>";    }?>

zeg dan begintie te klagen.

Trouwens, dat var $Headline werkt niet. (Parse error... :?)

Verwijderd

Topicstarter
Op woensdag 27 maart 2002 14:25 schreef LuCarD het volgende:

[..]

De variable komt nergens vandaan??? Waarom test je er dan op. Dan weet je toch dat hij er nooit zal zijn...
Ja, maar ik dan in het form de headline aanmaak wordt hij weer naar dezelfde pagina gepost en de headline bestaat dan wel.
Ik zou natuurlijk gewoon dat form kunnen maken en hem naar een andere pagina of een andere action kunnen laten posten, maar dat wil ik niet (ik wil het zo proberen).

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op woensdag 27 maart 2002 14:28 schreef daniel_hoenderdos het volgende:

[..]

Ja, maar ik dan in het form de headline aanmaak wordt hij weer naar dezelfde pagina gepost en de headline bestaat dan wel.
Ik zou natuurlijk gewoon dat form kunnen maken en hem naar een andere pagina of een andere action kunnen laten posten, maar dat wil ik niet (ik wil het zo proberen).
Dus je verwacht hem van de POST variablen... :?

Lees dan de HTTP_POST_VARS of _POST uit.

Verder werkt het voorbeeld van jouw bij mij wel. Krijg alleen een Warning om $HTML. Dus de fout ligt ergens anders.

Programmer - an organism that turns coffee into software.


  • Grum
  • Registratie: Juni 2001
  • Niet online
Zowel empty als isset kan je gebruiken om te kijken of een var bestaat bij beide zal dit geen warnings geven.

daniel_hoenderdos: Ik programmeer tegenswoordigs met Error_Reporting(E_ALL), onder andere omdat ik van mening ben dat Grum gelijk heeft, en omdat ik gewoon bugloze code wil schrijven.

*blush* :o :D

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:39
Op woensdag 27 maart 2002 14:26 schreef daniel_hoenderdos het volgende:
als ik als enige in mijn scripje:
PHP:
1
<?if (!isset($nietbestaand)) Echo "bestaatniet";?>

zet doetie het wel, en als ik
PHP:
1
<?bla?>

zeg dan begintie te klagen.
Dat lijkt me sterk. Er moet meer aan de hand zijn.

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op woensdag 27 maart 2002 14:32 schreef Grum het volgende:
Zowel empty als isset kan je gebruiken om te kijken of een var bestaat bij beide zal dit geen warnings geven.

daniel_hoenderdos: Ik programmeer tegenswoordigs met Error_Reporting(E_ALL), onder andere omdat ik van mening ben dat Grum gelijk heeft, en omdat ik gewoon bugloze code wil schrijven.

*blush* :o :D
Maar dit wordt wel afgeraden! Geeft aanzienelijke perfomance verliezen. Het is beter om op beide te testen dan alleen op empty

dus zo
PHP:
1
<?if (isset($var) &amp;&amp; !empty($var))?>

en niet
PHP:
1
<?if (!empty($var))?>

Dat komt door de manier waarop empty met niet gebestaande variablen omgaat.

Programmer - an organism that turns coffee into software.


  • Grum
  • Registratie: Juni 2001
  • Niet online
Klopt .. ik meen dat der zelfs ooit een bug was dat als je eerst een empty deed .. dat daarna je var wel bestond :D

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op woensdag 27 maart 2002 14:37 schreef Grum het volgende:
Klopt .. ik meen dat der zelfs ooit een bug was dat als je eerst een empty deed .. dat daarna je var wel bestond :D
Das in ieder geval met PHP 4.1.2 verholpen...

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
:+ |:( $@#&^!!
PHP:
1
<?if(!isset($Headline))?>

geeft bij mij
code:
1
2
Warning: Undefined variable: Headline in
C:\apache\htdocs\content\powerbuilder\save.php on line 24

?!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

post je hele script eens, want zo komen we er niet uit...

Programmer - an organism that turns coffee into software.


  • Grum
  • Registratie: Juni 2001
  • Niet online
Ik geloof niet dat die line die jij paste ook werkelijk line 24 is :)

Weet je zeker dat je em niet ergens anders gebruikt ? >:)

Verwijderd

Topicstarter
Op woensdag 27 maart 2002 14:44 schreef Grum het volgende:
Ik geloof niet dat die line die jij paste ook werkelijk line 24 is :)

Weet je zeker dat je em niet ergens anders gebruikt ? >:)
Indeed |:(
Ik gebruikte hem ook nog in een weggequote SQL query.
Oplossing was een exit() in de if clause.
my bad.

  • vargo
  • Registratie: Januari 2001
  • Laatst online: 04-09 10:17
Nou ik heb dus precies hetzelfde. Ook php zo ingesteld dat ie errors, warnings & notices weergeeft. Mijn scriptje controleert via isset() of een bepaalde variabele wel/niet gepost was en ik krijg dus ook die melding. Van alles geprobeerd, maar ik bleef dus idd die melding krijgen.
Ik draai Php versie 4.1.2.

  • Grum
  • Registratie: Juni 2001
  • Niet online
php doet het niet fout ... sorry :)

Verwijderd

IsSet geeft ook "false" als de waarde van de variable "" ( lege string ) is. Misschien kan je ergens $Headline = ""; zetten, dan zal ie er niet meer over zeveren denk ik.

Ik snap dat je natuurlijk je $Headline wilt laten staan, dus moet je het in een soort van "init.php3" doen, die aangeroepen wordt zodra de user op je page komt/inlogt/whatever.

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op woensdag 27 maart 2002 16:26 schreef Goblin het volgende:
IsSet geeft ook "false" als de waarde van de variable "" ( lege string ) is. Misschien kan je ergens $Headline = ""; zetten, dan zal ie er niet meer over zeveren denk ik.
Dat klopt niet, de variable is wel degelijk geset
probeer dit maar eens;
PHP:
1
<?echo "isset:",isset($string)?"set":"notset";echo "<BR>";echo "empty:",empty($string)?"empty":"notempty";echo "<BR>";// We Setten nu de string$string="";//echo "isset:",isset($string)?"set":"notset";echo "<BR>";echo "empty:",empty($string)?"empty":"notempty";?>
Ik snap dat je natuurlijk je $Headline wilt laten staan, dus moet je het in een soort van "init.php3" doen, die aangeroepen wordt zodra de user op je page komt/inlogt/whatever.
Je kan het overal doen....

Programmer - an organism that turns coffee into software.


Verwijderd

Op woensdag 27 maart 2002 16:38 schreef LuCarD het volgende:

Dat klopt niet, de variable is wel degelijk geset
probeer dit maar eens;
PHP:
1
<?een stukje code hier?>
Je hebt helemaal gelijk... ik dacht dat ik het ergens in mijn script gebruikt had, maar dat zal dan wel niet :+

/me gaat op zoek in code *spit* *spit*

  • DiSiLLUSiON
  • Registratie: September 2000
  • Laatst online: 30-05 14:58
Ff iets anders maar toch dit onderwerp:

Ik ben dus ook begonnen met het opschonen van m'n code. Ik zet E_ALL bij de initalisatie, en de errors vliegen me om de oren. Ze hebben allemaal met templates te maken.

ff een voorbeeld:

template.tpl. Daarin zit wat html, met een paar variables $vararray[item1] en $vararray[item2] en $var

In het script, script.php lees ik die template in dmv een wrapper die de file uitleest en er daarna in het script dat de template nodig heeft een eval() over te gooien. Dan krijg ik allemaal van deze waarschuwingen:

Warning: Undefined variable: vararray in script.php([regel#]) : eval()'d code on line [regel#intemplate]

Hoe kan ik dit het beste oplossen? Want het lijkt me niet zo'n goed plan om voordat de template ingelezen wordt elke variable na te gaan of die er al is met isset() en zoniet om 'm dan aan te maken, lijkt me nogal tijdrovend.

En aangezien iemand die geen verstand heeft van php toch de templates moet kunnen wijzigen, heeft het declareren of globallen van de variables aan het begin van de template met <? en ?> eromheen geen zin, want je zal natuurlijk altijd van die dumbasses hebben die dat dan weghalen omdat ze denken dat het niet in de template hoort.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09-09 20:58

Janoz

Moderator Devschuur®

!litemod

euhm.. Geen eval in je template parser gebruiken? :X

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • DiSiLLUSiON
  • Registratie: September 2000
  • Laatst online: 30-05 14:58
laatmaar - k thnx
Pagina: 1