PHP SQL et checkbox

Fermé
Aude - 17 oct. 2007 à 02:46
 Aude - 17 oct. 2007 à 19:55
Bonjour,
J'ai une base de données avec 2 tables. La première contenant une liste d'adhérent avec nom et coordonnées. la seconde contenant une liste de loisirs.

D'autre part, j'ai un formulaire avec des checkbox dans lequel les adhérents choisissent entre 1 et 7 loisirs.

Je me pose plusieurs questions :
Comment recupérer les checkboxs séléctionnées(valeur=1) et les non sélectionnées (valeur=0) dans ma table loisirs ?
Comment changer la valeur de mes checkbox qui me renvoie "ski", "rando", "escalade" par un 0 ou un 1 si la case est cochée.

Si par chance, quelqu'un avait un début de reflexion à m'apporter... parce que j'ai essayé de renvoyer un tableau de valeur avec my_fetch_array ou d'utiliser explode... enfin voila je suis complètement paumée.

Merci d'avance pour vos pistes.
A voir également:

5 réponses

kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
17 oct. 2007 à 14:46
Tout d'abord je veux bien te croire que toi et le code ca fait deux ;) puisque voici une petite erreur d'algorithmie :
if(isset($_POST['choixform']))
{
  $choixform=$_POST['choixform'];
  
  for($i=0;$i<$total;$i++)
  {
    $choixform[$i] = "1";
  }
}
else
{
  $choixform[$i] ="0";
}


Ici, l'erreur se produit sur la ligne en gras comme tu l'as soulignée. Pourquoi ? Parce que la variable PHP '$i' n'existe pas dans ce bout de code. En effet, tu déclare $i dans ta boucle for, elle même incluse dans la première partie de ta condition IF, donc tu utise une variable qui n'est pas déclarée au bon endroit, et donc inconnue tu aura une erreur.
Je te conseille donc d'apporter cette modification :
if(isset($_POST['choixform']))
{
  $choixform=$_POST['choixform'];
  
  for($i=0;$i<$total;$i++)
  {
    $choixform[$i] = "1";
  }
}
else
{
 // --- Pas de tableau passé en paramètre -> erreur.
  echo "<script language='javascript'>alert('Erreur de formulaire')</script>";
  // --- On arrête la script ici
 exit;
}



Après, ce que je comprends de ton script c'est que tu veux pouvoir mettre à '1' ou '0' dans ta base de données en fonction de ce qui est coché ou non. Le problème c'est que lorsque tu envoi un formulaire avec un tableau comme ca qui représente tes checkbox, il me semble que ca ne t'envoi dans la tableau uniquement les checkbox qui ont été cochées.
Il va dont falloir mettre en place un syteme de détection pour savoir quel checkbox a été cochée ou non. Ainsi si l'utililsateur ne coche que la première et dernière (sur les trois) options, ton tableau dans le script PHP n'aura que deux valeurs : 0 et 2.
Je ne suis pas sur de ce que j'avance là car ca fait un moment que je n'ai pas fais ca, mais il me semble que ca fonctionne comme ca...

2
La suite de mes aventures...

j'ai bien compris l'erreur par rapport à la variable non déclarée. Je l'ai donc déclarée à nouveau dans le Else, en essayant de faire ressortir les infos cochées et non cochées avec le empty ou NULL. Les infos cochées ressortent bien mais rien pour les cases non cochées... grrrrrrrr!!!

Je comprends que les cases non cochées non pas de valeur car j'ai toujours des erreurs "Undefined index:" sur les cases non cochées. Mais alors comment leur attribuer une valeur ?

if($_POST["choixform"]) 
{
   echo "Vous avez choisi <b>-";
   for ($i=0;$i<count($_POST["choixform"]);$i++)
   {
      echo $_POST["choixform"][$i]." - ";
      
  	}
  }

if (empty($_POST['choixform']))  //ou if ($_POST['choixform'] == NULL)
{
  echo "Vous n'avez pas choisi <b>-";
 for ($i=0;$i<count($_POST["choixform"]);$i++)
 {
      echo $_POST["choixform"][$i]." - ";
      }
}
1
En fait avant de faire quoi que ce soit, je me demande tout simplement si c'est logique de traiter le résultat des checkboxs de cette manière.
Lorsque les cases loisirs sont cochées ou non, je parcoure ma liste, je regarde si une valeur à été envoyée :
si oui, je renvoie 1
si non, je renvoie 0
et je récupère dans l'ordre les valeurs 1 ou 0 dans ma table loisirs.

ça vous parait logique ?
Avez vous une autre méthode pour enregistrer les résultats des checkbox?
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
17 oct. 2007 à 13:35
J'ai pas trop cerné ton problème si ce n'est que tu veux pouvoir détecter les check box cochées de celles non cochées afin de mettre à jour ta base de données.
J'ai déjà fait des choses similaires et ce n'est pas bien difficile ni long à mettre en place. Le mieux serait donc que tu mette ici même ton code (les parties concernées) afin que l'on puisse le corriger en fonction de tes besoins.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Déjà un grand merci pour t'intéresser à mon problème. Le truc que c'est le code est moi, on est pas copain. J'ai beau faire des efforts...
Enfin bref... allons à l'essentiel voici mon code html :

<input type="checkbox" name="choixform[]" value="0"/> Ski<br />
<input type="checkbox" name="choixform[]" value="1"/>Rando<br />
<input type="checkbox" name="choixform[]" value="2"/> Escalade<br />


Et un de mes essais de php pour traiter les infos reçues :

 if(isset($_POST['choixform']))
{
  $choixform=$_POST['choixform'];
  
  for($i=0;$i<$total;$i++)
  {
    $choixform[$i] = "1";
  }
}
else
{
  $choixform[$i] ="0";
}



$rqform="INSERT INTO formation (ID, ski, rando, escalade) VALUES ('','$choixform[1]', '$choixform[2]', '$choixform[3]')";
$resultform=mysql_query($rqform)
			or die ("Erreur : requête impossible");*/
					
//$tabform=mysql_fetch_array($choixform);
}


Avec ça j'ai déjà plusieurs erreurs dont "Undefined index" qui correspond aux cases non cochées et une sur "mysql_fetch_array()".

Voila où j'en suis. Je sais que pour ceux qui connaissent un peu le php ça doit être simple mais j'ai déjà passé un certain nombres d'heure là dessus et je tourne complètement en rond. J'aimerai au moins savoir si je vais dans la bonne direction parce que je veux y arriver et JE VAIS Y ARRIVER !!! :-)
0