# Checkboxen in Datenbank Speichern - Tutorial?



## wallis (22. September 2011)

Hallo Freund,

bin auf dem Gebiet PHP noch blutiger Anfänger und arbeite gerade das Quake-Net Tutorial durch.

Auf einer internen Seite habe ich 4 Checkboxen erstellt.


```
<input type="checkbox" name="magazin_checkbox[]" value="Stadt1" />Stadt1<br />
<input type="checkbox" name="magazin_checkbox[]" value="Stadt2" />Stadt2<br />
<input type="checkbox" name="magazin_checkbox[]" value="Stadt3" />Stadt3<br />
<input type="checkbox" name="magazin_checkbox[]" value="Stadt4" />Stadt4<br />
```

Nun möchte diese Checkboxen in meine MySQL Datenbank eintragen.
Habe schon viel über "foreach()", "implode()" etc. gelesen, kann sie allerdings nicht anwenden.

Mein INSERT-Befehl für den Eintrag in die Datenbank sieht folgendermaßen aus:

```
if ($_POST['submit'])
{
$sql = 'INSERT INTO adressen
    (Firma, Vorname, .... , Magazin)
VALUES
    ("'.$_POST['Firma'].'","'.$_POST['Vorname'].'","'.$_POST['Nachname'].'", ..... ,"'.$_POST['Magazin'].'")';

mysql_query($sql); 
  echo "<script type='text/javascript'>location.href='index.php?go=ok';</script>";
}
```

Wie kann ich jetzt die Einträge der Checkboxen in eine kommagetrennte Variable speichern und diese nachher in die Datenbank eintragen?

Ich bekomme den Eintrag einfach nicht hin. 
Kann mir jemand helfen?

Vielen Dank!


----------



## Tim Bureck (22. September 2011)

Hi,

das machst du am besten mit


```
$staedte = implode(',', $_POST['magazin_checkbox']);
```

Mehr zu implode()

Best regards


----------



## tombe (22. September 2011)

Wenn ich dich richtig verstehe, dann suchst du wohl implode:


```
$komma_liste = implode(",", $_POST['magazin_checkbox'];
```


----------



## wallis (22. September 2011)

Danke für die schnelle Hilfe. In welchem Bereich meines Codes muss ich das jetzt eintragen?
Ist doch eigentlich egal oder?

Anbei mal der Code:

```
<?php 
include 'config.inc.php'; 
mysql_connect($host, $user, $pass) or die ("Keine Verbindung zu der Datenbank möglich.");
mysql_select_db($db); 

$sql_branchen = "SELECT * FROM branchen ORDER BY Branchen ASC"; 
$ausgabe_branchen = mysql_query($sql_branchen); 

$sql_magazine = "SELECT * FROM magazine ORDER BY Magazine ASC"; 
$ausgabe_magazine = mysql_query($sql_magazine); 


if ($_POST['submit'])
{	
$sql = 'INSERT INTO adressen (Firma, Vorname, ..... , Magazin) VALUES("'.$_POST['Firma'].'","'.$_POST['Vorname'].'", ..... ,"'.$_POST['magazin'].'")';
mysql_query($sql); 
  echo "<script type='text/javascript'>location.href='index.php?go=ok';</script>";
}
?>
```

Hier steht ein HTML-Formular...


```
<input type="checkbox" name="magazin_checkbox[]" value="Stadt1" />Stadt1<br />
<input type="checkbox" name="magazin_checkbox[]" value="Stadt2" />Stadt2<br />
<input type="checkbox" name="magazin_checkbox[]" value="Stadt3" />Stadt3<br />
<input type="checkbox" name="magazin_checkbox[]" value="Stadt4" />Stadt4<br />
```

Kommt der Code von euch


```
$staedte = implode(',', $_POST['magazin_checkbox']);
```

ganz oben mit rein?

Habe alles schon versucht... ich bekomme keinen DB-Eintrag. :-/


----------



## tombe (22. September 2011)

Da wo die übergebenen Daten gespeichert werden:


