[php] Checkbox et variable

Résolu/Fermé
Aroeris Messages postés 38 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 4 juin 2013 - 26 juil. 2009 à 14:56
jjsteing Messages postés 1669 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 - 28 juil. 2009 à 22:28
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

giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
26 juil. 2009 à 15:49
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);
}
}

0
Aroeris Messages postés 38 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 4 juin 2013
26 juil. 2009 à 21:14
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é ?
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
26 juil. 2009 à 21:52
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.
0
Aroeris Messages postés 38 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 4 juin 2013
27 juil. 2009 à 10:23
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
0

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

Posez votre question
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
27 juil. 2009 à 12:32
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).
0
Aroeris Messages postés 38 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 4 juin 2013
28 juil. 2009 à 21:40
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 ?
0
jjsteing Messages postés 1669 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
28 juil. 2009 à 21:46
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);
}
}
0
Aroeris Messages postés 38 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 4 juin 2013
28 juil. 2009 à 22:06
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.
0
jjsteing Messages postés 1669 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
28 juil. 2009 à 22:13
la quantité c'est $var c'est ca ?? si oui... ben il manque un $var=$_POST['qte'][$i] quelque part...
0
Aroeris Messages postés 38 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 4 juin 2013
28 juil. 2009 à 22:19
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 ?
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
28 juil. 2009 à 22:20
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.
0
Aroeris Messages postés 38 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 4 juin 2013
28 juil. 2009 à 22:26
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 ; )
0
jjsteing Messages postés 1669 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
28 juil. 2009 à 22:28
Pas de soucis.. comme qui dirait.. on a fait que te guider.. tu à trouver la solution finale !! :D

Met ton post en résolu ;)
0