Frage

Ich habe einige Legacy-Code, der dies hat:

<?PHP
    if(isset($_GET['pagina'])=="homepage") {
?>
HtmlCode1
<?php 
} else { 
?>
HtmlCode2
<?php 
} 
?>

Ich weiß nicht genau warum, aber dies scheint zu funktionieren. Die HTMLCODE1 geladen wird, wenn ich? Pagina = Homepage und die HTMLCODE2 geladen werden, wenn die pagina var nicht existiert oder ist etwas anderes (noch nicht wirklich mit etwas anderem gesehen, nur nicht dort). Die Website ist mit PHP4 (weiß nicht, die genaue Version). Aber wirklich, wie kann das funktionieren? Ich schaute auf das Handbuch, und es sagt isset ein Bool zurückgibt ..

Wer?

War es hilfreich?

Lösung

Das Problem ist, dass „==“ kein Typ empfindlichen Vergleich ist. Jede (nicht-leere) Zeichenfolge "gleich" boolean wahr, aber nicht identisch , um es (denn das müssen Sie den "===" Operator verwenden).

Ein kurzes Beispiel, warum Sie dieses Verhalten sind zu sehen:
http: //codepad.org/aNh1ahu8

Für mehr Details über sie aus der Dokumentation finden Sie unter:
http://php.net/manual/en/language.operators.comparison.php
http://ca3.php.net/manual/en/types.comparisons.php (die "Loose Vergleiche mit ==" Tabelle speziell)

Andere Tipps

isset() gibt wahr oder falsch. In einem boolean Vergleich würde "homepage" true bewerten. So im Wesentlichen bekommt Sie hier:

if ( isset($_GET['pagina']) == true )

Wenn pagina alles gleich, werden Sie HTMLCODE1 sehen. Wenn es kein Satz ist, werden Sie HTMLCODE2 sehen.

Ich habe gerade versucht es, dies zu bestätigen und zu ?pagina=somethingelse gehen tut nicht Show HTMLCODE2.

Ich vermute, dass es ein Fehler ist, da es nicht wirklich Sinn wahr / falsch mit „Homepage“ vergleichen macht. Ich würde der Code erwartet eigentlich sein sollte:

if (isset($_GET['pagina']) && ($_GET['pagina'] == "homepage")) {
}

Einige Ideen, wie diese (abgesehen von der bereits erwähnten "Homepage" == true) funktionieren könnte:

  • Isset wurde neu definiert irgendwo?
  • Es ist eine Selbst modifizierte Version von PHP?
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top