Bernd: 001 = 1 und password_hash

Beitrag lesen

Hi,

Wenn du die Chance hast, verwende eine vernünftige Sprache, bei der nicht solche komischen Typkonvertierungen durchführt. Bei Zeichenketten würde man erwarten, dass der Ausdruck ("01" == "1") FALSE ergibt und nicht TRUE.

Meiner Meinung nach gibt es keine vernünftigen Sprachen. Jede Sprache hat seine Tücken und Stärken, Vor- und Nachteile. Am besten ist die Sprache, die man am liebsten spricht. Ich wollte auch keine neue Sprache mehr erlernen und auch wenn ich ab und zu damit Ringe das zu tun - aber das aus anderen Gründen. Nur mir gefällt das sehr gut, was ich derzeit nutze.

Natürlich hast du nicht unrecht. Ich denke die vorangehende 0 ist eine große Tücke bei PHP. Und von Zeichenketten kann man wirklich erwarten, dass "01" etwas anderes ist als "1". Eine Zeichenkette ist ein String und der beste Beweis, dass "01" nicht "1" sein kann ist die Funktion strlen, denn bei ersterm gibt sie 2 aus und nicht 1.
=== war doch eine Typprüfung? Aber wenn wir "01" und "1" manuell übergeben, wissen wir doch, dass es Strings sind. Dennoch:

var_dump("01"=="1");  //true
var_dump("01"==="1"); //false

PHP Doku:
$a == $b Gibt TRUE zurück, wenn $a gleich $b ist.
Trifft oben nicht zu. strlen beweißt es ja.

$a === $b Gibt TRUE zurück wenn $a gleich $b ist und beide vom gleichen Typ sind (eingeführt in PHP 4).
Müsste dann ebenfalls true ergeben.

MEINE VORANGEHENSWEISE:
Ich kann $_GET['ID']+=0; setzen um eine Umwandlung in einen integer zu bewirken. Wenn ich eine 000453 im $_GET['ID'] habe, dann ist es danach eine 453 in der Ausgabe. Die Nullen wurden gestrichen. Theoretisch geht auch intval, nur sehe ich ein problem darin, das es doch die oktalzahl nur in eine hexa umwandelt. Zumindest sehe ich das an den Beispielen in der PHP Doku.

ODER:
Ich benutze ltrim($_GET['ID'],'0') und habe dann 453 als string vorliegen, den ich dann mit intval sicher umwandeln kann. Durch das mod_rewrite sind für $_GET['ID'] nur Zahlen erlaubt. Oder kann das jemand noch von außen manipulieren? Eigentlich nicht oder?

Welche Variante würde man mir zuraten?

mfg,
Bernd