Page 1 sur 1

Lister une table avec Checkbox

Posté : 09 mai 2006, 13:29
par Pascal.
bonjour à vous tous.
Je suis un nouveau dans le monde PHP.
Si vous pouviez m'aider... je vais essayer d'être clair ...

Voila je veux lister une table MySQL (ici ça va!) ... la table : 'amis'

Je veux faire apparaitre leurs, nom, prénom, ... et un case à cocher (Checkbox) correspondant à mon champ 'select'.
Ce champ est de type 'ENUM' : enum('oui','non') NOT NULL default 'non'
<form method='POST' action='fenetre.php'>
<table border="1">
<tr>
<td width=''>Prénom Nom</td>
<td width=''>Ville</td>
<td width=''>Selection</td>
</tr>

<?
require("conf/conf.php");

mysql_select_db('carnet',$db);
$query="Select * from amis" ;
$result = mysql_query( $query )or exit ('Erreur SQL !'.$query.'<br>'.mysql_error());
while($data = mysql_fetch_array($result))
{
$select=$data['select'];

echo"<tr><td>".$data['prenom']."&nbsp;".$data['nom']."</td>";
echo"<td>".$data['ville']."</td>";
echo"<td><input type='checkbox' name='id_ami[]' value='".$data['id_ami']."'";
if ($select!='non') { echo "selected"; } else { }
echo "></td>";
echo"</tr>";
}
mysql_close();
?>
<input type="submit" name="Submit" value="Modifier" />

</table> 
</form>
Faire une sélection sur certain nom, en cochant la checkbox (ou en décochant certaines case à cocher) et que ceux que j'ai sélectionnés... le champ 'select' prend la valeur 'oui'... et ceux qui ne sont plus 'cochés' prennent la valeur 'non'...

Alors j'ai crée un script :
<? require("conf/conf.php");

$id_ami=(isset($_POST['id_ami']))? $_POST['id_ami'] : NULL;
if (sizeof($id_ami)==0){
echo "aucun selectionné"; 
exit;}
else{

mysql_select_db('carnet',$db);
foreach ($id_ami as $valeur){
$sql="UPDATE amis SET select='oui' where id_ami='$id_ami'";
$req= mysql_query($sql);
}
mysql_close();
echo "ok c'est fait !";
}
?>
Il n'y à pas d'erreur... mais les changements ne se font pas !?
Avez vous une idée ?

Merci
Pascal.

Posté : 09 mai 2006, 13:41
par guilt92
Je vois une premiere erreur qui explique que ton UPDATE marche pas :
mysql_select_db('carnet',$db); 
foreach ($id_ami as $valeur){ 
$sql="UPDATE amis SET select='oui' where id_ami='".$id_ami."'"; 
$req= mysql_query($sql); 
Comme ça ça ira mieux :)
Enfin si id_ami est un texte, sinon tu peux enlever les ''. Mais la facon dont tu l'avais fait il ne prenais pas $id_ami comme une variable mais comme du texte... Ainsi il cherchait dans la base quelqu'un dont l'id serait '$id_ami' ce qui n'existe pas je suppose...

Posté : 09 mai 2006, 13:50
par Invité
guilt92 merci de ta réponse,

normalement id_ami est un 'identifiant de la table' donc il est numérique...
Ai-je bien compris ta remarque?


Mais en faisant un "echo $sql;" je viens de m'appercevoir qu'il y a un autre problème :
UPDATE amis SET select='oui' where id_ami='Array'

il affiche "array" à la place de l'identifiant ... ?

Pascal.

Posté : 09 mai 2006, 13:55
par guilt92
mysql_select_db('carnet',$db); 
foreach ($id_ami as $valeur){ 
$sql="UPDATE amis SET select='oui' where id_ami=".$valeur; 
$req= mysql_query($sql); 
Comme cela ca devrait fonctionner, c'est ce que je voulais te dire quand je te parlais d'enlever les ' ' si c etait une valeur numérique. Aussi erreur que je n'avais pas remarquée, il faut utiliser $valeur, pas $id_ami. $id_ami est ton tableau, $valeur représente chaque valeur :)

Posté : 09 mai 2006, 13:56
par jpaul
Ben c'est normal :
foreach ($id_ami as $valeur){ 
Ca veut dire que $id_ami est un tableau, tu boucles dessus en mettant chacune des valeurs dans $valeur.
il faudrait plutôt :
$sql="UPDATE amis SET select='oui' where id_ami='$valeur'"; 

Posté : 09 mai 2006, 13:57
par Shrell
c'est normal, $id_ami est un tableau ;)
remplace $id_ami par $valeur :
mysql_select_db('carnet',$db); 
foreach ($id_ami as $valeur){ 
$sql="UPDATE amis SET select='oui' where id_ami=".$valeur; 
$req= mysql_query($sql);
---- EDIT ----
trop tard lol

Posté : 09 mai 2006, 14:02
par Invité
Merci à vous tous...

Je vais essayer de faire toutes les modifs que vous me proposer.. .je reviendrai pour vous dire si ca marche
(La ! je dois partir...) :(

Encore merci
Pascal.

Posté : 10 mai 2006, 01:03
par Invité
Merci à vous tous cela fonctionne :)

Comment dois-je faire si je veux déselectionner ces "cases à cocher" ?

La pour le moment je ne peux que cocher ces case.. .mais les décocher ?

Merci si vous avez une idée !

Pascal.

Posté : 10 mai 2006, 06:05
par jpaul
Pour décocher la case, tu cliques dessus ;)

Autrement, si tu ne veux pas que la case soit cochée par ton scripte, il faut voir du côté de la ligne :
if ($select!='non') { echo "selected"; } else { } 
En lisant cette ligne, si tes cases sont toujours cochées, c'est que $select est toujours différent de 'non' :)

Posté : 10 mai 2006, 08:50
par Invité
Bonjour Jpaul,
J'ai essayé de "décocher" les "case à cocher"... mais comme le script ne prend en compte que les "checkboxs" cochés... et ben ca ne fonctionne pas.

Peut être dois-je reprendre tout mon code... !?
Car je suis parti sur : "si les cases son cochées"... !?

Afficher toutes les cases (cochées ou pas si le champ "ENUM" est à "oui" ou "non")
Puis toutes les vérifier, une par une, et les traiter...
C'est ça que je ne sais pas faire... !?
Puisque si une case n'est pas cochée... il ne peut y avoir de "selection" (isset ?)
Peut être avec un champ "hidden" ? Mais je ne vois pas comment le "configurer" pour que le script execute tout cele ?

Avez vous une idée ?
Merci
Pascal.

Posté : 10 mai 2006, 09:21
par jpaul
Au lieu d'un checkbox, tu peux peut etre essayer avec un radio, un truc dans ce genre là :
echo"<td><input type='radio' name='id_ami[]' 
value='oui'";
if ($data['id_ami'] == 'oui') echo " CHECKED";
echo ">";
echo"<td><input type='radio' name='id_ami[]' 
value='non'";
if ($data['id_ami'] == 'non') echo " CHECKED";
echo ">";