```
if ($_POST['submit'])
{
// hier kommt die zusätzliche Anweisung hin
$staedte = implode(',', $_POST['magazin_checkbox']);
// und jetzt die Variable $staedte in die SQL-Anweisung einbauen
$sql = 'INSERT INTO adressen (Firma, Vorname, ..... , Magazin) VALUES("'.$_POST['Firma'].'","'.$_POST['Vorname'].'", ..... ,"'.$_POST['magazin'].'")';
mysql_query($sql);
  echo "<script type='text/javascript'>location.href='index.php?go=ok';</script>";
}
?>
```


----------



## wallis (23. September 2011)

Sehr geil!

Danke, hat funktioniert. Wenn du mir jetzt noch sagen kannst, wie ich den Eintrag auf einer anderen Seite auslesen kann, dann bin ich wunschlos zufrieden. 

Vielen Dank nochmals!


----------



## tombe (23. September 2011)

Du meinst wie du die Checkboxen markierst nachdem du den Inhalt der Datenbank ausgelesen hast?

Das könntest du so machen:


```
<?php
// das Array dient nur als Beispiel
// hier muss der Inhalt des Datenbanlfeldes übergeben werden
// die "Kommaliste" der Datenbank kannst du mit explode in ein Array umwandeln
$staedte = array("Stadt1", "Stadt3", "Stadt4");
?>

<input type="checkbox" name="magazin_checkbox[]" value="Stadt1" <?php if(in_array("Stadt1", $staedte)) echo "checked"; ?> />Stadt1
<br />
<input type="checkbox" name="magazin_checkbox[]" value="Stadt2" <?php if(in_array("Stadt2", $staedte)) echo "checked"; ?> />Stadt2
<br />
<input type="checkbox" name="magazin_checkbox[]" value="Stadt3" <?php if(in_array("Stadt3", $staedte)) echo "checked"; ?> />Stadt3
<br />
<input type="checkbox" name="magazin_checkbox[]" value="Stadt4" <?php if(in_array("Stadt4", $staedte)) echo "checked"; ?> />Stadt4
<br />
```

Immer wenn der Vaule-Wert der Checkbox im Array enthalten ist, wird der Haken gesetzt.


----------



## wallis (23. September 2011)

Vielen vielen Dank für deine Antworten.
ich komme immer ein Stückchen weiter.

Habe mir jetzt die Checkboxen aus der Datenbank geholt. Dynamisch per while-Schleife.

Sieht folgendermaßen aus:

```
<?php while ($magazine2 = mysql_fetch_object ($ausgabe_magazine)) { ?>
                                
<input type="checkbox" name="magazin_checkbox[]" value="<?php echo($magazine2->Magazine); ?>" /><?php echo($magazine2->Magazine); ?><br />
                                
 <?php } ?>
```

Meine Checkboxen hole ich folgendermaßen aus der Datenbank:

```
$sql_magazine = "SELECT * FROM magazine ORDER BY Magazine ASC"; 
$ausgabe_magazine = mysql_query($sql_magazine);
```

Die Ausgabe meiner Checkboxen geht ohhne Probleme.
Allerdings bin ich jetzt schon überfragt, wie ich das Array füllen muss.
Aber ich bin froh, das mir hier jemand mit guten Beiträgen hilft. Ist leider nicht immer so selbstverständlich.

Also wenn du mir nochmal eine genau Hilfestellung geben könntest, wäre es schön.


----------



## Tim Bureck (23. September 2011)

Hi,

das array bekommst du mit explode():


```
<?php 
while ($magazine2 = mysql_fetch_object ($ausgabe_magazine)) { 
  $array = explode(',', $magazine2->Magazine);

  foreach ($array as $magazin):
?>

<input type="checkbox" name="magazin_checkbox[]" value="<?php echo($magazin); ?>" /><?php echo($magazin); ?><br />
                                
 <?php 
  endforeach;
}
 ?>
```

Ungetestet.. aber so ähnlich sollte es sein. 

Best regards


----------



## wallis (23. September 2011)

Hallo Tim,

vielen Dank für die Hilfestellung.

Allerdings blick ich noch nicht durch, wie ich die Boxen als "checked" übergebe. :-/


----------



## Tim Bureck (23. September 2011)

Aah.. ich habe da auch irgendwas durcheinander gebracht! Hier mal etwas abstrahierter...


