2011-01-16 16 views
0

Ich bin nicht sicher, wie dieses Problem zu erreichen, die mich für ein paar Tage verwirrt hat. Ich habe ein Formular, das einen Benutzerdatensatz in MySQL aktualisiert, wenn ein Kontrollkästchen aktiviert ist. Nun, das ist, wie meine Form dies tut:Holen Sie sich die letzte Checkbox

if (isset($_POST['Update'])) { 
     $paymentr = $_POST['paymentr']; //put checkboxes array into variable 
     $paymentr2 = implode(', ', $paymentr); //implode array for mysql 
     $query = "UPDATE transactions SET paymentreceived=NULL"; 
     $result = mysql_query($query); 
     $query = "UPDATE transactions SET paymentdate='0000-00-00'"; 
     $result = mysql_query($query); 
     $query = "UPDATE transactions SET paymentreceived='Yes' WHERE id IN ($paymentr2)"; 
     $result = mysql_query($query); 
     $query = "UPDATE transactions SET paymentdate=NOW() WHERE id IN ($paymentr2)"; 
     $result = mysql_query($query); 

     foreach ($paymentr as $v) { //should collect last updated records and put them into variable for emailing. 

      $query = "SELECT id, refid, affid FROM transactions WHERE id = '$v'"; 

      $result = mysql_query($query) or die("Query Failed: ".mysql_errno()." - ".mysql_error()."<BR>\n$query<BR>\n"); 
      $trans = mysql_fetch_array($result, MYSQL_ASSOC); 

      $transactions .= '<br>User ID:'.$trans['id'].' -- '.$trans['refid'].' -- '.$trans['affid'].'<br>'; 


     } 


    } 

Leider ist es dann aktualisiert die ALLE Benutzerdatensätze mit dem neuesten Datum, das ist nicht, was ich will, es zu tun. Die Alternative, an die ich gedacht habe, war, über Javascript, dem Kontrollkästchen einen Wert zu geben, der dynamisch aktualisiert würde, wenn der Benutzer ihn auswählte. Dann würden nur diese Checkboxen in das Array eingefügt werden. Ist das möglich? Gibt es eine bessere Lösung? Ich bin mir nicht einmal sicher, ob ich mein Gehirn darum kümmern könnte, wie man das mit Javascript macht. Liegt die Antwort vielleicht darin, wie mein MySQL-Code geschrieben ist?

-

Bearbeiten: Ok, nur mehr Informationen. Die SQL-Abfragen, die ich mache - die ersten zwei sind, alles sauber zu wischen (wenn eine Checkbox UNCHECKED ist) und dann aktualisieren sie die SQL-Abfragen, basierend darauf, welche Checkboxen beim Post überprüft werden.

Allerdings denke ich, das ist ein schlechter Weg, es zu tun. Warum erzwingen die Datenbank zuerst alle Daten für paymeceived, paymetdate löschen? Das Problem dabei ist auch, dass * alle nachfolgenden Kontrollkästchen unabhängig davon, wie lange sie noch überprüft wurden, in der SQL-Abfrage aktualisiert werden, wie sie jetzt ist. * Es muss einen Weg geben, es besser zu aktualisieren. Ich bin mir einfach nicht sicher, wie es geht. irgendwelche Ideen?

Antwort

2

Sie sind Filterung nicht durch ID in diesen Anfragen:

$query = "UPDATE transactions SET paymentreceived=NULL"; 
$query = "UPDATE transactions SET paymentdate='0000-00-00'"; 

Versuche Zugabe: WHERE id IN ($paymentr2)";

0

Das Problem in Ihren ersten 2 SQL-UPDATE-Anweisungen ist. Sie stellen keine WHERE-Klausel zur Verfügung, so dass alle Ihre Datensätze aktualisiert werden. Sie könnten hinzufügen:

WHERE id IN ($paymentr2) 

auf Ihre ersten beiden UPDATE-Anweisungen

Verwandte Themen