[php] Checkbox et variable

Résolu/Fermé
Messages postés
38
Date d'inscription
mercredi 14 janvier 2009
Statut
Membre
Dernière intervention
4 juin 2013
-
Messages postés
1669
Date d'inscription
vendredi 11 mai 2007
Statut
Contributeur
Dernière intervention
21 mai 2012
-
Bonjour,
Bon bah comme vous le voyez je travaille sur plusieurs problemes j'ai beau chercher mais j'arrive pas a resoudre, et comme vos conseils sont plutot efficaces, ben je reviens !

Cette fois, j'ai une checkbox qui correspond a une taille et un champs qui lui est associé. Si la checkbox est coché, l'utilisateur doit remplir le champs.
C'est en faite pour ajouter un produit a ma base de donné, il y en tout 10 tailles ( de 0 a 9).Voici mon code.

Code :

<table border=\"0\" cellpadding=\"4\" cellspacing=\"9\">
<tr>
<td>S</td>
<td><input type=\"checkbox\" name=\"taille[]\" value=\"S\"/> </td>
<td><input type=\"text\" name=\"qte[]\" /></td>
<td>T36</td>
<td><input type=\"checkbox\" name=\"taille[]\" value=\"T36\"/> </td>
<td><input type=\"text\" name=\"qte[]\" /></td>
</tr>
<tr>
<td>M</td>
<td><input type=\"checkbox\" name=\"taille[]\" value=\"M\" /> </td>
<td><input type=\"text\" name=\"qte[]\" /></td>
<td>T38</td>
<td><input type=\"checkbox\" name=\"taille[]\" value=\"T38\" /> </td>
<td><input type=\"text\" name=\"qte[]\" /></td>
</tr>
</table>

for($i=0;$i<=4;$i++)
{
if(isset($_POST['taille'][$i]))
{

$var=secbdd($_POST['qte'][$i]);
$tail="insert into posseder values('".$_POST['taille'][$i]."','".$nump."',".$var.")";
$req3=mysql_query($tail);
}
}

____________________________________________________________________________________

J'ai volontairement couper du code sinon c'etait trop consequent. Il y a donc ici 4 yailles differentes. Je pense que le probleme vient de la boucle, et du traitement des variables des checkbox. En gros il vient du plus important.
Les requetes sont executés a moitié, soit certaines cases cocher ne sont pas ajouter dans la BDD, soit il manque une donné, bref j'ai essayer plusieurs maniere, avec un tableau a deux dimensions, avec des variables dynamiques, mais je pense que le probleme vient de moi je dois mal faire tourner mon algorithme.

Si vous pouviez m'aider svp :)

13 réponses

Messages postés
1838
Date d'inscription
dimanche 14 juin 2009
Statut
Membre
Dernière intervention
24 juillet 2019
140
bonjour,

// je mettrais ça ici pour vérifier ce que renvoit le POST
echo "<pre>";print_r($_POST);echo "</pre>";

for($i=0;$i<=4;$i++)
{
if(isset($_POST['taille'][$i]))
{

$var=secbdd($_POST['qte'][$i]);
$tail="insert into posseder values('".$_POST['taille'][$i]."','".$nump."',".$var.")";
$req3=mysql_query($tail);
}
}

Messages postés
38
Date d'inscription
mercredi 14 janvier 2009
Statut
Membre
Dernière intervention
4 juin 2013

