sandman Geschrieben 8. September 2002 Teilen Geschrieben 8. September 2002 Hallo! Ich bin PHP-Newbie und wollte mal ein ganz simples Formular machen: <? if ($sent == '') //Abfrage, ob leer { echo "<form action=\"forum.php\">"; echo "PLZ: <input type=\"text\" name=\"plz\"><br>"; echo "<input type=\"submit\" value=\"OK\"><br>"; echo "</form>"; }else { if ($plz!="" && $plz > 1000 && $plz <= 99998 ) echo "<br><br>PLZ Gültig!"; else echo "<br><br>PLZ Ungültig!"; } ?> Genauso wird es in tausenden php-beispielen im Netz erklärt. Nur bei mir gehts nicht. Denn der sagt immer: Notice: Undefined variable: sent in C:\Programme\Apache Group\Apache2\htdocs\forum.php on line 2 Also der will die Variable $sent nicht. Kann ich als C-Programmierer nachvollziehen, ist ja noch nicht deklariert :-). Also, was ist an mein Skript falsch? - Oder ist da gar nichts falsch, schliesslich habe ich es ja so aus dem Netz. - Aber was ist dann falsch? Hiiiiiiilfeeee !!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 8. September 2002 Teilen Geschrieben 8. September 2002 Original geschrieben von sandman Genauso wird es in tausenden php-beispielen im Netz erklärt. Nur bei mir gehts nicht. Stimmt, und genauso ist schon in tausenden Variation beschrieben worden, das ab der PHP Version 4.2 die Variable register_globals in der php.ini aus sicherheitstechnischen Gründen standardmäßig auf off steht. nähere Infos, hier: http://www.dclp-faq.de/q/q-sicherheit-global.html http://www.php.net/manual/en/language.variables.predefined.php Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ranger81 Geschrieben 9. September 2002 Teilen Geschrieben 9. September 2002 <? if ($sent == '') //Abfrage, ob leer { da ist schon mal n fehler, es muss: <? if ($sent == ''") //Abfrage, ob leer { mit zwei "" (Anführungszeichen) heissen.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 9. September 2002 Teilen Geschrieben 9. September 2002 Moin, Moin, 1. hat das nichts mit der Fehlermeldung zu tun. 2. stimmt das nicht. Also erst mal selbst überlegen bzw ausprobieren wenn man solche Behauptungen aufstellt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ranger81 Geschrieben 9. September 2002 Teilen Geschrieben 9. September 2002 ? Dachte das könnte viellecht an dem liegen, weil deklarieren muss man in php ja nicht... und von C/C++ weiss ich dass man if abfragen mit zwei "" machen muss, da php ähnlich ist von der syntax her, dachte ich dass es an dem liegen könnte, ausprobieren kann ich schlecht, an diesem nc hier habe ich kein php zur verfügung... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MiH Geschrieben 9. September 2002 Teilen Geschrieben 9. September 2002 so sollte es gehen <?php if(!isset($_POST["send"])){ ?> <form action="forum.php" method="post"> PLZ: <input type="text" name="plz" /><br /> <input type="submit" name="send" value="OK" /><br /> </form> <?php }else{ if(!empty($_POST["plz"]) && $_POST["plz"] >= 10000 && $_POST["plz"] <= 99998){ echo "<br /><br />PLZ Gültig!"; }else{ echo "<br /><br />PLZ Ungültig!"; } } ?> Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
jomama Geschrieben 9. September 2002 Teilen Geschrieben 9. September 2002 Stimmt. So geht es hundert pro. Zur Erklärung für NewBies: empty($variable) gibt 1 zurück, wenn eine Variable leer ist, 0, wenn nicht. Wenn du eine Bedingung a la if ($variable==""){} machst, fragst du damit ab, ob $variable ein leerer String ist. Das ist nicht der Fall, da du $variable nicht als String deklariert hast. Soviel zum Verständnis. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
jomama Geschrieben 9. September 2002 Teilen Geschrieben 9. September 2002 Original geschrieben von Jaraz Moin, Moin, 1. hat das nichts mit der Fehlermeldung zu tun. 2. stimmt das nicht. Also erst mal selbst überlegen bzw ausprobieren wenn man solche Behauptungen aufstellt. 1. Hat er recht, das müssten, wenn er es so macht, zwei Anführungszeichen sein(mal davon abgesehen, das das auf diese Art eh nicht gehen würde). 2. War line3 in deinem Posting auch nicht gerade fehlerlösend. Nix für ungut, bevor sich wieder ein Mod anstrengen muss, sags halt ich. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
sandman Geschrieben 9. September 2002 Autor Teilen Geschrieben 9. September 2002 Hi! @Jaraz: Hmm... Wenn ich die Variable register_globals auf On stelle, veraendert sich aber bei mir trotzdem nichts. @Ranger81: if ($sent == '') //Abfrage, ob leer Dieses '' sind ZWEI Hochkommas und kein Anführungszeichen. Hätte ich dazu schreiben sollen... @MiH Jo, so gehts... mit isset() und empty(), thx Also vielen Dank an alle! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 9. September 2002 Teilen Geschrieben 9. September 2002 Original geschrieben von jomama 1. Hat er recht, das müssten, wenn er es so macht, zwei Anführungszeichen sein(mal davon abgesehen, das das auf diese Art eh nicht gehen würde). 1. [ironie]Dann habe ich ein super spitzen PHP, bei dem etwas funktioniert was bei dir nicht funktioniert.[/ironie] 2. Gehe ich davon aus, wenn jemand ein Skript postet, dass es das machen soll, was da steht. In diesem Fall also ob $sent leer ist. Dieses geht sehr wohl, wenn man register_globals auf on stehen hat und dem Skript den Parameter übergibt. Beispiel: <a href="<?php $PHP_SELF?>?sent=&foo=bar">Link 1</a> <a href="<?php $PHP_SELF?>?sent=42&foo=bar">Link 2</a> <? if ($sent == '') //Abfrage, ob leer { echo "<form action=\"forum.php\">"; echo "PLZ: <input type=\"text\" name=\"plz\"><br>"; echo "<input type=\"submit\" value=\"OK\"><br>"; echo "</form>"; }else { if ($plz!="" && $plz > 1000 && $plz <= 99998 ) echo "<br><br>PLZ Gültig!"; else echo "<br><br>PLZ Ungültig!"; } ?> [/PHP] Glückwunsch, das du erraten hast was er will. [i]Original geschrieben von jomama [/i] [b]2. War line3 in deinem Posting auch nicht gerade fehlerlösend.[/b] Anscheinend kann dein Browser keine Smilys darstellen. Außerdem hat Ranger81 längst geantwortet und hätte bestimmt was gesagt wenn ihm an meinem Posting etwas nicht gepasst hätte. [i]Original geschrieben von jomama [/i] [b]Nix für ungut, bevor sich wieder ein Mod anstrengen muss, sags halt ich. [/b] Was dieser Satz soll, kann ich nicht nachvollziehen. Kannst dich ja als Mod bewerben. Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MiH Geschrieben 10. September 2002 Teilen Geschrieben 10. September 2002 if ($sent == '') // [/php] $sent wird nie FALSE ergeben, da die variable nicht existiert oder seht ihr die irgendwo?? also bleibt $sent immer leer und es wird immer das formular angezeigt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 10. September 2002 Teilen Geschrieben 10. September 2002 Hallo, bis PHP Version 4.1.2 wurden Variablen die per Post oder Get an ein Skript gesendet werden global registriert. D.h. sie waren sofort verfügbar. So kann also auch in diesem Skript die variable $sent existieren. Seit 4.2 ist das nicht mehr so und du must über die Variablen $_GET oder $HTTP_POST_VARS darauf zugreifen. In vielen PHP Büchern wird allerdings nicht darauf hingewiesen, sondern einfach mit Formularen wie dem oben gezeigten gearbeitet, was am Anfang zu Frustationen führt. Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MiH Geschrieben 10. September 2002 Teilen Geschrieben 10. September 2002 wenn schon dann so: Seit 4.2 ist das nicht mehr so und du must über die Variablen $_GET oder $_POST darauf zugreifen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 10. September 2002 Teilen Geschrieben 10. September 2002 oder $_REQUEST Einen Überblick über alle "Vordefinierte Variablen" gibt es hier: http://www.php.net/manual/de/language.variables.predefined.php Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
jomama Geschrieben 11. September 2002 Teilen Geschrieben 11. September 2002 Hmmm, mein Provider hat im Vertrag angegeben, das er PHP 4.2 verwendet. Warum gehts dann immer noch? Lügt der? :confused: Und muss ich dann alle meine Formulare umschreiben, wenn der seinen Server doch noch umgestellt wird? @jaraz Nix für ungut, ich wurde auch schon für Sachen von den Mods gerügt, die ich so gar nicht gemeint hatte. War nicht bös gemeint. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 11. September 2002 Teilen Geschrieben 11. September 2002 Original geschrieben von jomama Hmmm, mein Provider hat im Vertrag angegeben, das er PHP 4.2 verwendet. Warum gehts dann immer noch? Lügt der? Er kann ja auch register_globals wieder auf on gestellt haben, um sich vor den ganzen Anfragen zu schützen die kommen würden wenn ein paar Skripte nicht mehr laufen. Prüfen kannst du das über die Ausgabe von: phpinfo(); Original geschrieben von jomama Und muss ich dann alle meine Formulare umschreiben, wenn der seinen Server doch noch umgestellt wird? Nur wenn er register_globals irgendwann umstellt. Es gibt aber einen Ansatz, der am Anfang jedes Skriptes alle Variablen von Hand definiert. Wurde hier im Forum glaube ich auch schon mal gepostet. Original geschrieben von jomama @jaraz Nix für ungut, ich wurde auch schon für Sachen von den Mods gerügt, die ich so gar nicht gemeint hatte. War nicht bös gemeint. Na dann bin ich ja froh, das die Mods mich bisher in Ruhe gelassen haben. :bimei Bevor ich etwas schreibe, teste ich das wenn ich mir nicht sicher bin. Und wenn man sich sein Skript dann anschaut, merkt man, dass das zwei Hochkommata und nicht Anführungsstriche waren. Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.