Checkbox checked überprüfen

ropueh

Mitglied
Hallo.

Folgendes Problem... ich habe in einem Formular diverse Checkboxen. Sie werden dynamisch aus einer Tabelle (vegan_laeden) ausgelesen, weil sie u.U. später erweitert werden sollen und haben name=laden[] values 1, 2, 3, 4 und 5. Wenn jetzt die 2. und die 4. gecheckt sind, wird in die db (vegan_produkte) bei laden "2, 4" geschrieben.
So weit so gut.
Nun wollte ich in einem Edit Formular prüfen, ob die jeweilige checkbox (while Schleife aus vegan_laeden) einen Haken bekommen muss (Array "laden" aus vegan_produkte)

PHP:
include ('config.php');
echo "<table style=\"width: 800px;\">";

$id = $_GET['id'];  
mysql_query("SET lc_time_names = 'de_DE'");
$query = mysql_query("SELECT id, laden
		      FROM vegan_produkte WHERE id = '$id'");

while($data = mysql_fetch_array($query)) {
	$laden = $data['laden'];

<tr>
	<td>Laden</td>\n";
$query2 = mysql_query("SELECT id, laden AS laden2
		      FROM vegan_laeden 
		      ");
         $i=0;
         $laeden=array();
         while($row  =  mysql_fetch_array($query2))  { 
         $laeden[] = $row['laden2'];
         $ladenarray=explode(",",$laden);

           echo "<tr><td></td><td>".$row['laden2']."</td><td><input type=\"checkbox\" name=\"laden[]\" value=\"".$row['laden2']."\" "; 
           if (in_array($row['laden2'],$ladenarray)){ echo "checked"; } echo "/></td><td></td></tr>\n";     
}
echo "<tr><td>Kommentar</td><td><textarea name=\"kommentar\" cols=\"20\" rows=\"5\">$kommentar</textarea></td></tr>
<tr><td><input type=\"submit\" value=\"senden\"/></td></tr>";

das klappt aber nur bei der ersten angewählten, und nicht bei den weiteren. Das verstehe ich nicht. (mal ganz abgesehen davon, dass ich das checked noch xhtml konform machen muss)
Kann mir jemand helfen, bzw ist das überhaupt verständlich?
Vielen Dank schonmal
 
irgendwie ist dein komischer Code fehlerhaft. Ich kann ihn nicht laden ohne das fast alles rot markiert wird.....

es fehlen im String \ vor " etc.

Sorry, hab keine Lust dein zusammengeschnittener Code so zu formatieren dass man ihn a) lesen und b)fehlerfrei betrachten kann.

Solche Konstrukte sind nicht wirklich lesbar:
PHP:
if(bedinung){mach was;} mach was;
if (in_array($row['laden2'],$ladenarray)){ echo "checked"; } echo "/></td><td></td></tr>\n";

selbst dieses Echo ist voller Fehler, so dass ich den logischen Fehler vor lauter normaler Fehler leider nicht sehe
PHP:
           echo "<tr><td></td><td>".$row['laden2']."</td><td><input type="checkbox\" name=\"laden[]\" value=\"".$row['laden2']."\" ";

Hier noch ein Tipp zu komplexeren zusammengesetzten Strings
http://www.dynamic-webpages.de/php/language.types.string.php#language.types.string.parsing.complex

Nun zum Thema
Du gehst alle EInträge mit der while()-Schleife durch und hängst die Einträge in $laden[] zusammen.
Jedoch löst du diese in jedem Schleifendurchgang in einen String auf. Wozu?
Und was ist der Unterschied zwieschen $laeden und $laden?
 
Zuletzt bearbeitet:
PHP:
<?php
include ('config.php');
echo "<table style=\"width: 800px;\">";

$id = $_GET['id'];  
mysql_query("SET lc_time_names = 'de_DE'");
$query = mysql_query("SELECT id, laden
              FROM vegan_produkte WHERE id = '$id'");

while($data = mysql_fetch_array($query)) {
    $laden = $data['laden'];

echo"<tr>
    <td>Laden</td>";
$query2 = mysql_query("SELECT id, laden AS laden2
              FROM vegan_laeden 
              ");
         $i=0;
         while($row  =  mysql_fetch_array($query2))  { 
           $laden2 = $row['laden2'];
           $ladenarray=explode(",",$laden);
           echo "<tr><td></td><td>$laden2</td><td>";
           echo "<input type=\"checkbox\" name=\"laden[]\" value=\"$laden2\" "; 
           if (in_array($laden2,$ladenarray))
           { echo "checked"; }
           echo "/></td><td></td></tr>\n";     
         }
echo "<tr><td>Kommentar</td><td><textarea name=\"kommentar\" cols=\"20\" rows=\"5\">$kommentar</textarea></td></tr>
<tr><td><input type=\"submit\" value=\"senden\"/></td></tr>"; 
?>

Entschuldige, ich habs aufs Wesentliche zusammengekürzt, dadurch die Syntax-Fehler.. nun ist sicherlich vieles noch Unsinn, aber vielleicht nicht mehr falsch. Oder? :(

Also was mit dem $laden[] war Blödsinn, habe ich mir so falsch zusammengesucht.
Jetzt sind nur noch laden und laden2... laden sind die angecheckten Boxes in der Form "2, 3" und laden2 die Läden die insgesamt zur Auswahl stehen.
Ich habe das erste mal mit Arrays und bin noch nicht wirklich drin bei all den Indizes und Klammern etc pp. Sorry
 
Zuletzt bearbeitet:
hat sich erledigt... ganz dummer Fehler.
laden war mit space hinterm komma gespeichert, daran lag's

Trotzdem danke für den guten Willen.
 
Hm. has tdu in der Tabelle vegan_produkte den Text 'laden' oder die id 'id' aus vegan_laeden gespeichert?

PHP:
<?php
include ('config.php');
echo "<table style=\"width: 800px;\">";


//Einmal alle Läden in ein Array schreiben -> $laeden
//$laeden = array([id1] => 'Text1', [id2] => 'Text2', ..)
$res = mysql_query("SELECT id, laden FROM vegan_laeden");
while($laden = mysql_fetch_array($res)){
    $laeden[$laden['id']] = $laden['laden'];
}
mysql_free_result($res);

$id = $_GET['id'];  
mysql_query("SET lc_time_names = 'de_DE'");
//Projekte aus der DB laden
$res = mysql_query("SELECT id, laden
              FROM vegan_produkte WHERE id = '$id'");

//Hab die while durch ein if ersetzt. Da du direkt auf die id püfst, wird höchstens ein Treffer kommen
if($data = mysql_fetch_array($res)) {
    $selectedLaeden = explode(",",$data['laden']);
    
    echo"<tr>
        <td>Laden</td>";
     //Pro $laden in $laeden eine Checkbox schreiben
     foreach($laeden as $lid => $laden){
       echo "<tr><td></td><td>{$laden}</td><td>";
       //Wenn über die id aus vegan_laeden gearbeitet werden sollte, ab hier $lid anstelle von $laden verwenden
       echo "<input type=\"checkbox\" name=\"laden[]\" value=\"{$laden}\" "; 
       //Prüfen ob der Laden ausgewählt ist (ev. durch $lid ersetzen, wenn die id in der 
       //Produktetabelle gespeichert wird
       if (in_array($laden, $selectedLaeden)) echo "checked";
       echo "/></td><td></td></tr>\n";     
     }
    echo "<tr><td>Kommentar</td><td><textarea name=\"kommentar\" cols=\"20\" rows=\"5\">{$kommentar}</textarea></td></tr>
    <tr><td><input type=\"submit\" value=\"senden\"/></td></tr>";
}
mysql_free_result($res);
?>
 
Zurück