Tres pratique cette petite ligne pour debugger !
Alors j'ai bien mon tableau de $taille[] qui contient les bonnes valeurs. Si je coche S et M dans cette exemple j'obtiens ceci : [taille] => Array
(
[0] => S
[1] => M
)
A priori le probléme vient du tableau $qte[] qui lui me retourne ceci :
[qte] => Array
(
[0] => 15
[1] =>
[2] => 30
[3] =>
)
C'est pour ça que certaines valeurs ne sont pas rentrés. Ou pas du tout.
Comment faire alors pour que le $taille[1] qui correspond a la taille M,recupere bien le bon nombre de quantité ?
Messages postés
1838
Date d'inscription
dimanche 14 juin 2009
Statut
Membre
Dernière intervention
24 juillet 2019
140
Bonsoir,
pour récupérer une bonne valeur, il faut qu'elle ait été mise.
Vérifier si cette valeur est bien dans la table. car si on récupère rien c'est que soit la valeur n'est pas en table ou bien que la rprogramme n'utilise pas le bon nom du retour.
regardez les noms imprimés dans le print_r c'est celui qui est retourné dans le tableau.
Messages postés
38
Date d'inscription
mercredi 14 janvier 2009
Statut
Membre
Dernière intervention
4 juin 2013

En faite quand taille est a lindice 0, qte est aussi a l'indice 0 donc c bon, mais quand taille est a l'indice 1, l'indice 1 de qte est vide donc la requete ne marche pas. Et comme taille est fini, les autre valeurs de qte zont zappés.
En faite il faudrait que les indices de deux tableau soit les memes.

Mais je vois pas comment faire pour recuperer uniquement la valeur saisie de la textbox qui correspond a la bonne checkbox
Messages postés
1838
Date d'inscription
dimanche 14 juin 2009
Statut
Membre
Dernière intervention
24 juillet 2019
140
Bonjour,

je pense qu'il faut revoir le formulaire. lescheckbox ne servent à rien.

<table border=\"0\" cellpadding=\"4\" cellspacing=\"9\">
<tr>
<td>S</td>
<td><input type="text" name="qteS" value=0 /></td>
<td>T36</td>
<td><input type="text" name="qteT36" value=0 ></td>
</tr>
<tr>
<td>M</td>
<td><input type="texte" name="qteM" value=0 /></td>
<td>T38</td>
<td><input type="text" name="qteT38" value=0 /></td>
</tr>
</table>

