2017-09-07 15 views
0

Ich versuche, meine Datenbank innerhalb einer IF-Anweisung zu aktualisieren, aber es scheint nicht zu funktionieren. email_sent ändert sich nicht zu 1. Ist meine Aussage korrekt?Aktualisieren der Datenbank in einer IF-Anweisung

$result2 = mysql_query ("SELECT * FROM stock_control WHERE id = '$id' "); 

while ($row1 = mysql_fetch_array($result2)) 
{ 
$item=$row1['item']; 
$location=$row1['location']; 
$quantity=$row1['quantity']; 
$threshold=$row1['threshold']; 
$emailSent=$row1['email_sent']; 
} 


if ($quantity <= $threshold && $emailSent == 0) { 
mysql_query("UPDATE stock_control SET quantity=quantity - '$n_quantity', 
email_sent = '1' WHERE id = '$id' "); 
} else { 
mysql_query("UPDATE stock_control SET quantity=quantity - '$n_quantity' WHERE 
id = '$id' "); 
} 
+0

Ist email_sent Integer oder String? weil ''1'' eine Zeichenkette ist. Sie sollten nur '1' –

+0

@JuanCarlosOropeza verwenden, das ist nicht das Problem, MySQL konvertiert automatisch Typen in solchen Fällen –

+0

Vielleicht sollten Sie das gesamte Skript zum besseren Verständnis zeigen. Woher kommt beispielsweise die Variable $ n_quantity? –

Antwort

1

Sie schließen Ihre Schleife zu schnell für die Zeit. Sie sind nur der letzte Wert der Schleife bekommen:

$result2 = mysql_query ("SELECT * FROM stock_control WHERE id = '$id' "); 

while ($row1 = mysql_fetch_array($result2)) 
{ 
    $item=$row1['item']; 
    $location=$row1['location']; 
    $quantity=$row1['quantity']; 
    $threshold=$row1['threshold']; 
    $emailSent=$row1['email_sent']; 

    if ($quantity <= $threshold && $emailSent == 0) { 
     mysql_query("UPDATE stock_control SET quantity=quantity - '$n_quantity', 
     email_sent = '1' WHERE id = '$id' "); 
    } else { 
     mysql_query("UPDATE stock_control SET quantity=quantity - '$n_quantity' WHERE 
     id = '$id' "); 
    } 
} 
+0

So aktualisiert es die Datenbank, aber nicht genug Zeit, um die nächste IF, wenn das Sinn macht. Ich habe es vorbereiten und mailen und dann diesen Code if ($ emailSent == 1) { $ message = implode ("\ r \ n", $ Nachricht); mysql_query ("AKTUALISIEREN stock_control SET email_sent = 2 WHERE id = '$ id'") ;; } – Coops

+0

Nein, tut mir leid, ich erklärte es falsch, kein Timing-Problem. Sie müssen die DB aktualisieren INSIDE Die While-Schleife. während .. {...}. Ich bewegte einfach das Schließen der While, um die Schleife zu umfassen. –

0

Überprüfen Sie auf der $n_quantity Variable, es scheint nicht richtig definiert werden. Meinten Sie stattdessen $quantity?

Sie brauchen die while-Schleife möglicherweise nicht, da Sie nur mit einer Zeile der Tabelle arbeiten, der Zeile mit der angegebenen ID. Andernfalls, wenn Sie mehr Zeilen hätten, wäre die While-Schleife wie angegeben zu früh geschlossen worden.

SELECT * könnte zu viele Spalten auswählen, was von Nachteil sein könnte. Auch die Verwendung von msyql_query ist veraltet, Sie müssen mysqli_query oder PDO verwenden. So könnte die folgenden hilfreich sein, vorausgesetzt, dass $con ist Ihre Datenbankverbindung:

$result2 = mysqli_query($con,"SELECT item, location, quantity, threshold, email_sent from stock_control where id = '$id'"); 

list($item,$location,$quantity,$threshold,$emailSent) = mysqli_fetch_array($result2); 

if ($quantity <= $threshold && $emailSent == 0) { 
     mysqli_query($con,"UPDATE stock_control SET quantity=quantity - '$quantity', 
     email_sent = '1' WHERE id = '$id' "); 
    } else { 
     mysqli_query($con,"UPDATE stock_control SET quantity=quantity - '$quantity' WHERE id = '$id' "); 
    } 
0

Die Auflösungszeit wurde auf die Abfrage im Zusammenhang und deshalb musste ich die Verbindung schließen und eine neue Verbindung nach meinem HTML öffnen Sie die DB abfragen .

Vielen Dank an alle für Ihre Kommentare, da sie alle sehr nützlich waren und mir in Zukunft helfen werden.

:)

Verwandte Themen