FrankFF: Checkboxen in while-Schleife

Hallo selfhtml-Forum.

Ich komme in einer dynamisch erzeugten Liste mit den Checkboxen nicht klar. Ziel: Tabelle mit 4 Spalten, in der letzten Spalte jeweils eine Checkbox (und das ganze in einem Formular zum Absenden). Die Anzahl Zeilen ist abhängig von den DB-Einträgen.
Die Liste klappt recht gut, nur an den Checkboxen haperts.

<form action="event_intern_update.php" method="post" name="event">

$sql = "SELECT id, tag, monat, jahr, info, text, frei  FROM kalender";  
$res = @mysql_query( $sql ) or die( "Fehler: " . mysql_error() );  
$sql_count = mysql_num_rows($res);  
  
echo "<table style='width:550px; font-size:12px;margin:auto; border:1px solid #000000; border-collapse:collapse; text-align: left; '><tr style='border:1px solid #000000;background-color:white; color: #FFFFFF; padding:10px;'>  
<th style='border:1px solid #000; padding:5px; width: 50px; background-color: #7C9358;'>Datum</th>  
<th style='border:1px solid #000; padding:5px; background-color:#7C9358;'>Veranstaltung</th>  
<th style='border:1px solid #000; padding:5px; background-color:#7C9358;'>Beschreibung</th>  
<th style='border:1px solid #000; padding:5px; background-color:#7C9358;'>Sichtbar</th></tr>";  
  
while($data = mysql_fetch_object($res)){  
  
echo" <td style='border:1px solid #000; padding:5px;background-color:white;'>$data->tag".'.'."$data->monat".'.'."$data->jahr </td>  
<td style='border:1px solid #000; padding:5px;background-color:white;'>$data->info</td>  
<td style='border:1px solid #000; padding:5px;background-color:white;'>$data->text</td>  
<td style='border:1px solid #000; padding:5px;background-color:white;'>";  
  
  if($data->frei[$data->id]==1) {  
  $chk="CHECKED";  
  } else {  
  $chk="0";  
  }  
echo "<INPUT TYPE='checkbox' NAME='frei[$data->id]'  VALUE='1'".($data->frei[$data->id]==1) ? $chk : "".">";  
  
echo "</td></tr>";  
  
   }  
echo "</table>";
<input type="submit" name="submit" value="Speichern" class="button">  
</form>

Wenn ich die Bedingung in der checkbox rausnehme und nur
echo "<INPUT TYPE='checkbox' NAME='frei[$data->id]' VALUE='1'">"; schreibe geht es (aber dann sehe ich nach dem Update eben nicht mehr, was gecheckt ist...)
Also liegt es irgendwie an der Bedingung ($data->frei[$data->id]==1) ? $chk : ""
Ohne while-Schleife funktioniert es auch... *ratlos. Kann jemend helfen?

Frank

  1. Hi,

    if($data->frei[$data->id]==1) {

    $chk="CHECKED";
      } else {
      $chk="0";
      }
    echo "<INPUT TYPE='checkbox' NAME='frei[$data->id]'  VALUE='1'".($data->frei[$data->id]==1) ? $chk : "".">";

    
    >   
    > Wenn ich die Bedingung in der checkbox rausnehme und nur  
    > `echo "<INPUT TYPE='checkbox' NAME='frei[$data->id]'  VALUE='1'">";`{:.language-php} schreibe geht es (aber dann sehe ich nach dem Update eben nicht mehr, was gecheckt ist...)  
      
    Wieso weist du denn $chk entweder "CHECKED" oder "0" zu? Was soll der Wert "0" bewirken?  
    Und wieso machst du die Abfrage eigentlich doppelt - einmal, um $chk einen Wert zuzuweisen, und dann noch mal, um $chk entweder auszugeben oder nicht?  
      
    Also entweder machst du erst die Abfrage, um $chk entweder den Wert "CHECKED" oder gar nichts (Leerstring) zuzuweisen - und gibst das dann einfach im echo-Statement aus;  
    oder du machst die Abfrage im echo-Statement mit dem tenaeren Operator, und gibst da dann CHECKED oder nichts aus -  
    aber so doppelt gemoppelt ist Unfug.  
      
    
    > Also liegt es irgendwie an der Bedingung `($data->frei[$data->id]==1) ? $chk : ""`{:.language-php}  
      
    Dass es mit dem tenaeren Operator so nicht "funzt", dazu hatten wir letzte Tage erst einen Thread - auch du hast hier die [Operator-Rangfolge](https://forum.selfhtml.org/?t=181597&m=1200965) nicht beruecksichtigt.  
      
    MfG ChrisB  
      
    
    -- 
    „This is the author's opinion, not necessarily that of Starbucks.“
    
  2. interessant, ich hatte grade heute mit ganz ähnlichen Sachen zu tun. ich kann soviel dazu beitragen, daß ich dir raten würde ein Templatesysten zu nutzen, zB. SMARTY. PHP/HTML Mix wird furchtbar unübersichtlich und sollte eig. nur für simpelste Sachen genommen werden. Ein mehrreihiges Formular aus einem DB Select? bei mir sieht das etwa so aus  {*, *} sind die Delimiter von SMARTY

    <form name="blah" action="blah"...>  
    {* foreach (schleife aus DB abfrage) *}  
    <tr>..  
      <input type=....>  
      <input type="checkbox" name="bla" {* if (bedingung) *} checked="checked" {*/if*}>  
      <input...>..  
    </tr>  
    {*/foreach*}  
    </form>
    

    checked="checked" gibt's hier nur wenn die Bedingung erfüllt ist.
    dazwischen natürlich deine <table><tr><td> usw.usw. das ganze wird __wesentlich__ übersichtlicher. ich hab zwischen HTML nur noch SMARTY Syntax, die aber im Grunde mindestens so simpel ist wie HTML 4 ;-) wenn nicht noch simpler.
    checked="checked" ist übrigens XMTML konforme Notation (wenn ich nicht irre..)

    Gruß

    1. XMTML konforme

      ääh. XHTML sorry schon spät^^