Comment insérer plusieurs valeurs d'un select multiple ?

Fermé
geekat Messages postés 228 Date d'inscription vendredi 31 juillet 2015 Statut Membre Dernière intervention 24 février 2017 - Modifié par geekat le 28/08/2015 à 16:54
geekat Messages postés 228 Date d'inscription vendredi 31 juillet 2015 Statut Membre Dernière intervention 24 février 2017 - 2 sept. 2015 à 11:09
Bonjour,
J'ai un formulaire qui contient une liste de sélection multiple. Je suis arrivée à récupérer les valeurs sélectionnées à l'aide d'une boucle, maintenant pour l'insertion je n'arrive à insérer qu'une seule valeur sélectionnée c'est la première de la liste.
J'aimerais récupérer toutes les valeurs, je ne sais pas comment! J'ai essayé quelques fonctions comme ceci :
$thematique = $bdd -> real_escape_string ($thematique); 
et
$thematique = $bdd -> quote ($thematique);


Erreur pour la première, et rien de changé pour la 2ème. Donc je ne sais pas quoi utiliser pour insérer un tableau de valeurs et non une valeur ?

Merci.

2 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
Modifié par Pitet le 28/08/2015 à 17:24
Salut,

Une solution possible serait de sérialiser ton tableau pour le convertir en chaine de caractère.
A la récupération des données, tu pourras bien sûr dé-sérialiser cette chaine pour récupérer ton tableau.

http://php.net/manual/fr/function.serialize.php
https://www.php.net/manual/fr/function.unserialize.php

Bonne journée
1
geekat Messages postés 228 Date d'inscription vendredi 31 juillet 2015 Statut Membre Dernière intervention 24 février 2017
31 août 2015 à 10:15
Merci Pitet. En fait j'ai des clés primaires, je ne sais pas si je peux les rassembler comme un tableau dans un seul champ
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
31 août 2015 à 16:11
Je ne comprend pas ton problème, peux tu nous donner un peu plus de précision ? Un exemple de code ? Le résultat obtenu et le résultat attendu ?
0
geekat Messages postés 228 Date d'inscription vendredi 31 juillet 2015 Statut Membre Dernière intervention 24 février 2017
Modifié par geekat le 1/09/2015 à 15:45
Bonjour,

Voilà un exemple de code :
Table categorisation : 
id_categorisation INT PK
id_nationalite INT FK

Table nationalite: 
id_nationalite INT PK
nationalite VARCHAR(50)


J'ai une table 'categorisation' qui contient :
- une clé primaire (id_categorisation),
- une clé étrangère (id_nationalite) qui est clé primaire d'une autre table 'nationalite'.

J'ai une table 'nationalite' qui contient :
- une clé primaire (id_nationalite),
- un champ simple (nationalite)


But :
Le but est d'insérer les nationalités ou plutôt les id_nationalite dans la table categorisation. Je peux avoir 1 ou plusieurs nationalités sélectionnées, j'aurais donc plusieurs entiers successif.

<form action="" method="post" ">
<select name="nationalite[] multiple">
<OPTION VALUE="">Nationalité</OPTION>
<?php
while ($donnees1 = $reponse1->fetch(PDO::FETCH_ASSOC))
{if ($donnees1["id_nationalite"]==$nationalite)
echo '<OPTION VALUE="'.$donnees1["id_nationalite"].'" selected="selected">'.$donnees1["nationalite"].'</OPTION>';
else
echo '<OPTION VALUE="'.$donnees1["id_nationalite"].'">'.$donnees1["nationalite"].'</OPTION>';
}'; ?>
</select>
<?php
$id_nationalite=($_POST['id_nationalite']));
$bdd->exec("INSERT INTO categorisation VALUES (null,$id_nationalite");
?>


Désolée c'est un peu long. L'insertion dans ce cas doit avoir comme valeurs :
id _nationalite : 1 2 3 5 9....
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
1 sept. 2015 à 16:02
Ton champ id_nationalite dans la table categorisation est de type INT FK, tu ne pourras donc enregistrer qu'un seul identifiant de nationalité par ligne de la table categorisation.

Soit tu conserves ton champ id_nationalite en type INT FK : dans ce cas tu dois faire une boucle pour parcourir tous les identifiants sélectionnés et effectuer une requête INSERT pour chaque identifiant (un identifiant par ligne de la table categorisation).

Soit tu transforme ton champ id_nationalite en type VARCHAR : dans ce cas tu peux convertir ton tableau des identifiants sélectionnés en chaine de caractère via serialize() et l'enregistrer tel quel.
0
geekat Messages postés 228 Date d'inscription vendredi 31 juillet 2015 Statut Membre Dernière intervention 24 février 2017
2 sept. 2015 à 11:09
Merci beaucoup! je vais essayer ça
0