speichervorgang automatisieren
Martin
- php
0 Stefan0 Andreas Görtz0 Matthias Jütte0 Martin
Guten Morgen ;-)
Ich hätt eine Frage bezüglich optmieren von Datenbank Inserts und hoffe ihr könnt mir weiterhelfen.
Also ich hab in einem Formular mehrere Checkboxen die ich nacheinander abfrage und wenn sie aktiviert sind in die DB schreibe.
Die Checkboxen werden im Forum bereits dynamisch aufgebaut sprich ich hab alle Bezeichnungen in einer eigenen Tabelle gespeichert.
Das schaut im Quelltext dann so aus:
<input type='checkbox' name='extra_1' value='1' >1. Bezeichnung<br>
<input type='checkbox' name='extra_2' value='2' >2. Bezeichnung<br>
<input type='checkbox' name='extra_3' value='3' >3. Bezeichnung<br>
<input type='checkbox' name='extra_4' value='4' >4. Bezeichnung<br>
....
Beim Speichervorgang möchte ich nun diese input felder durchlaufen und jedes Mal wenn value > 0 soll das dann in die Datenbank geschrieben werden.
Mein bisheriger Lösungsversuch:
$i = 1;
while($i <= $max_id){
$extra = "$extra_".$i;
if ($extra > 0){
$result = mysql_query ( INSERT ... );
}
$i++;
}
$max_id = die größte ID aus der Extras Tabelle
Das Problem liegt glaube ich bei der dynamischen Erstellung der input Bezeichnung aber sicher bin ich mir da eben nicht.
Bitte um eure Hilfe Danke.
Mfg Martin
Moin
Mein bisheriger Lösungsversuch:
$i = 1;
while($i <= $max_id){
$extra = "$extra_".$i;
Mmmh, welchen Wert hat wohl $extra_?
Vermutlich nicht definiert, dem Kontext nach ist ein String gefragt, also nimmt PHP einen Leerstring bleibt also ''.$i;
Hier wird der Integer $i zu einem String konvertiert.
if ($extra > 0){
Klar das ist größer 0 für alle $i > 0.
Das war vermutlich nicht das was Du machen wolltest ...
Viele Grüße
Stefan
Hi,
Das schaut im Quelltext dann so aus:
<input type='checkbox' name='extra_1' value='1' >1. Bezeichnung<br>
<input type='checkbox' name='extra_2' value='2' >2. Bezeichnung<br>
<input type='checkbox' name='extra_3' value='3' >3. Bezeichnung<br>
<input type='checkbox' name='extra_4' value='4' >4. Bezeichnung<br>
....
bei diesem Vorgehen wirst du nach Abschicken des Formulars eine oder mehrere Variablen der Form
$_POST['extra_n']
erhalten, wobei n eine Zahl von 1 bis Anzahl der Checkboxen darstellt. Die nicht angeklickten Checkboxen werden dabei nicht übertragen, die Variablen existieren also nicht.
Mein bisheriger Lösungsversuch:
$i = 1;
while($i <= $max_id){
$extra = "$extra_".$i;
if ($extra > 0){
$result = mysql_query ( INSERT ... );
}
$i++;
}
hier gehst du davon aus, die Variablen würden $extra_n heißen, was nur bei der Einstellung register_globals=on stimmen würde und nicht empfehlenswert ist (siehe http://www.php-faq.de/q/q-formular-register-globals.html). Außerdem baut man dynamische Variablen nicht so
$extra = "$extra_".$i;
zusammen, sondern z.B. so:
$extra = ${'extra_' . $i};
denn im ersten Fall verknüpfst du lediglich den Inhalt der Variablen $extra_ (nicht existent) mit dem Inhalt von $i (1 bis n), erhälst also eine Warning, dass $extra_ nicht definiert ist und in $extra stünde lediglich der Inhalt von $i. Schau dir erstmal an, wie das Array $_POST nach dem Abschicken aussieht, z.B. mit
<?php
echo '<pre>';
print_r($_POST);
echo '</pre>';
exit;
?>
dann wirst du sehen, dass lediglich die Werte definiert sind, deren Checkbox du angeklickt hast, z.B.:
Array
(
[extra1] => 1
[extra3] => 3
)
um das abzufragen, kannst du in der Schleife die Funktion isset() benutzen (http://www.php.net/manual/en/function.isset.php):
if (isset($_POST['extra_' . $i])) {
// mach was
}
Gruß,
Andreas.
Hallo Martin!
Du kannst dir die markierten Checkboxes auch als Array zurückgeben lassen, indem du deine Felder wei folgt definierst:
<input type='checkbox' name='extra[]' value='1' >1. Bezeichnung<br>
<input type='checkbox' name='extra[]' value='2' >2. Bezeichnung<br>
<input type='checkbox' name='extra[]' value='3' >3. Bezeichnung<br>
<input type='checkbox' name='extra[]' value='4' >4. Bezeichnung<br>
Dann bekommst due die Variable $_POST['extra'] zurück, die ein Array mit den Werten der markierten Felder enthält.
Dann brauchst du eigentlich nur noch schreiben:
foreach ($_POST['extra'] as $val) {
$query = "INSERT ...";
<Abfrage ausführen>
}
Gruß
Matthias
Hy
Danke für eure Hilfe.
Mit arrays hab ich noch nicht viel Erfahrung hoff das ich eure Lösungsansätze trotzdem umsetzen kann (werd mich mal auf "einschlägigen" Seiten einlesen -> selfphp)
Wünsch noch einen schönen Tag.
Mfg Martin
Hallo Martin!
Es hat mich (vor inzwischen einiger Zeit) auch einiges an Überwindung gekostet mich mal näher damit zu befassen, aber wenn's einmal läuft war alles Vorherige irgendwie trivial ;-)
Also, ran an den Speck. Das offizielle Handbuch sollte dir eigentlich auch weiterhelfen können: http://www.php.net/manual/de/
Gruß
Matthias