Andreas Görtz: speichervorgang automatisieren

Beitrag lesen

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.