Abfrage auf 0
Gast
- php
Hallo,
irgendwie klappt's nicht. Ich möchte einen per GET oder POST hereinkommenden Wert auf 5 setzen, vorausgesetzt, er ist leer. Die Zahl 0 ist ein gültiger Wert und soll nicht ersetzt werden.
$wert = ( $_POST['wert'] ) ? $_POST['wert'] : $_GET['wert'];
if (!$wert && $wert!=0 ) $wert = 5;
Wenn kein Wert hereinkommt, müsste die erste Bedingung TRUE sein. Und KEIN Wert sollte doch auch ungleich 0 sein, oder?
Die Doppelbedingung wird nicht wahr.
Auf isset kann ich nicht abfragen, denn der Wert kann mit '' (leer) hereinkommen.
Gruß, Gast.
Hallo,
isset fragt, ob die variable gesetzt ist, also überhaupt vorhanden ist. "" ist ein gültiger wert. dann ist sie gesetzt.
"" ist ein leere String, aber im zweifel "false" - if("")
0 ist auf "false", typenkonvertiert.
if($notSet) sollte dir je nach Errorreporting eine Notice auswerfen: undeclared variable.
("" ==== "") ist true;
("" === false) ist false;
(0 === false) ist false;
($notSet === false) ist - keine Ahnung. Probiers aus.
isset($notSet) ist definitiv false, wenn es eben nicht gesetzt ist.
$setToEmptyString="";
isset($setToEmptyString) ist true!!!
Gruß
jobo
Hello,
Post-Parameter kommen in PHP immer als String an.
Man kann also nur prüfen, ob überhaupt ein bestimmter Parameter mitgeschickt wurde und dann erst prüfen, ob er einen Inhalt hat, also die Stringlänge prüfen.
Außerdem kann man noch feststellen, ob eine Typumwandlung in den erwünschten Zieltyp verlustfrei und fehlerfrei vorgenommen werden kann. Hierfür hat PHP eigene Funktionen
http://de.php.net/manual/en/filter.filters.validate.php
die man aber zur Not auch "zu Fuß" nachbilden kann.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hello,
irgendwie klappt's nicht. Ich möchte einen per GET oder POST hereinkommenden Wert auf 5 setzen, vorausgesetzt, er ist leer. Die Zahl 0 ist ein gültiger Wert und soll nicht ersetzt werden.
$wert = ( $_POST['wert'] ) ? $_POST['wert'] : $_GET['wert'];
if (!$wert && $wert!=0 ) $wert = 5;
if (isset($\_POST['wert']) and strlen($\_POST['wert']) > 0)
{
$wert = intval($\_POST['wert']);
}
else
{
$wert = 0;
}
Das ist aber auch nur eine Näherungslösung, denn eigentlich müsstest Du nicht nur mit intval() den Wert zum Ingteger machen, sondern auch prüfen, ob das hereinkommende Format sauber und verlustfrei in einen Integer überführbar ist, also die literale Darstellung eines Integers hat.
Dafür hat PHP die diversen Filterfunktionen
<http://de.php.net/manual/en/book.filter.php>
<http://de.php.net/manual/en/filter.filters.validate.php>
Und Du musst wissen, ob Du tolerant mit Parametern umgehen willst, dann wären die Sanitize-Filter die passenden, oder strict. Dann müsstest Du nur validieren.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg

--
☻\_
/▌
/ \ Nur selber lernen macht schlau
<http://bergpost.annerschbarrich.de>
der Fehler ist hier:
$wert = ( $_POST['wert'] ) ? $_POST['wert'] : $_GET['wert'];
Wenn $\_POST['wert'] die gültige Zahl 0 hat, wird sie \_nicht\_ genommen.
Habe ich geändert in
~~~php
$wert = (!is_null($_POST['wert'])) ? $_POST['wert'] : $_GET['wert'];
if ( is_null( $wert )) $wert = 5;
Jetzt klappt's.
Gast
Hallo,
is_null und isset sollten doch eigentlich ident sein, oder? bzw. eben genau den gegenteiligen boolean zurückliefern.
is_null ($notSet) === true;
isset ($notSet) === false;
Gruß
jobo
Hi,
Jetzt klappt's...
Hat sich zwar erledigt, vielleicht findest du aber diese Links noch interessant:
PHP type comparison tables
Vergleichs-Operatoren
Schöne Grüße,
Jonny 5