Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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 !!!

Geschrieben
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. :D

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

Geschrieben

?

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...

Geschrieben

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!"; 

 }

} 

?> 

Geschrieben

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.

Geschrieben
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.:rolleyes:

Geschrieben

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 :D

Also vielen Dank an alle!

Geschrieben
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.:rolleyes: [/b]

Was dieser Satz soll, kann ich nicht nachvollziehen. Kannst dich ja als Mod bewerben.

Gruß Jaraz

Geschrieben


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.

Geschrieben

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

Geschrieben

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.

Geschrieben
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. :D

Gruß Jaraz

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...