PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 17-02-2014 15:29:12

cris84100
Membre
Inscription : 17-02-2014
Messages : 2

update sql avec checkbox et PHP

Bonjour à tous,
j'ai un souci avec l'update de ma table avec checkbox, j'ai une erreur  que je n'arrive pas à résoudre :
Warning: Invalid argument supplied for foreach()....../admin_membres_valide.php on line 26

Je vous joins les deux codes correspondants .
Merci de votre aide...
voici celui du formulaire :

<?php
 $reponse = mysql_query('SELECT * FROM '.$prefix.'membres WHERE valide="0"') or die(mysql_error());
 if ($donnees = mysql_fetch_array($reponse))
{


?>
<form method='POST' action='admin_membres_valide.php'>
<?php
$_SESSION['pseudo'] = $donnees['pseudo'];
$_SESSION['email'] = $donnees['email'];
  ?>
<table width="100%" border="1">
<tr>
<td width='18%'><div align="center">Date d'inscription </div></td>
<td width='20%'><div align="center">pseudo</div></td>
<td width='18%'><div align="center">email</div></td>
<td width='10%'>Valider / <a href="admin_modifier_profil.php?id=<?php echo $donnees['id']; ?>">Modifier</a> </td>
<tr><td><?php echo date('d/m/Y', $donnees['date_inscription']); ?></td>

  <td><a href="profil.php?id=<?php echo $donnees['id']; ?>"><?php echo $donnees['pseudo']; ?></a></td>
<td><?php echo $donnees['email']; ?></td>
<td><input type='checkbox' name='update[]' value="<?php echo $donnees['id'] ; ?>" /></tr>
</table>
<div align="right"><input accesskey="S" name="valider" value="valider" type="submit"></div><br />


</form>

<?php
}
else
{
echo '<h8>Il n\'y a plus de membre à valider</h8><p>';
}
?>
 

Et celui de la validation :


<?php

  $update = isset($_POST['update']) ? $_POST['update'] : array();
  $id = isset($_POST['id']) ? $_POST['id'] : array();
  print_r($_POST);
    if (sizeof($update)==0){
echo '<div class="alert alert-error">Vous n\'avez pas selectionné de membre à valider !</div>';
echo'<p>';
echo'<a href="admin_validation_membres.php">Retour à la validation des membres</a>';
exit;
}
else
{

foreach ($_POST['update'] as $id){
$sql='UPDATE membres SET valide="1" WHERE membres.id='.$id;
}
?>
 

Hors ligne

#2 17-02-2014 18:34:14

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : update sql avec checkbox et PHP

Saluton,

Deux choses

  • si tu transfères les valeurs de $_POST['update'] dans $update pourquoi ne pas utiliser plutôt $update dans ton foreach ?

  • Pourquoi ne pas construire une seule requête UPDATE avec une clause WHERE membres.id IN (liste des id construite avec un implode de $update) ?


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 17-02-2014 19:06:22

cris84100
Membre
Inscription : 17-02-2014
Messages : 2

Re : update sql avec checkbox et PHP

J'ai modifié  $_POST['update'] en $update (évidement cela ne change rien).

Je suis débutant en PHP, je n'ai jamais utilisé les "implode" et l'erreur est avant l'update SET non ?

Hors ligne

#4 18-02-2014 09:04:28

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : update sql avec checkbox et PHP

Saluton,

Ne jamais avoir utilisé implode est un défaut dont on ne peut se corriger qu'en l'utilisant.

En l'occurrence, faire une seule requête UPDATE en passant tous les arguments du filtre WHERE à un tableau IN(), me semble plus performant que de soumettre autant de requêtes UPDATE que de checkbox cochés.

Tu ne semblais d'ailleurs pas t'orienter vers cela puisque ta boucle foreach se contentait d'écraser la valeur de chaque $id par la suivante dans $sql qui n'est jamais soumise à MySQL

Les "id" étant mis dans des checkbox "update[]" je me demande d'ailleurs ce que tu testes avec

$id = isset($_POST['id']) ? $_POST['id'] : array();

Pour moi, $_POST['id'] n'existe pas en sortie de ton formulaire.

Il n'en demeure pas moins vrai que le message d'erreur sur le foreach me laisse à penser que ton array $update n'a peut-être pas la structure que tu supposes.

Et pour pouvoir l'utiliser dans un implode, il te faut préalablement clarifier cela par un print_r($update), par exemple.

Amike.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

Pied de page des forums