```
<?php

// ...

// Auslesen aller Magazine...
$magazine = array();
$stmt = mysql_query("SELECT * FROM magazine");
while ($row = mysql_fetch_object($stmt)) {
  $magazine[] = $row;
}

// Auslesen der Adressen
$stmt = mysql_query("SELECT * FROM adressen");
while ($row = mysql_fetch_object($stmt)) {
  ...
  $array = explode(',', $row->magazine);

  // Ausgabe der Checkboxen mit Überprüfung
  foreach ($magazine as $mag):
?>

<!-- eventuell andere Daten ausgeben -->
<input type="checkbox" name="magazin_checkbox[]" value="<?php echo $mag->name; ?>" <?php if (in_array($mag->name, $array)) echo "checked=\"checked\""; ?>/>
<?php echo $mag->name; ?>

<?php
  endforeach;
}
?>
```

$mag->name ist dabei der Name des Magazins aus der Tabelle magazin (falls sowas existiert, entsprechend anpassen). Der Grundgedanke ist, alle Magazine auszulesen, diese alle auszugeben und bei jeder Adresse zu überprüfen, ob dieses Magazin in $array ist. Wenn das der Fall ist, wird das Attribut checked gesetzt.

Falls du Probleme bei der Anpassung hast, sag nochmal Bescheid. Ich habe jegliche WHERE-Bedingungen bei den SQL Queries weggelassen, da müsstest du dann entsprechend auswählen.


----------



## wallis (23. September 2011)

Hallo,

irgendwie sieht der Eintrag von Tombe einfacher aus... :-/


```
<?php
// das Array dient nur als Beispiel
// hier muss der Inhalt des Datenbanlfeldes übergeben werden
// die "Kommaliste" der Datenbank kannst du mit explode in ein Array umwandeln
$staedte = array("Stadt1", "Stadt3", "Stadt4");
?>

<input type="checkbox" name="magazin_checkbox[]" value="Stadt1" <?php if(in_array("Stadt1", $staedte)) echo "checked"; ?> />Stadt1
<br />
<input type="checkbox" name="magazin_checkbox[]" value="Stadt2" <?php if(in_array("Stadt2", $staedte)) echo "checked"; ?> />Stadt2
<br />
<input type="checkbox" name="magazin_checkbox[]" value="Stadt3" <?php if(in_array("Stadt3", $staedte)) echo "checked"; ?> />Stadt3
<br />
<input type="checkbox" name="magazin_checkbox[]" value="Stadt4" <?php if(in_array("Stadt4", $staedte)) echo "checked"; ?> />Stadt4
<br />
```


----------



## Tim Bureck (23. September 2011)

Ist beides im Prinzip dasselbe, nur dass bei meinem Code die einzelnen Einträge aus der Datenbank kommen. Da du aber mit den Strukturen ein wenig rumgeizt, ist es schwierig da konkreter zu helfen.


----------



## wallis (23. September 2011)

Was benötigst du denn noch, damit du mir noch besser helfen kannst.
Soll ich den gesamten Code mal posten?


----------



## Sassar (23. September 2011)

benötigst du noch hilfe bei den Checkboxen? wenn ja kannst du dir das ja mal anschauen vielleicht hilft es dir ja, so habe ich mein Problem mit den Checkboxen gelöst 


```
#verbindung datenbank aufbauen

$id = 1;
if(isset($_POST['okay']))
{
 $box1 = $_POST['checkbox1'];
 mysql_query("UPDATE test SET box1='$box1' WHERE id='$id'");
}

echo '<center><form action="" method="POST"><input type="checkbox" name="checkbox1" value="Stadt1" ';
$inhalt = mysql_query("SELECT box1 FROM test WHERE id='$id'");
$inhalt = mysql_fetch_row($inhalt);
if($inhalt[0]!='')
{
 echo 'checked="checked"';
}
echo '>Stadt 1<input type="submit" name="okay" value="Ändern"></form>';


echo '<br><br>Hiere auswahl war : '.$box1;
?>
```

und hier kannst du dir das ganze mal anschauen =)


----------



## wallis (23. September 2011)

Danke, aber mit deinem Code kann ich irgendwie nichts anfangen. Ich bekomme die Daten einfach nicht ausgegeben. Ich glaub ich bin noch nicht so weit.


----------