si les quantités sont renseignées (!=0 c'est comme si la checkbox avait été cliquée)

ensuite regarde ce que tu reçois pour mettre à jour ta base (le name te dire ce que c'est).
Messages postés
38
Date d'inscription
mercredi 14 janvier 2009
Statut
Membre
Dernière intervention
4 juin 2013

Salut,
je pense que tu as raison pr les checkbox, je les ai donc viré, et est modifié le code php en ce ci :

for($i=0;$i<=9;$i++)
{
if(isset($_POST['qte'][$i]) && !empty($_POST['qte'][$i]))
{
$tail="insert into posseder values('".$_POST['taille'] [$i]."','".$nump."',".$var.")";
$req3=mysql_query($tail);
}
}

Seulement comme d'habitude c'est la premeire valeur qui est rentré dans la base de donnée et pas le reste : /.
La je comprends pas trop, j'ai verifier si les donnés etait par rapport a mon lmd et c'est bon.
Certaine cellule du tableau $taille sont vides, ce serait a cause de ça ?
Messages postés
1669
Date d'inscription
vendredi 11 mai 2007
Statut
Contributeur
Dernière intervention
21 mai 2012
182
Bonsoir :)

oui, je pense que c'est à cause de ca... donc =>

for($i=0;$i<=9;$i++)
{
if(isset($_POST['qte'][$i]) && !empty($_POST['qte'][$i]))
{
$MaTaille=0;
if (isset ($_POST['taille'] [$i]){$MaTaille=$_POST['taille'] [$i];}
$tail="insert into posseder values('".$MaTaille."','".$nump."',".$var.")";
$req3=mysql_query($tail);
}
}
Messages postés
38
Date d'inscription
mercredi 14 janvier 2009
Statut
Membre
Dernière intervention
4 juin 2013

Alors j'ai virer les checkbox.
Je me suis trompé c'est qte qui a des valeur vide.
Comme j'ai mis <td><input type=\"text\" name=\"qte[]\" value=\"0\"/></td>, le premier formulaire c'est $_POST['qte"][0]

Du coup j'ai fait ça :

$taille = array();
$taille[0]= "S";
$taille[1]= "T36";
$taille[2]= "M";
$taille[3]= "T38";
$taille[4]= "L";
$taille[5]= "T40";
$taille[6]= "XL";
$taille[7]= "T42";
$taille[8]= "XXL";
$taille[9]= "T44";
for($i=0;$i<=9;$i++)
{
$var=secbdd($_POST['qte'][$i]);
if(isset($_POST['qte'][$i]) && !$_POST['qte'][$i] !=0)
{
$tail="insert into posseder values('".$taille[$i]."','".$nump."',".$var.")";
$req3=mysql_query($tail);
}
}

Mais maintenant toutes les tailles sont rentrés dans la bdd sauf que les quantités reste a 0.
Je comprend plus rien ...
edit : qud je dis toutes les tailles c'est que j'ai les 10 tailles, le numero du produit, et la quantité 0. Meme si la valeur a été saisie.
edit : 2 en mettant le value dans la balise input, est affiché "0" par defaut dans la box.
Messages postés
1669
Date d'inscription
vendredi 11 mai 2007
Statut
Contributeur
Dernière intervention
21 mai 2012
182
la quantité c'est $var c'est ca ?? si oui... ben il manque un $var=$_POST['qte'][$i] quelque part...
Messages postés
38
Date d'inscription
mercredi 14 janvier 2009
Statut
Membre
Dernière intervention
4 juin 2013

Non il etait au dessus du if si tu regardes bien.
Mais je l'ai remis dans le if.

$taille = array();
$taille[0]= "S";
$taille[1]= "T36";
$taille[2]= "M";
$taille[3]= "T38";
$taille[4]= "L";
$taille[5]= "T40";
$taille[6]= "XL";
$taille[7]= "T42";
$taille[8]= "XXL";
$taille[9]= "T44";
for($i=0;$i<=9;$i++)
{

if(isset($_POST['qte'][$i]) && !$_POST['qte'][$i] !=0)
{
$var=secbdd($_POST['qte'][$i]);
$tail="insert into lulu_posseder values('".$taille[$i]."','".$nump."',".$var.")";
$req3=mysql_query($tail);
}
}

Secbdd c'est une fonction qui pr limiter les injections sql et tt. Ttes mes valeurs saisies passent par ça donc ça vient pas de là.
Seulement ya qqch que je comprend pas j'ai bien mis dans la condition que si c'est different de 0 ça execute la requête.Alors comment ça se fait que ça me rentre toutes les tailles avec en quantité 0 ?
Messages postés
1838
Date d'inscription
dimanche 14 juin 2009
Statut
Membre
Dernière intervention
24 juillet 2019
140
bonsoir,
si tu mettais le résultat de :
echo "<pre>";print_r($_POST);echo "</pre>";

on pourrait voir exactement ce que te renvoit le formulaire.
Messages postés
38
Date d'inscription
mercredi 14 janvier 2009
Statut
Membre
Dernière intervention
4 juin 2013

C'est bon ça marche !
J'ai changer de place deux trois trucs dans la boucle:

for($i=0;$i<=9;$i++)
{
$var=secbdd($_POST['qte'][$i]);
if(isset($_POST['qte'][$i]) && $var !=0)
{

$tail="insert into lulu_posseder values('".$taille[$i]."','".$nump."',".$var.")";
$req3=mysql_query($tail);
}
}

Je vous en suis tres reconnaissant a vous deux de m'aider : ) J'apprecie vraiment sans votre aide je serai dans la mouise ! Merci encore ; )
Messages postés
1669
Date d'inscription
vendredi 11 mai 2007
Statut
Contributeur
Dernière intervention
21 mai 2012
182
Pas de soucis.. comme qui dirait.. on a fait que te guider.. tu à trouver la solution finale !! :D

Met ton post en résolu ;)