PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "foobar" == 0 -> true



SFX
31.10.2010, 21:30
<?php

$var = $_GET+++91; 'x' +++93;; // irgendwie kann ich keine eckigen Klammern posten o.O ? +++93; -> eckige Klammer

if($var == intval($var))
echo "safe.. $var == ".intval($var);
else
echo "unsafe!.. $var != ".intval($var);

?>
in der Theorie wird, wenn zB foobar bei $var reinkommt, durch intval eine 0 draus

und 0 ist != "foobar".. da bin ich mir relativ sicher..

ich komme aber immer in den "safe" fall, egal ob ich Zahlen oder Buchstaben rein gebe..

was ist also bei mir falsch ?

Edit://
Ich bin leider immer noch nicht hinter gekommen was schief läuft, allerdings kann man sich ein workaround mit md5 Prüfsummen basteln..

echoslider
01.11.2010, 07:38
<?php
$var = $_GET['x'];

if(intval($var)=="0")
{
echo'unsafe';
}
else
{
echo'save';
}
?>

der php bbc generator scheint kaputt zu sein... meine [ werden auch ersetzt.

$var == intval($var)
7 == 7

The-God-of-all
01.11.2010, 16:25
Ich vermute mal, dass PHP erkennt, das du eine Zahl mit einem String vergleichen willst und daher den String in eine Zahl umwandeln will, weil es aber keine Zahl ist kommt 0 raus und schon ist wieder beides das gleiche...

Hast du schon einmal versucht === (3 Gleichheitszeichen) zu nutzen? Weil laut Referenz soll das ja einen genaueren Vergleich bieten (wo eben nicht konvertiert ist). Habe ich aber selbst noch nie verwendet, kann also nicht garantieren, dass das funktioniert.

Warum willst du unbedingt so überprüfen ob es eine Zahl ist? Es gibt eine Funktion is_numeric() wäre die nicht vielleicht besser geeignet?

SFX
01.11.2010, 17:54
Ich vermute mal, dass PHP erkennt, das du eine Zahl mit einem String vergleichen willst und daher den String in eine Zahl umwandeln will, weil es aber keine Zahl ist kommt 0 raus und schon ist wieder beides das gleiche...

ich habs schon mit settype() in einen String umgewandelt, hat nicht geklappt..


Hast du schon einmal versucht === (3 Gleichheitszeichen) zu nutzen? Weil laut Referenz soll das ja einen genaueren Vergleich bieten (wo eben nicht konvertiert ist). Habe ich aber selbst noch nie verwendet, kann also nicht garantieren, dass das funktioniert.

Jop, hab ich schon versucht..


Warum willst du unbedingt so überprüfen ob es eine Zahl ist? Es gibt eine Funktion is_numeric() wäre die nicht vielleicht besser geeignet?

arg, natürlich, scheinbar ist 22:30 doch schon zu spät abends als dass ich noch klar denken könnte.. >.<

mit is_numeric() funktioniert es natürlich..

trotzdem ist es seltsam warum das andere nicht funktioniert ^^

echoslider
03.11.2010, 14:18
ähm. es ist nicht seltsam.... ich habs doch schon beantwortet.

$var="7";

intval($var) ist dann auch 7

und dann vergleichst du if($var == intval($var)) bzw 7 == 7

SFX
03.11.2010, 17:40
intval("foobar") ergibt aber 0

und der vergleich zwischen dieser 0 und "foobar" ergibt true

und das dürfte nicht sein