2009-03-02 8 views
1

Ich bin ziemlich neu in PHP und erstelle eine Website für meine Firma. Ich verwende einen vorhandenen Code, den ich erhalten habe, aber ich kann nicht scheinen, dass er richtig funktioniert - jede Hilfe wäre sehr willkommen!PHP/HTML - Isset-Funktion

Ich habe eine Variable, $ ID, die den Produktkategorie Typ identifiziert auf der Seite angezeigt wird. Ich muss zunächst prüfen, ob die ID-Variable gesetzt wurde und wenn nicht, standardmäßig die Variable Kategorie 0.

Der Code I haben wie folgt:

setdefault($id, 0); 

function setdefault(&$var, $default="") 
{ 
    if (!isset($var)) 
    { 
     $var = $default; 
    } 
} 

So mit der Adresse www.website. com/browse.php, ich würde erwarten, dass es standardmäßig $ id = 0; Mit der Adresse www.website.com/browse.php?id=3 würde ich erwarten, dass $ id auf 3 gesetzt wird und die relevanten Produkte angezeigt werden. Trotz der Einstellung von $ id ist es immer noch auf 0 voreingestellt. Gibt es etwas offensichtlich falsch mit meinem Code?

Antwort

4

Sie erwarten wahrscheinlich, dass PHP die Variablen $ _POST und $ _GET als globale Variablen verwendet. Früher wurde PHP auf diese Weise eingerichtet, aber neuere Versionen erfordern, dass Sie explizit auf diese Variablen verweisen.

Sie können diese versuchen:

setdefault($_GET['id'], 0); 

function setdefault(&$var, $default="") 
{ 
    if (!isset($var)) 
    { 
     $var = $default; 
    } 
} 

oder auch einfach mehr (den ternären Operator):

$id = array_key_exists('id', $_GET) ? $_GET['id'] : 0; 
+0

Vielen Dank. Es scheint, dass der Code, den ich erhalten habe, etwas veraltet ist. Nachdem Sie Ihren Rat angenommen haben, funktioniert der Code perfekt :) – Tray

+0

Der Aufruf setdefault ($ _ GET ['id'], 0) kann immer noch eine Warnung generieren, wenn ID kein Index in $ _GET ist. – jmucchiello

+0

Sie könnten dies verbessern und keine Warnung generieren, indem Sie array_key_exists ('id', $ _GET) verwenden – jonstjohn

0

Wie gesetzt $id werden? Wenn register_globals ausgeschaltet ist (und in PHP 4.2 und neuer standardmäßig deaktiviert ist), müssen Sie stattdessen $_GET['id'] oder $_POST['id'] betrachten (oder $_REQUEST['id'], aber es gibt Gründe, dies zu vermeiden).

1

Zunächst einmal, wenn dies PHP 5.X ist Ich empfehle, dass Sie Variablen nicht per Referenz mit der & übergeben. Das wird gesagt. Der Isset-Funktionsaufruf wird immer wahr mit der Funktion sein. Aber Sie erhalten eine undefinierte Variable Warnung auf dem setdefault ($ id, 0);

Versuchen Sie es stattdessen.

$id = isset($id) ? $id : 0; 
0

Der Code einstellen $id irgendwann aus dem Query-String (browse.php?id=3) ebenfalls einbezogen werden muß. Möglicherweise denken Sie an die register_globals Einstellungen, die PHP hat, die automatisch Variablen erstellen, wenn sie in der Abfragezeichenfolge enthalten sind. Aktivieren Sie diese Funktion NICHT wieder, seit einigen Jahren ist das eine wirklich schlechte Idee.

Jede Variable, die Sie aus der Abfragezeichenfolge ziehen, muss vor der Verwendung auf Typ/Sicherheit überprüft werden. So zum Beispiel könnten Sie die Variable aus dem $_GET Super global ziehen, um zu sehen, ob es numerisch ist, wenn es nicht so ist die Standardeinstellung:

if (!is_numeric($_GET['id']) { 
    setdefault($_GET['id'], 0); 
} 
1

Wenn $ id nicht gesetzt ist, um der Anruf zu SETDEFAULT ($ id, 0) erzeugt eine Warnung. Eine Funktion wie setdefault funktioniert in PHP nicht. Benutze das stattdessen.

if (!isset($id)) $id = 0; 

Wenn Sie dies für Array-Variablen tun, wie $ _GET und $ _POST, können Sie dies tun:

function getuservar($A, $index, $default = '') { 
    if (!isset($A[$index])) return $default; 
    if (get_magic_quote_gpc()) return stripslashes($A[$index]); 
    return $A[$index]; 
} 

$clean_id = getuservar($_GET, 'id', 0); 

Diese Rückkehr Form ist besser, weil Sie die _GET Array $ nicht mehr verwenden sofort und Verwenden Sie nur die Variablen, die im Rest des Codes bereinigt sind. Sie bereinigen Ihre externen Variablen einmal und berühren nie wieder die externen Variablen in Ihrem Code. $ A kann $ _GET, $ _POST, $ _REQUEST oder $ _COOKIE sein.

Es behandelt auch die lästigen magic_quote Zeug für Sie, damit Sie wissen, dass die Daten in der Variablen der Text vom Benutzer gesendet wird. Denken Sie daran, es beim Senden an den Benutzer oder an die Datenbank erneut zu bereinigen.