dynamisch erzeugte Checkboxen abfragen

gomso

Grünschnabel
Hallo Miteinander

Ich habe in Problem, die mich zum verzweifeln bringen!

Ich erzeugte anhand einer Datenbank Checkboxen:

PHP:
function displayUsers(){
   global $database;
   $q = "SELECT username,userlevel,email,timestamp,p_sms "
       ."FROM ".TBL_USERS." ORDER BY username";
   $result = $database->query($q);
   /* Error occurred, return given name by default */
   $num_rows = mysql_numrows($result);
   if(!$result || ($num_rows < 0)){
      echo "Error displaying info";
      return;
   }
   if($num_rows == 0){
      echo "Database table empty";
      return;
   }
   /* Display table contents */
   echo "<table align=\"left\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\n";
   echo "<tr><td><b>Username</b></td><td><b>Level</b></td><td><b>Email</b></td><td><b>p_sms</b></td><td><b>Last Active</b></td></tr>\n";
   for($i=0; $i<$num_rows; $i++){
      $uname  = mysql_result($result,$i,"username");
      $ulevel = mysql_result($result,$i,"userlevel");
      $email  = mysql_result($result,$i,"email");
      $p_sms  = mysql_result($result,$i,"p_sms");
	  $time   = mysql_result($result,$i,"timestamp");
	  
      if($p_sms == 1) {$tp_sms = " checked"; } else {$tp_sms = ""; }
	  
      echo "<tr><td>$uname</td><td>$ulevel</td><td>$email</td><td><input name='chk_p_sms" . $i . "' type='checkbox' value='$i'" . $tp_sms . "></td><td>$time</td></tr>\n";
   }
   echo "</table><br>\n";

Je nach dem, ob diese in der Datenbank auf "1" sind, werden sie bei der Anzeige gechecket!

--> geht wunderbar

Nun mein Problem, ich möchte diese Checkboxen "checken" oder "unchecken" und anschliessend die Werte wieder in die Datenbank schreiben, wie frage ich nun nach einem Klick auf z.B. Button "update" den Wert dieser Checkboxen ab?

Das Schreiben in die Datenbank ist kein Problem, nur die Abfrage der dynamisch generierten Checkboxen nach einem Buttonklick!

Besten Dank für eure Antworten

Gruss
Gomso
 
Hi,

ich würde dir raten, die Werte der Checkboxen in ein Array zu schreiben, zum Beispiel so:
HTML:
<input name='chk_p_sms[]'...
Nach abschicken den Formulars, kannst du alle Checkboxen mit einer foreach-Schleife durchlaufen, und so die Datenbankfelder Updaten, zum Beispiel so:
PHP:
foreach( $_POST['chk_p_sms'] AS $var )
{
    $query = 'UPDATE foo SET bar = "' .$var. '"';
}
 
naja du brauchst einen eindeutigen namen der checkbox, damit du auch später weisst in welchem datensatz der tabelle du den wert speichern willst.
du könntest im namen der checkbox die id verwenden oder über was ist die tabelle indexiert?
ich würde die tabelle mit id machen und anschließend die checkbox-namen als array aufbauen:
PHP:
<input name='chk_p_sms[" . $id . "]' type='checkbox'...
 
Besten Dank für die Antwort

Ich kriegs aber immer noch nicht hin!

PHP:
 echo "<table align=\"left\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\n";
   echo "<tr><td><b>Username</b></td><td><b>Level</b></td><td><b>Email</b></td><td><b>p_sms</b></td><td><b>Last Active</b></td></tr>\n";
   for($i=0; $i<$num_rows; $i++){
      $uname  = mysql_result($result,$i,"username");
      $ulevel = mysql_result($result,$i,"userlevel");
      $email  = mysql_result($result,$i,"email");
      $p_sms  = mysql_result($result,$i,"p_sms");
	  $time   = mysql_result($result,$i,"timestamp");
	  
      if($p_sms == 1) {$tp_sms = " checked"; } else {$tp_sms = ""; }
	  
      echo "<tr><td>$uname</td><td>$ulevel</td><td>$email</td><td><input name='chk_p_sms[$i]' type='checkbox' value='$i'" . $tp_sms . "></td><td>$time</td></tr>\n";
   }
   echo "</table><br>\n";

Die Abfrage:

PHP:
if ($_POST['btnPA']){
global $database;
   $q = "SELECT username "
       ."FROM ".TBL_USERS." ORDER BY username";
   $result = $database->query($q);
   /* Error occurred, return given name by default */
   $num_rows = mysql_numrows($result);
   if(!$result || ($num_rows < 0)){
      echo "Error displaying info";
      return;
   }
   if($num_rows == 0){
      echo "Database table empty";
      return;
   }
   /* Display table contents */
   for($i=0; $i<$num_rows; $i++){
      $uname  = mysql_result($result,$i,"username");
	  
   	  if ($_POST['chk_p_sms[" . $i . "]']){
	  $database->updateUserField($uname, "p_sms", "1");
	  }else{
	  
	  $database->updateUserField($uname, "p_sms", "0");
	  }
     
   }

Mein Button:
HTML:
  <form action="admin.php" method="POST">
    <tr>
      <td><br>
          <input type="submit" value="Update Access" name="btnPA">      </td>
    </tr>
  </form>

Ich habe das Gefühl, ich mache das viel zu kompliziert!
 
was genau is nun das problem?
auf das $i würd ich mich nicht verlassen, dass das in beiden fällen den gleichen datensatz behandelt.
Machs doch einfach so:

PHP:
echo "<tr><td>$uname</td><td>$ulevel</td><td>$email</td><td><input name='$uname' type='checkbox' value='$i'" . $tp_sms . "></td><td>$time</td></tr>\n";

also der name der checkbox entspricht der des Usernamen....

PHP:
/* Display table contents */ 
   for($i=0; $i<$num_rows; $i++){ 
      $uname  = mysql_result($result,$i,"username"); 
       
         if ($_POST[$uname]){ 
      $database->updateUserField($uname, "p_sms", "1"); 
      }else{ 
       
      $database->updateUserField($uname, "p_sms", "0"); 
      } 
      
   }

...hier die if-Abfrage umbaun.
 
Genau das ist das Problem, wie prüfe ich die Checkbox auf "checked"

if ($uname == "checked")
if ($uname.checked == true)
if (isset($_POST[$uname])) ?

funktioniert sicher keines
 
Zurück