Lister une table avec Checkbox

Pascal.
Invité n'ayant pas de compte PHPfrance

09 mai 2006, 13:29

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.

Mammouth du PHP | 1353 Messages

09 mai 2006, 13:41

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...

Invité
Invité n'ayant pas de compte PHPfrance

09 mai 2006, 13:50

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.

Mammouth du PHP | 1353 Messages

09 mai 2006, 13:55

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 :)
Modifié en dernier par guilt92 le 09 mai 2006, 13:58, modifié 3 fois.

Eléphant du PHP | 451 Messages

09 mai 2006, 13:56

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'"; 
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Eléphant du PHP | 377 Messages

09 mai 2006, 13:57

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
Petit scarabée deviendra grand

Invité
Invité n'ayant pas de compte PHPfrance

09 mai 2006, 14:02

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.

Invité
Invité n'ayant pas de compte PHPfrance

10 mai 2006, 01:03

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.

Eléphant du PHP | 451 Messages

10 mai 2006, 06:05

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' :)
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Invité
Invité n'ayant pas de compte PHPfrance

10 mai 2006, 08:50

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.

Eléphant du PHP | 451 Messages

10 mai 2006, 09:21

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 ">";
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)