$_POST se comporte différemment...

Titoon
Invité n'ayant pas de compte PHPfrance

07 août 2006, 13:25

Salut tout le monde,

J'ai fait un script sur 2 pages qui marchent parfaitement et pour la perf' j'ai essayé de tout mettre dans la même page. C'est un formulaire utilisant la méthode POST.

Si la variable bouton n'existe pas, on tombe sur une liste de cases à cocher et le fameux bouton. Ensuite on clique et donc la variable existe et la deuxième partie du script peut alors se jouer.

Tant qu'on coche une ou plusieurs cases à cocher et qu'on valide no problemo, mais si on clique sur le bouton sans rien cocher on tombe sur un Notice: Undefined index: ... J'ai donc essayé un count pour voir si tout était ok mais j'ai beau vouloir tester la valeur il me met toujours cette fichue erreur.

Voici le bout de code et ma pseudo feinte qui marche sur 2 pages mais pas sur une :x
//la page qui récupère et la même que celle qui émet.
$justone = count($_POST['case']);//case
//echo $justone;
if($justone<1){ echo "Aucune case cochée"; }else{...}
Une idée ? La récupération dans la même page semble pas lui plaire :cry:

Titoon

Eléphant du PHP | 197 Messages

07 août 2006, 13:54

fait un print_r($_POST[case]) et donne moi ce qu'il t'affiche

Invité
Invité n'ayant pas de compte PHPfrance

07 août 2006, 14:24

Merci déjà pour ton aide.

Ca me donne ces erreurs :

Notice: Use of undefined constant case - assumed 'case' in... ... ...

Notice: Undefined index: case in... ... ...

J'ai déjà fait des scripts multi-tâches sur une page notamment pour des mails et ca marchait mais pas pour des cases à cocher par contre.

Le code pour mes cases à cocher, le voici :

Code : Tout sélectionner

<input type='checkbox' name='case[]' value='".$rows['id']."'>
Je sais que case est une instruction PHP donc "par sécurité" j'ai donc essayé des choses comme cazacocher mais rien n'y fait, toujours la même erreur sauf que le nom change :lol:

Je continue de mon côté ma prise de tête :?

Tit'

Invité
Invité n'ayant pas de compte PHPfrance

07 août 2006, 14:48

Re,

Bon j'ai trouvé une soluce en faisant la démarche inverse à savoir :
if (!isset($_POST['cazako'])) { 
echo "Aucune case !"}else{
...
}
Est-ce une/la bonne solution ?

Tit'

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 août 2006, 16:08

Cela dépend de ton paramétrage php. Dans les dernières versions de php lorsque tu appelles un élément d'un tableau et que celui-ci n'existe pas, il te renvoi de message d'erreur.

Concernant les cases à cocher, il faut savoir que si une case n'est pas cochée, elle n'est simplement pas envoyées via le formulaire. Pour savoir si une case a été cochée, il te suffit donc de tester si elle est définie dans le tableau $_GET ou $_POST.
Ta solution d'utiliser isSet() est donc tout à fait indiquée.

Quant au test pour voir le contenu du tableau, il faut ajouter les guillemets (ou apostrophe) autour du nom de l'index :
print_r($_POST); // pour voir tout ce qui a été envoyé via le formulaire

print_r($_POST["case"]; // pour le détail de l'index "case".
Si "case" n'est pas défini un message d'avertissement est retourné. Pour l'éviter il suffit d'utiliser isSet() :
if(isSet($_POST["case"])) 
  print_r($_POST["case"]; 
else
  echo "Aucune case n'a été cochée";

Invité
Invité n'ayant pas de compte PHPfrance

08 août 2006, 08:27

Merci à vous et en particulier à toi RYLE pour ces, une nouvelle fois, riches explications. VIVE LES FORUMS, LE PARTAGE DE CONNAISSANCES en clair VIVE PHP FRANCE ^^

Titoon