lassad_haddaji
Messages postés141Date d'inscriptionmardi 24 avril 2007StatutMembreDernière intervention 6 avril 2012
-
27 juil. 2008 à 17:44
soniamariem
Messages postés3Date d'inscriptionlundi 18 avril 2011StatutMembreDernière intervention26 avril 2011
-
19 avril 2011 à 11:13
salut tt le monde,
mon probleme est que je veux inserer des champs de checkbox dans une seule solumn de tabe mysql
1)fichier formulaire.html
<form action="insert.php" methode="post">
.......
<!--------checkbox---->
......
</form>
2) fichier insert.php
<?php
include('connection.php');
for ($i=0;$i<count($_post['checkbox']);$i++)
{
$sql="insert into $table values (..,...,...,'".$_POST['checkbox'][$i]."') ";
mysql_query($sql);
}
mysql_close();
?>
l'erreur que dans la table fais l'ajout de multiligne si je coche 3 checkbox fais lajout de 3 ligne
est ce que possible de mettre l'ensemble de checkbox dans un table array()??? jai essai cette methode mais jai ambigu
j'attend vos reponse.
merci
JoJo738
Messages postés1267Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention29 juin 20102 28 juil. 2008 à 09:43
Hello.
Dans ton cas, tu fais une boucle pour enregistrer chaque checkbox coché. Donc N checkbox coché = N insertions dans la table
Non, il est impossible de stocker un Array dans SQL ... enfin, directement.
Heureusement, il existe les fonctions magiques serialize() et unserialize() (voir explode() et implode() pour certains cas)
serialize() va transformer un Array en une chaine String.
unserialize() va faire l'inverse : une chaine String vers un Array
Donc prennons le formulaire suivant :
<form action="insert.php" methode="post">
// Dans ce cas là, pour faire des vérifications il faut mettre des
filtres (array_filter par exemple) ou faire une bouche (foreach) et
faire une vérificationn à l'intérieur (ici, on ajoute soit tout de
suite la valeur au $_return_checkbox soit on crée un nouveau array (ou
on supprime la valeur actuelle) et on fait l'implode.
// Et ne pas oublier le séparateur !
mysql_query('[...] "' . $return_checkbox . '" [...]') or die(mysql_error());
}
// La lecture se fat normalement, mais on utilise explode('séparateur', 'row["champ_array"]') (ou split si on à plusieurs séparateurs) pour transformer en array
// On obtient ici : "a:4:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;}"
// Dans ce cas là, pour faire des vérifications il faut mettre des
filtres (array_filter par exemple) ou faire une bouche (foreach) et
faire une vérificationn à l'intérieur (ici, on ajoute soit tout de
suite la valeur au $_return_checkbox soit on crée un nouveau array (ou
on supprime la valeur actuelle) et on fait le serialize().
mysql_query('[...] "' . $return_checkbox . '" [...]') or die(mysql_error());
}
// Idem, lecture en passant par unserialize(). Ici besoin d'aucun séparateurs, la fonction gérant tout toute seule ^^
?>
<hr />Si ma reponse te convient, merci de l'accepter !
JoJo738
Messages postés1267Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention29 juin 20102 28 juil. 2008 à 16:33
Re ^^
Euh, après tout dépend de ton cas.
Si tu n'enregistreras que des valeurs numériques ou "simple" : 1, 2, 3, 4, a, b, c, d, mot ... je conseil l'explode/implode.
Mais si tu dois stoquer des valeurs un peu plus complxes (objets, array, descriptif, ...) le (un)serialize() est ton ami
<hr />Si ma reponse te convient, merci de l'accepter !
JoJo738
Messages postés1267Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention29 juin 20102 28 juil. 2008 à 16:58
re,
Euh, serialize() te permet de convertir un array/object en string.
C'est un peu la même méthode qu'avec explode()/implode(). Dans la méthode E/I on à un array, puis après le passage à l'implode(',', $array); on obtient une chaine de caractère ("1,2,3,4"). Ensuite, à la lecture l'explode(',', $row); permet de récupérer l'array.
Malheureusement cette méthode à des limites (pas d'Array multi-dim, d'object, ...).
Donc, si on prend cet exemple :
$array = array(1, 2, 3, 4); // Par exemple ton _POST['checkbox']
echo serialize($array);
// " a:4:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;} "
// (en gras tu peux voir les valeurs i:Int, s:String, o:Object, a:Array, ...
L'avantage, c'est qu'il n'y a pas besoin de séparateurs (donc pas besoin de te tracasser pour savoir si tel ou tel caractère peut être utilisé) et tu peux enregistrer absolument toutes les informations ! Mais ça prend plus de place, et c'est plus gourmand en ressources ...
Ah oui, pour faire une recherche, puisque ce sont des méthodes trafiquées ... il faut jouer sur les regex/LIKE pour utiliser la clause WHERE<hr />Si ma reponse te convient, merci de l'accepter !