2010-12-05 11 views
1

J'essaye de créer une fonction où les utilisateurs peuvent vérifier un message à supprimer. Évidemment, si plus d'un message est coché, ils seront tous supprimés.Checkbox dans une boucle while

Je le code suivant

<form action="process.php" method="post"> 
    <input type="hidden" name="deleteMessages" /> 
    <?php 
    while($row=mysql_fetch_assoc($q)) 
    { 
     if($row['to_viewed'] == 0) 
     { 
     ?> 
     <tr> 
      <td><input type="hidden" name="check_box_1" value="0" /> 
       <input type="checkbox" name="check_box_1" value="1" /> 
      </td> 
      <td><b><a href='<?php echo $_SERVER['PHP_SELF']; ?>?p=view&mid=<?php echo $row['id']; ?>'><?php echo $row['title'] ?></a></b></td> 
      <td><b><a href='<?php echo $_SERVER['PHP_SELF']; ?>?p=view&mid=<?php echo $row['id']; ?>'><?php echo $row['from']; ?></a></b></td>     
      <td><b><?php echo $row['created']; ?></b></td> 
     </tr> 
     <?php 
     } 
     else if($row['to_viewed'] == 1) 
     { 
     ?> 
     <tr> 
      <td><input type="hidden" name="check_box_1" value="0" /> 
       <input type="checkbox" name="check_box_1" value="1" /> 
      </td> 
      <td><a href='<?php echo $_SERVER['PHP_SELF']; ?>?p=view&mid=<?php echo $row['id']; ?>'><?php echo $row['title'] ?></a></td> 
      <td><a href='<?php echo $_SERVER['PHP_SELF']; ?>?p=view&mid=<?php echo $row['id']; ?>'><?php echo $row['from']; ?></a></td>     
      <td><?php echo $row['created']; ?></td> 
     </tr> 
     <?php 
     } 
    } 
    ?> 
    <input type="submit" value="Delete All" /> 
    </form> 

Je veux passer la case à cocher à travers et si la valeur est 1, le processus et le supprimer. Mais comment pourrais-je y parvenir avec des messages multiples, peu importe s'il y a un message ou dix? Merci

Répondre

2

Dans votre formulaire mis:

<input type="checkbox" name="check_box_delete[]" value="<?php echo $row['id']; ?>" /> 

ensuite à traiter:

if(isset($_POST['check_box_delete'])) 
{ 
    foreach($_POST['check_box_delete'] as $id) 
    { 
     // Delete $id 
    } 
} 
+0

Parfait merci. Je ne pourrais tout simplement pas savoir comment utiliser un tableau ici! – sark9012

+0

Je n'utiliserais pas 'foreach' cependant. Vous pouvez le faire dans une seule requête SQL. – mpen

+0

Alors que vous pourriez le faire sans foreach (ou toute méthode de bouclage), il serait très difficile de faire toutes les vérifications d'authentification requises, etc. Il serait bien de créer une seule requête de suppression après toutes les vérifications ont été faites. – fred

0
<input type="checkbox" 
     name="mid_to_delete[]" 
     value="some message id" 
     id="mid_to_delete_some_message_id"> 
<label for="mid_to_delete_some_message_id">Delete "Some subject"</label> 

puis

<?php 
    foreach ($_POST['mid_to_delete'] as $mid) { 
     delete_some_message_id($mid); 
    } 
?> 

Étant donné que seuls les contrôles avec succès sont soumis et non vérifiées ne sont pas des cases à cocher avec succès, toutes les valeurs que vous obtenez seront ceux qui ont été sélectionnés pour la suppression. (Vous devez toujours exécuter auth/authz pour vous assurer que les messages supprimés sont ceux que l'utilisateur est autorisé à supprimer)

0

Vous pouvez laisser php stocker des valeurs multiples dans un tableau en nommant les champs de saisie avec un désignateur de tableau suffixe []. Par exemple, toutes les cases à cocher nommées checkbox[] seront ensuite stockées dans $_POST['checkbox'][]. Notez que cela peut ne pas s'appliquer aux cases à cocher, car leur valeur $ _POST n'existe que si elles ont été cochées.

Questions connexes