2016-07-17 2 views
0

Ich habe 181 Felder in meiner Datenbank namens S1, S2 .... S181. Ich möchte diese Felder mit Werten aus den Eingängen WITH name = "S1", ..... NAME = "S181" aktualisieren.Update über 100 Felder in mysql

mein Code

$S1=$_POST['S1']; 
... 
... 
    $S181=$_POST['S181']; 
    $sql=mysqli_query($conn,"update 'cap' set S1='$S1'......S181='$S181'") 

ich etwas versuchen, wie

for ($i = 1; $i<=181; $i++) { 
     $(S$i)=$_POST['S$i']; 
     $sql = mysqli_query($conn, "UPDATE `cap4a` SET 
        S$i='$(S$i)' 
      WHERE IDID=".$id) or die (mysqli_error($conn)); 
    } 

Gibt es etwas falsch in der Art, wie ich S verwenden $ i, weil ich erhalte Fehler bin:

"Parse error: syntax error, unexpected '(', expecting variable (T_VARIABLE) or '$' in C:\xampp1\htdocs\update_cap4a.php on line 5" ? 
+2

Die wirkliche Lösung wäre, um Ihren Tabellenentwurf zu ändern. Es hat große Mängel. –

+1

Bitte korrigieren Sie Ihre Formatierung, indem Sie Ihren gesamten Code markieren und auf das Codesymbol in der Menüleiste des Textbereiches klicken. Es sieht wie ''} aus. Sagen Sie uns auch, woher kommt '$ id'? – BeetleJuice

+0

und wo sind Ihre Daten eingefügt, S1 = $ _POST ['S1'] alle Spalten Daten kommen aus $ _POST – pradeep

Antwort

0

Ich denke nicht, dass es eine gute Idee ist, 181 Abfragen auszuführen, um die gleiche Zeile zu ändern, wie Sie es tun. Führen Sie stattdessen eine Abfrage aus, die alle erforderlichen Änderungen an der Zeile vornimmt. Der folgende Code wird für Sie arbeiten:

$id = (int)$_POST['id'];//remove (int) if id IDID is a string 
$snippets = [];//holds little snippets eg: S1='value1' 
for($i=1;$i<=181;$i++){ 
    $varname = "S$i"; //S1...S181 
    if(!isset($_POST[$varname])) continue; 
    $snippets[] = " $varname='$_POST[$varname]' "; 
} 
$sql = '"UPDATE cap SET '.implode(",",$snippets)." WHERE IDID=$id"; 
$result = mysqli_query($conn,$sql) or die (mysqli_error($conn)); 

ich es nicht in diesem Snippet decken, aber Sie müssen mindestens zwei Dinge hinzufügen, bevor diese in der Produktion:

  1. Proper Fehlerbehandlung für wenn Ihre Abfrage
  2. Prepared Statements oder entkam Werte nicht gegen SQL-Injection-

gibt es etwas falsch i zu schützen n die Art und Weise verwende ich S i $

Um dynamisch eine Variable zu erstellen namens S10 und setzen Sie sich auf 'Wert', wenn $i=10, tun:

$varname = "S$i"; 
$$varname = 'value'; // $$varname can also be referred to as $S10 

Siehe Variable Variables in der Dokumentation.

+0

Ich benutzte deinen Code, es hat funktioniert! Vielen Dank! –

0

Ich würde gab es so gemacht:

for ($i = 1; $i<=181; $i++) { 
    $key = 'S'.$i; 
    $value = $_POST[$key]; 
    $update[] = "`{$key}` = '".$value."'"; 

    $sql = mysqli_query($conn, "UPDATE `cap4a` SET ".join(",",$update)." 
      WHERE IDID=".$id) or die (mysqli_error($conn)); 
}