Insert multiple de checkbox dans column de table mysql [Résolu]

Messages postés
142
Date d'inscription
mardi 24 avril 2007
Dernière intervention
6 avril 2012
- - Dernière réponse : soniamariem
Messages postés
3
Date d'inscription
lundi 18 avril 2011
Dernière intervention
26 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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Dernière intervention
29 juin 2010
3
Merci
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">
 
   
   
   
   
 

 
   
 

</form>

Et avec explode()/implode()
<?php


if( isset($_POST['checkbox']) && is_array($_POST['checkbox']) )

{

    // POST['checkbox'] existe et est un array.

    $return_checkbox = implode(',', $POST['checkbox']);

    // On obtient ici : "1,2,3,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 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


?>

Et avec serialize()/unserialize()
<?php


if( isset($_POST['checkbox']) && is_array($_POST['checkbox']) )

{

    // POST['checkbox'] existe et est un array.

    $return_checkbox = serialize(',', $POST['checkbox']);

    // 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 ! 

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 95 internautes nous ont dit merci ce mois-ci

Commenter la réponse de JoJo738
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Dernière intervention
29 juin 2010
3
Merci
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 ! 

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 95 internautes nous ont dit merci ce mois-ci

Commenter la réponse de JoJo738
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Dernière intervention
29 juin 2010
3
Merci
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, ...

print_r(unserialize('a:4:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;}'));
// -> unserialise($row['champ_sql']);
// Array(1, 2, 3, 4)

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 ! 

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 95 internautes nous ont dit merci ce mois-ci

Commenter la réponse de JoJo738
Messages postés
142
Date d'inscription
mardi 24 avril 2007
Dernière intervention
6 avril 2012
0
Merci
 merci beaucoup, ça marche nickel, j'ai pas essaie avec serialize()/unserialize(), je l'essaie plus tard
Commenter la réponse de lassad_haddaji
Messages postés
142
Date d'inscription
mardi 24 avril 2007
Dernière intervention
6 avril 2012
0
Merci
est ce que tu peux nous expliquer plus la methode avec serialize() , meme un exemple cé mieux

merci
Commenter la réponse de lassad_haddaji
Messages postés
3
Date d'inscription
lundi 18 avril 2011
Dernière intervention
26 avril 2011
0
Merci
salut je besoins de trouvez une solution pour envoyer un message à partir le pc vers un telephone mobile
Bonjour
Commenter la réponse de soniamariem

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.