checkbox übermittelt Werte nicht richtig

Kalito

Erfahrenes Mitglied
Hallo,

ich habe mit meinen checkboxen das Problem, das sie die Werte nicht richtig übermitteln.

Mittels einer Db-Abfrage ermittle ich die Anzahl der Mitglieder

PHP:
$mitglieder = mysql_query("SELECT MID FROM ".DB_TABLE_M." WHERE Status='activ' ORDER BY MID");
$count_m = mysql_num_rows($mitglieder);

Dann gebe ich diese mittels einer whilschleife aus

PHP:
while($m=mysql_fetch_array($mitglieder)){
       echo '<tr><td><input type="hidden" name="mid[]" value="'.$m['MID'].'"/>
      <input type="checkbox" name="teilnehmer[]" /> '.$m['MID'].'</td></tr>';
}

und wenn ich dann das Formular absende soll folgendes passieren:
PHP:
     //Prüfung ob schon ein Eintrag vorhanden ist
       $pruefung= mysql_query("SELECT SID FROM ".DB_TABLE_S." WHERE SID='".$sid."'" );
        if(mysql_num_rows($pruefung) == 0 ){
            //Wenn nicht eintragung in Tabelle Schulung
            $eintrag = mysql_query("Insert Into ".DB_TABLE_S." (SID, name, beschreibung, wann, art, leiter) VALUES ('".$sid."', '".$name."','".$beschreibung."','".$date."','".$art."','".$leiter."')");
            //Eintragung aller Mitglieder, die an der Schulung teilgenommen haben
            for($i=0; $i<=$count_m; $i++){
                if(isset($_POST['teilnehmer'][$i])){
                    mysql_query("INSERT INTO ".DB_TABLE_M_S." (SID, MID) VALUES ('".$sid."', 
'".$_POST['mid'][$i]."')" );
                }
            }
         }

soweit so gut, das Problem nur ist, das ich egal welche checkbox ich auswähle immer der erste Eintrag auf true gesetzt wird. Wenn ich also sage user z hat an der Schulung teilgenommen (checkbox wird selektiert), dann wird aber user a als Teilnehmer eingetragen.

Was mach ich falsch?
 
Hab noch nicht so ganz verstanden was du da machst, aber egal.

Kann es sein das der Fehler deshalb auftritt, weil du bei den Checkboxen kein VALUE angegeben hast. Wie soll da unterschieden werden welcher Wert übermittelt wird!?
 
Hatte ich mir die Nacht auch überlegt aber ändert nichts an der problematik

PHP:
 $k=0;
while($m=mysql_fetch_array($mitglieder)){
         echo '<tr><td><input type="hidden" name="mid[]" value="'.$m['MID'].'"/><input type="checkbox" name="teilnehmer[]" value="'.$k.'" /> '.$m['MID'].'</td></tr>';        
         $k++;
}

Wie gesagt es ist egal welche checkboxes ich selektiere, er fängt immer die Liste von oben an. Es scheint so, das er nur die true-Werte in das Array speichert, aber nicht die false-Werte.

Wenn ich mich aber so im Netz umschaue, dann sieht mein Code im Prinzip genauso aus, wie die anderen

Und zu deiner Frage. Ich schreibe ein Benutzerverwaltungsscript für einen Verein.
 
Du kannst nicht mit isset prüfen.
Wenn du als Beispiel 4 checkboxen hast und du wählst die 2te und die 4te aus. Dann bekommst du eine Array
array('0'=>'Value von Box 2', '1'=>'Value von Box 4')

Ergo musst du in das Value-Property deine MID schreiben.
PHP:
while($m=mysql_fetch_array($mitglieder)){
       echo "<tr><td><input type='checkbox' name='teilnehmer[]' value='{$m['MID']}' />{$m['MID']}</td></tr>";
}

Dann kannst du nachher alle mit foreach auslesen
PHP:
foreach($_POST['checkbox'] as $mid){
    //TODO: Insert mid in die DB
]
 
Zurück