MySQL - Update statement fuer bis zu 300 Datensaetze

son gohan

Erfahrenes Mitglied
Hallo,

ich habe ein Formular mit dem man bis zu 300 Einstellungen absenden kann.

Der User wird bestimmt nicht jede Einstellung aendern, aber ich weis nicht wie das andere machen, ich denke ich muss jetzt eine richtig lange SQL Abfrage erstellen wo alle 300 Einstellungen drine stehen, damit alles gespeichert wird, wenn das Formular abgesendet wird.

Ich bin mir einerseits etwas unklar ob das richtig ist ein so langen SQL Query zu bauen, ob sowas ueberhaupt funktioniert und auch ueber den Aufbau vom Query bin ich noch etwas unklar, ein einziger Update sieht ja so aus;

PHP:
$sql="UPDATE `tabelle` SET `open`='1'  WHERE `close`='2'";

Wenn ich jetzt 300 Datensaetze habe, wie schreibt man dann so ein langen Update Befehl?
 
Sind die Einstellungen alle in einer Spalte oder sind sie normalisiert, sprich: du hast eine Tabelle in der jede Einstellung pro User eine Zeile einnimmt?
 
Die Einstellungen sind in einem kompletten Formular, die Seite ist ein komplettes Formular wo man bis zu 300 Sachen einstellen kann.

Zuerst lade ich alle Einstellungen aus der Mysql Tabelle in das Formular und dann kann der User Sachen einstellen und das Formular wieder abschicken und jetzt wenn er das abschickt muss ich wieder alles updaten und da weis ich noch nicht so recht wie am besten weil es so viele Einstellungen sind.
 
Das Formular ist vorersrt egal
Die Tabelle ist die Frage

so (also sauber normalisziert):
Code:
USER_ID | PARAM_ID | VALUE
 --------------------------
       1 |        1 | Foo
       1 |        2 | bar

oder so (naja, geht auch)
Code:
USER_ID | PARAM_1 | PARAM_2 | PARAM_3
-------------------------------------
      1 | Foo     | bar     |
 
Du könnest vorher per php oder javascript abfragen, welche Felder geändert wurden und nur aus diesen ein sql-Befehl bauen:
PHP:
$sql="UPDATE ' tabelle' ";
if (isset($_POST['formulareintrag1']))
{
$sql=."SET 'parameter1'='ja'";
}
if (isset($_POST['formulareintrag2']))
{
$sql=."SET 'parameter2'='ja'";
}
.....
$sql=."WHERE userid='bla'";
Die Alternative wäre, auch wieder die geänderten Datenabzufragen und dann jeweils ein Einzel-Update gegen die DB zu schicken.

Script wie immer ungetestet.
 
Das Formular ist vorersrt egal
Die Tabelle ist die Frage

so (also sauber normalisziert):
Code:
USER_ID | PARAM_ID | VALUE
 --------------------------
       1 |        1 | Foo
       1 |        2 | bar

oder so (naja, geht auch)
Code:
USER_ID | PARAM_1 | PARAM_2 | PARAM_3
-------------------------------------
      1 | Foo     | bar     |



Meine Tabele ist so aufgebaut:

einstellung | wert
_____________________
einstellung1 | 0
einstellung2 | 1

und so fuer ca. 300 einstellungen.

Das HTML Fomular besteht aus einem <form> Tag und ca. 300 input Tags
 
Du könnest vorher per php oder javascript abfragen, welche Felder geändert wurden und nur aus diesen ein sql-Befehl bauen:
PHP:
$sql="UPDATE ' tabelle' ";
if (isset($_POST['formulareintrag1']))
{
$sql=."SET 'parameter1'='ja'";
}
if (isset($_POST['formulareintrag2']))
{
$sql=."SET 'parameter2'='ja'";
}
.....
$sql=."WHERE userid='bla'";
Die Alternative wäre, auch wieder die geänderten Datenabzufragen und dann jeweils ein Einzel-Update gegen die DB zu schicken.

Script wie immer ungetestet.

Danke, das ist ein gutes beispiel, man muss dazu aber auch fuer alle 300 input Felder eine if isset() Abfrage bauen oder?
 
Ja, das müsste man einmalig machen. Es sei denn, die Felder sind so benannt, dass Du das mit einer Schleife erledigen kannst:
PHP:
$sql="UPDATE ' tabelle' ";
$i=1;
for ($i=1;$i<301;$i++)
{
 $name='formulareintrag.$i';
 if (isset($_POST['name']))
 {
   $sql=."SET 'parameter$i'='ja'";
 } // end if 
} // end for
$sql=."WHERE userid='bla'";

Script wie immer ungetestet.
 
danke, ich habe jetzt auch sowas gebaut:

PHP:
         foreach($_POST as $setting=>$value) 
                {
                  $sql="UPDATE settings SET value='".$value."' WHERE setting='".$setting."'";
                  if(!mysqli_query($DatabasePointer,$sql)) 
                     {
                       die('Update settings Error: ' . mysqli_error($DatabasePointer)); 
                     }
                }
 
Zurück