Frage

Ich bin ziemlich neu in PHP und eine Website für meine Firma erschaffe. Ich verwende einige vorhandenen Codes, die ich erhalten haben, aber kann nicht scheinen, damit es richtig funktioniert - jede Hilfe wäre sehr willkommen

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

Der Code, den ich habe, ist wie folgt:

setdefault($id, 0);

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

So mit der Adresse www.website.com/browse.php, würde ich erwarten, dass es $ id = 0 auf Standard; mit der Adresse www.website.com/browse.php?id=3, würde ich erwarten, dass es $ id bis 3 und zeigt die entsprechenden Produkte zu setzen. Doch trotz $ id Einstellung, es immer noch standardmäßig auf 0. Gibt es etwas offensichtlich falsch mit meinem Code?

War es hilfreich?

Lösung

Sie erwarten wahrscheinlich PHP die $ _POST und $ _GET als globale Variablen zu verwenden. PHP verwendet Setup diese Art und Weise zu sein, wieder in den Tag, aber neuere Versionen benötigen Sie diese Variablen explizit verweisen.

Sie könnten versuchen, diese:

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

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

oder noch einfacher (mit dem ternären Operator):

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

Andere Tipps

Zunächst einmal, wenn diese PHP 5.x ist empfehle ich Ihnen nicht passieren Variablen durch Verweis mit der &. Dass gesagt wird. der isset Funktionsaufruf immer withing die Funktion wahr sein. Aber Sie werden eine undefinierte Variable Warnung auf dem setdefault ($ id, 0) erhalten;

Versuchen Sie stattdessen.

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

Wenn $ id nicht gesetzt ist, um den Anruf zu SETDEFAULT ($ id, 0) erzeugt eine Warnung. Eine Funktion wie setdefault funktioniert nicht in PHP. Verwenden Sie diese 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 den $ _GET Array sofort nicht mehr verwenden und nur die Variablen verwenden, die im Rest des Codes gereinigt werden. Sie reinigen Ihre externen Variablen einmal und nie berühren die externen Variablen wieder in Ihrem Code. $ A kann _COOKIE $ _GET, $ _POST, $ _REQUEST oder $ sein.

Es behandelt auch die lästigen magic_quote Sachen für Sie, damit Sie wissen, die Daten in den Variablen der Text durch den Benutzer gesendet werden. Denken Sie daran, reinigen Sie es wieder, wenn es zurück an den Benutzer zu senden oder in die Datenbank.

Wie wird $id gesetzt werden? Wenn register_globals ausgeschaltet ist (und es ist standardmäßig deaktiviert in PHP 4.2 und höher), müssen Sie bei $_GET['id'] oder $_POST['id'] suchen, anstatt (oder $_REQUEST['id'], aber es gibt Gründe dafür, dass zu vermeiden).

Der Code einstellen $id irgendwann aus dem Abfrage-String (browse.php?id=3) müßte auch einbezogen werden. Sie könnten der register_globals Einstellungen denken, dass PHP, die in der Query-String automatisch Variablen erstellen, wenn enthalten hat, wird. NICHT diese Funktion wieder aktivieren, seit einigen Jahren, dass eine wirklich schlechte Idee erwiesen hat.

Jede Variable, die Sie aus der Abfrage-String ziehen muss für Typ / Sicherheit geprüft werden, bevor sie verwendet wird. So zum Beispiel die Variable aus der $_GET Super global ziehen könnte, um zu sehen, ob es numerisch ist, wenn es nicht dann den Standardwert ist:

if (!is_numeric($_GET['id']) {
  setdefault($_GET['id'], 0);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top