2010-11-18 1 views

Antwort

-1

Dies funktioniert am besten:

$konami = $_GET['konami']; 

if($konami == "true") 
{ 
    echo 'Hello World!'; 
} 
else 
{ 
    header('HTTP/1.0 404 Not Found'); 
} 
+2

Nein, es funktioniert nicht am besten :) Wenn Sie den '? konami' Parameter in Ihrer URL nicht übergeben, dann existiert er nicht und Sie erhalten einen 'Undefined index' beim Zuweisen es zu "$ konami". Setzen Sie das PHP-Debugging/Fehlerreporting auf on und Sie werden sehen. –

3

Umm das?

if (isset($_GET['konami']) === true) { 
    // something 
} else { 
    //show 404 
} 
+0

@Gordon: Die '' true' gegen isset getestet wird() ', so dass es * wird * Arbeit. – Boldewyn

+4

Nur Problem mit diesem funktioniert es mit jedem Abfragewert, so falsch würde auch funktionieren, solange die Abfrage ist konami – Cameron

+0

@Cameron er hat gesagt, wenn es existiert, nicht welchen Wert es hat :) –

0

Sie es wie folgt tun:

$konami = false; 
if(isset($_GET['konami'])){ 
    $konami = $_GET['konami']; 
} 

if($konami == "true"){ 
    echo 'Hello World!'; 
} 
else{ 
    header('HTTP/1.0 404 Not Found'); 
} 

In diesem Fall werden Sie immer $konami definiert haben und - falls eingestellt - mit der gefüllt Wert Ihres GET-Parameters.

1

Ganz einfach:

if(isset($_GET['konami']) && $_GET['konami'] != 'false') { 
    //something 
} else { 
    // 404 
} 
-1

einfachste und schnellste Weg, es zu tun:

if($konami != null){ echo $konami; } else { header('HTTP/1.0 404 Not Found'); } 
8

OPs Frage ist ein wenig unklar. Wenn Sie davon ausgehen, dass er überprüfen will, dass konami ist ein $_GET Parameter und dass sie den Wert des "true" haben zu tun:

if (isset($_GET["konami"]) === true && $_GET["konami"] === "true") { 
    // something 
} else { 
    // show 404 
} 

Das Problem mit der aktuellen angenommenen Antwort (von Cameron) ist, dass es fehlt die isset Prüfung (was unverzeihlich ist, ist es objektiv falsch). Das Problem der höchsten Wahl (von Jan Hancic) ist, dass es die === "true" Prüfung fehlt (was umstritten ist, hängt davon ab, wie Sie die Frage interpretieren).

Beachten Sie, dass && ist eine Lazy-und, was bedeutet, dass, wenn der erste Teil falsch ist, der zweite Teil wird nie ausgewertet, was die "Undefined index" Warnung verhindert. Daher ist die Reihenfolge der Aussagen wichtig.

Beachten Sie auch, dass $a === true nicht dasselbe ist wie $a === "true". Der erste vergleicht einen booleschen Wert, während der zweite einen String vergleicht.

Wenn Sie schwachen Vergleich $a == true tun, überprüfen Sie für Truthy-Ness.

Viele Werte sind truthy, wie die Zeichenfolge "true", die Nummer 1, und die Zeichenfolge "foo". Beispiele für Falsy-Werte sind: leere Zeichenfolge "", die Nummer 0 und null.

+0

Gibt es einen besonderen Grund, 'isset (..) === true' vs' isset (..) 'zu verwenden, oder ist das die Stileinstellung? – user2864740

+0

Das ist Stilvorliebe. Sie können wählen, '! Isset()' zu verbieten, was sehr nach 'isset()' aussieht, so dass explizit '=== true' oder' === false' in Betracht gezogen werden muss. – Halcyon

+0

Nein, ich bevorzuge '(isset ($ _GET [" konami "]) === true) === true'. Weißt du, um es noch deutlicher zu machen. ;-) –

4

Es gibt ein wenig Verwirrung um welchen Wert getestet werden sollte. Möchten Sie den Parameter konami als true im Sinne von boolesch testen, d. H. Sie möchten konami als truthy testen, oder möchten Sie testen, ob der Zeichenfolgenwert gleich "true" ist?Oder wollen Sie konami Parameter für beliebige Wert im Allgemeinen testen?

Ich denke, was hier gesucht wird, ist konami für einen gegebenen String-Wert, "true" in diesem Fall zu testen, und zur gleichen Zeit gesetzt werden. In diesem Fall ist dies perfekt genug:

ini_set('error_reporting', E_ALL & ~E_NOTICE); 
... 
if ($_GET['konami'] == "true") 
    ... 

Dies ist genug, denn wenn die $_GET['konami'] ungesetzt ist, es nicht auf einen String-Wert mit Ausnahme "" gleich sein kann. Die Verwendung von === ist nicht erforderlich, da Sie wissen, dass $_GET['konami'] eine Zeichenfolge ist.

Beachten Sie, dass ich die E_NOTICE ausschalten, die jemand nicht mag - aber diese Art von "Hinweise" sind normalerweise gut in vielen Programmiersprachen und Sie werden nichts verpassen, wenn Sie sie deaktivieren. Wenn Sie dies nicht tun, müssen Sie Ihren Code unecessarily komplex wie diese machen:

if (isset($_GET['konami']) && $_GET['konami'] == "true") 

Sie wirklich mit diesem Sie Ihren Code wollen erschweren, oder besser gesagt es einfach zu machen und die Hinweise wie Undefinex index ignorieren? Es liegt an dir.

Probleme mit anderen Antworten, wie Sie erwähnt:

  • @Jan Hancic Antwort: Es testet für true, nicht "true".
  • @Cameron Antwort: könnte vereinfacht werden und er erwähnte nicht die Notwendigkeit der Deaktivierung E_NOTICE.
  • @Frits van Campen Antwort: zu komplex, um meinen Geschmack unnötig Test für === true
1

Sie können diesen Code versuchen. In diesem Code wurden zwei Bedingungen um eins überprüft, wenn Bedingung $ konami Wert enthält und $ konami 'true' enthält.

$konami = $_GET['konami']; 
if(($konami) && ($konami == "true")){ 
/*enter you true statement code */ 
}else { 
/* enter your false statement code */ 
} 
0
if(!$variable) { 

    //the variable is null 
    die("error, $variable is null"); 
}else{ 

    //the variable is set, your code here. 
    $db->query("...."); 
} 
Verwandte Themen