Mit einer Checkbox weitere Werte speichern

CreativPur

Erfahrenes Mitglied
Hi,
ich habe folgendes Problem..
Ich habe eine checkbox, mit der ich weitere Daten in eine Datenbank speichern möchte.

Bildschirmfoto 2019-02-26 um 21.10.47.png
Hiermit möchte ich dem User die Möglichkeit geben, nur bestimmte Zeugnisse zu speichern bzw. mit zu senden.

Ausgelesen werden werden die zuvor hochgeladenen Daten folgend..

PHP:
<form  action="?mail_versenden" method="post">
<?php 
$sql = "SELECT zeugnisse_firma, pos, img FROM Lebenslauf_Zeugnisse WHERE Bewerber_id = $Bewerber_id ORDER BY pos DESC";
foreach($pdo->query($sql) as $row){
echo '
<input type="checkbox" name="Zeugnis_Firma[]" value="'.$row['zeugnisse_firma'].'"> '.$row['zeugnisse_firma'].'<br />
<input class="form-control" type="hidden" name="Bewerbungen_id[]" value="'.$Bewerbung_id.'">
<input class="form-control" type="hidden" name="pos[]" value="'.$row['pos'].'">
<input class="form-control" type="hidden" name="img[]" value="'.$row['img'].'">';
}
?>

<input type="submit" id="submit" name="submit"  class="btn btn-info" value="speichern" />
</form>

in den Hidden-Feldern werden die Daten auch richtig ausgegeben.

Beim Speichern wird aber immer der erste checkbox mit gespeichert, auch wenn diese nicht aktiviert wird.

Mein Insert-Script sieht folgend aus...
PHP:
if(isset($_GET['mail_versenden'])) {
     $error = false;   

     for ($i = 0; $i < count($_POST['Zeugnis_Firma']); $i++) {
          $Bewerbungen_id = $_POST['Bewerbungen_id'][$i];
          $Zeugnis_Firma = $_POST['Zeugnis_Firma'][$i];
          $pos = $_POST['pos'][$i];
          $img = $_POST['img'][$i];
          $statement = $pdo->prepare("INSERT INTO ausgewaehlte_zeugnisse (Bewerbungen_id,Zeugnis_Firma,pos,img) VALUES (:Bewerbungen_id,:Zeugnis_Firma,:pos,:img)");
          $statement->execute(array('Bewerbungen_id' => $Bewerbungen_id, 'Zeugnis_Firma' => $Zeugnis_Firma, 'pos' => $pos, 'img' => $img));
      

}
}

Wo liegt bloß der Fehler ?
 
hallo,

was sagt den ein Var_dump von dem Post. Spontan würde ich sagen, dass du die Checkbox und die Hidden-Fields eindeutiger benennen solltest, da sie sonst immer überschrieben werden.

PHP:
foreach($pdo->query($sql) as $row)
{

$i = 0;

echo '
<input type="checkbox" name="Zeugnis_Firma['.$i.']" value="'.$row['zeugnisse_firma'].'"> '.$row['zeugnisse_firma'].'<br />
<input class="form-control" type="hidden" name="Bewerbungen_id['.$i.']" value="'.$Bewerbung_id.'">
<input class="form-control" type="hidden" name="pos['.$i.']" value="'.$row['pos'].'">
<input class="form-control" type="hidden" name="img['.$i.']" value="'.$row['img'].'">';

$i++;
}
?>

<input type="submit" id="submit" name="submit"  class="btn btn-info" value="speichern" />
</form>

btw.: bei deiner Ausgabe der Zeugnisse ist mir aufgefallen, dass es mehrere gleiche Einträge gibt. An deiner Stelle würde ich den Namen unique machen, damit der Nutzer auch weiß welches Zeugnis sich hinter dem Namen befindet
 
Manchmal gibt es auch 2 Zeugnisse von der selben Firma. Die Bezeichnung in der Spalte img bekommen sie nur einen anderen Namen.
Wenn die Hidden-Felder als TEXT angezeigt werden, sehen diese folgend aus..

Bildschirmfoto 2019-02-26 um 21.46.56.png

Das erste Inputfeld ist immer mit dem gleichen Wert (Bewerbung_id)
Das zweite Inputfeld ist das Datum, wann das Zeugnis übergeben wurde (pos)
Das dritte Inputfeld ist der Name vom Bild (Zeugnis), wobei am Anfang die User_id steht und am Ende, was man leider nicht sieht, der Zeugnisname, der immer einzigartig ist und nur einmal vorkommt.
 
Das Problem ist, dass eine Checkbox nur als $_POST-Variable auftritt, wenn sie gecheckt ist. D. h. wenn Du z. B. vier Checkboxes hast, von denen nur zwei gecheckt sind, so hat $_POST['Zeugnis_Firma'] nur zwei Einträge während die Eingabefelder alle vorhanden sind, d. h. die entspr. Arrays haben vier Einträge. Die Zuordnung zwischen den Elementen im Array der Checkboxes und denen in den Arrays der Eingabefelder stimmt dann nicht mehr. Lösung, indem Du, wie von Kalito vorgeschlagen, die Indizes explizit definierst.
 
die Indizes explizit definierst ???
Und wie sieht so etwas aus ?

Ich habe es so abgeändert..
PHP:
<?php 
$sql = "SELECT zeugnisse_firma, pos, img FROM Lebenslauf_Zeugnisse WHERE Bewerber_id = $Bewerber_id ORDER BY pos DESC";
foreach($pdo->query($sql) as $row){
$i = 0;   
echo '
<input type="checkbox" name="Zeugnis_Firma['.$i.']" value="'.$row['zeugnisse_firma'].'"> '.$row['zeugnisse_firma'].'<br />
<input class="form-control" type="" name="Bewerbungen_id['.$i.']" value="'.$Bewerbung_id.'">
<input class="form-control" type="" name="pos['.$i.']" value="'.$row['pos'].'">
<input class="form-control" type="" name="img['.$i.']" value="'.$row['img'].'">';
}
?>

wenn ich da jetzt z.B. beide "Fa. E.Heckeroth" aktiviere, dann wird nur der erste gespeichert
 
Das ist ganz einfach.
Der User kann sich mit mehreren Berufen bewerben.
Z.B. Als Maurer und Webdesigner

Wenn ich mich aber nur als Webdesigner bewerbe, benötige ich nur die Zeugnisse, wo ich als Webdesigner tätig war. Und das wird Endanwender ja wohl wissen, oder ?
 
Zurück