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

lassad_haddaji 142 Messages postés mardi 24 avril 2007Date d'inscription 6 avril 2012 Dernière intervention - 27 juil. 2008 à 17:44 - Dernière réponse : soniamariem 3 Messages postés lundi 18 avril 2011Date d'inscription 26 avril 2011 Dernière intervention
- 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
JoJo738 1267 Messages postés mercredi 7 juillet 2004Date d'inscription 29 juin 2010 Dernière intervention - 28 juil. 2008 à 09:43
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 ! 

Merci JoJo738 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de JoJo738
Meilleure réponse
JoJo738 1267 Messages postés mercredi 7 juillet 2004Date d'inscription 29 juin 2010 Dernière intervention - 28 juil. 2008 à 16:33
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 ! 

Merci JoJo738 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de JoJo738
Meilleure réponse
JoJo738 1267 Messages postés mercredi 7 juillet 2004Date d'inscription 29 juin 2010 Dernière intervention - 28 juil. 2008 à 16:58
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 ! 

Merci JoJo738 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de JoJo738
lassad_haddaji 142 Messages postés mardi 24 avril 2007Date d'inscription 6 avril 2012 Dernière intervention - 28 juil. 2008 à 13:45
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
lassad_haddaji 142 Messages postés mardi 24 avril 2007Date d'inscription 6 avril 2012 Dernière intervention - 28 juil. 2008 à 16:40
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
soniamariem 3 Messages postés lundi 18 avril 2011Date d'inscription 26 avril 2011 Dernière intervention - 19 avril 2011 à 11:13
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.