3 Stimmen

Die Eingabe von 0 in ein Feld wird als leer registriert?

Hier ist mein Code:

if (isset($_POST['addmonths'])){
    if (!empty($_POST['months'])){
        if (is_numeric($_POST['months'])){
            $monthstoadd = $_POST['months'];
            if ($monthstoadd < 1){
                mysql_query("UPDATE users SET months='lifetime' WHERE username='$lookupuser'");
                echo "Successfully set " . $lookupuser . " to lifetime";
            }elseif ($monthstoadd > 0){
                $monthstoadd = $monthstoadd*2592000;
                mysql_query("UPDATE users SET months=months+'$monthstoadd' WHERE username='$lookupuser'");
                echo "Successfully added " . $_POST['months'] . " months to " . $lookupuser . "'s paid time.";
            }else{
                echo "Error.";
            }
        }else{
            echo "Months need to be numeric. If you're trying to set lifetime, use 0.";
        }
    }else{
        echo "You didn't enter anything.";
    }
}

Wenn ich 0 eingebe, sollte der Benutzer auf Lebenszeit gesetzt werden, aber stattdessen ertönt nur das Echo You didn't enter anything. Ich bin mir nicht sicher, wie ich das Problem lösen kann. Irgendwelche Ideen?

2voto

T.J. Crowder Punkte 948310

Die Eingabe von 0 in ein Feld wird als leer registriert?

Ja, das tut sie. Von die Dokumente für empty :

Die folgenden Dinge werden als leer angesehen:

""
0
"0
N
F
array() (ein leeres Array)
var $var; (eine deklarierte Variable, aber ohne Wert in einer Klasse)

Irgendwelche Ideen?

empty scheint keine gute Übereinstimmung mit der Bedingung zu sein, nach der Sie suchen (haben sie etwas eingetippt). Da Sie offenbar bereits ein Markierungsfeld verwenden, um anzuzeigen, dass es sollte ein Wert sein, könnten Sie in Betracht ziehen trim und eine Prüfung gegen eine leere Zeichenkette:

if (trim($_POST['months']) != ''){

Da Sie mit $_POST['months] an vier verschiedenen Stellen zu speichern, würde ich wahrscheinlich auch die gekürzte Version in einer lokalen Variablen zwischenspeichern.

1voto

Artefacto Punkte 93200

Im Allgemeinen können Sie Folgendes ersetzen empty para isset (die zurückgibt false nur die Variable existiert nicht oder ist null ) oder array_key_exists (für Array-Schlüssel).

In diesem Fall können Sie Folgendes tun

if (!isset($_POST['months']) || $_POST['months'] === "")

Alternativ dazu

if (!array_key_exists('months', $_POST) || $_POST['months'] === "")

Da es sich um POST-Daten handelt, null wird niemals ein Wert sein (der Browser kann entweder keine Eingabe senden oder er sendet einen leeren String, den PHP in "" ). Deshalb, isset y array_key_exists sind austauschbar. isset ist jedoch vorzuziehen, da es sich nicht um eine Funktion handelt und daher schneller ausgeführt werden kann (ganz abgesehen davon, dass es schneller zu schreiben ist).

0voto

Aaron Butacov Punkte 28433

Sie müssen den Typ überprüfen, um sicherzustellen, dass er leer ist, anstatt ihn als leer zu registrieren mit === .

if ($_POST['months'] !== ''){

Es wird geprüft, ob es genau dem Wert empty entspricht. Ist dies nicht der Fall, ist die Prüfung erfolgreich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X