Récupérer valeur de checkbox dans bdd

Fermé
dallap - 7 oct. 2009 à 15:31
 dallap - 8 oct. 2009 à 17:14
Bonjour,
j'ai dans un formulaire avec des checkbox à cocher :

Que souhaiteriez-vous :<br />
<input type="checkbox" name="souhait[]" id="souhait[]" value="telechargements" />  Plus de téléchargements<br />
<input type="checkbox" name="souhait[]" id="souhait[]" value="tutoriaux" />  Plus de tutoriaux/astuces<br />
<input type="checkbox" name="souhait[]" id="souhait[]" value="liens" />  Plus de liens<br />
<input type="checkbox" name="souhait[]" id="souhait[]" value="news" />  Plus de news<br />
<input type="checkbox" name="souhait[]" id="souhait[]" value="forum" />  Un forum<br />
<input type="checkbox" name="souhait[]" id="souhait[]" value="membre" />  Un espace membre<br /><br />

et je souhaiterais recuperer les valuer (liens, forum...) dans ma base de donnée. j'ai essayé de nombreuses solutions trouvées sur des forum comme:
1:
if (isset($_POST['souhait'])) {
for ($i = 0, $c = count($_POST['souhait']); $i < $c; $i++) {
$sql="insert into questionnaire(souhait) values('$monchoix')";
mysql_query($sql) or die ('erreur sur '.$sql.'<br/>'.mysql_error());
}
}

ou

2:
$monchoix = implode (" ", $souhait);
$sql="insert into questionnaire(souhait) values('$monchoix')";
mysql_query($sql) or die ('erreur sur '.$sql.'<br/>'.mysql_error());

$souhait=$_POST['souhait[]'];

mais je n'arrive pas a les insérer, j'ai déclaré mon champ "souhait" en TEXT puis en SET, lequel est le mieux?

je me suis également inspiré de cette page mais je n'arrive toujours pas:
http://julp.developpez.com/php/formulaires/#L4

pourriez vous m'aider svp?

merci!

11 réponses

P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
7 oct. 2009 à 18:11
De cette façon.

$valeursAutorisees = array('telechargements', 'tutoriaux', 'liens', 'news', 'forum', 'membre');
if( !empty($_POST['souhait']) && is_array($_POST['souhait'])  )
{
    $_POST['souhait'] = array_unique($_POST['souhait']);
    $values = null;
    foreach( $_POST['souhait'] as $souhait )
    {
        if( in_array($souhait, $valeursAutorisees) )
            $values .= '(' . $souhait . '),';
    }
    if( $values != null )
    {
        $sql= 'INSERT INTO questionnaire(souhait) VALUES ' . rtrim($values, ',');
        mysql_query($sql) or exit(erreur sur '.$sql.'<br/>'.mysql_error());

        // Nombre de lignes insérées
        echo mysql_affected_rows() . ' lignes insérées';
    }
}


Attention aussi aux ids de tes input, ils doivent-être uniques ;)
0
tout d'abord merci de ta réponse, mais j'ai un message d'erreur.

Parse error: syntax error, unexpected T_STRING in .../www/questionnaire2.php on line 73
je ne vois pas ce qui cloche dans cette ligne
mysql_query($sql) or exit(erreur sur '.$sql.'<br/>'.mysql_error());

j'ai également modifié mes ID:

<table align="center" border="0"><tr><td colspan="2"><u> Que souhaiteriez-vous :</u></td></tr>
<tr><td align="right"><input type="checkbox" name="souhait[]" id="telechargements" value="telechargements" /></td><td>Plus de téléchargements</td></tr>
<tr><td align="right"><input type="checkbox" name="souhait[]" id="tutoriaux" value="tutoriaux" /></td><td>Plus de tutoriaux/astuces</td></tr>
<tr><td align="right"><input type="checkbox" name="souhait[]" id="liens" value="liens" /></td><td>Plus de liens</td></tr>
<tr><td align="right"> <input type="checkbox" name="souhait[]" id="news" value="news" /></td><td>Plus de news</td></tr>
<tr><td align="right"> <input type="checkbox" name="souhait[]" id="forum" value="forum" /></td><td>Un forum</td></tr>
<tr><td align="right"> <input type="checkbox" name="souhait[]" id="membre" value="membre" /></td><td>Un espace membre</td></tr></table>
0
ha voila j'ai enfin trouvé, il manquait juste un ' avant erreur.

maintenant j'ai :
Unknown column 'tutoriaux' in 'field list'
je vais résoudre ça!
merci ;)
0
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
7 oct. 2009 à 18:34
Il manque une apostrophe avant erreur dans le exit ;)
0
hum encore désolé mais je n'arrive pas, j'ai toujours le message d'erreur :

erreur sur INSERT INTO questionnaire(souhait) VALUES (forum)
Unknown column 'forum' in 'field list'

(pour chaque case que je coche)

dans ma table questionnaire j'ai pourtant 'souhait' de type SET avec comme valeurs :
'telechargements', 'tutoriaux', 'liens', 'news', 'forum', 'membre'

ca devrait être bon non? :(
0

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

Posez votre question
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
7 oct. 2009 à 19:44
Oups désolé, j'ai oublié les quotes.

$values .= '(' . $souhait . '),';

Par :

$values .= '(\'' . $souhait . '\'),';
0
pas de soucis ;)
bon ca marche mais c'est pas exactement ce a quoi je m'attendais,
si je coche 3 cases j'ai 3 enregistrements, un pour chaque case cochée...

y'a pas moyen d'avoir dans le champ "souhait" les 3 valeurs cochées j'imagine ...
0
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
7 oct. 2009 à 22:06
Pourquoi voudrais-tu enregistrer plusieurs valeurs dans un seul champ ?

En faisant ça, tu sera obligé de faire des manips complexes pour compter tes résultats, faire des mises à jour, etc...

Déjà, qu'une seule table pour faire ça, c'est pas le top.
0
en fait c'est un champs de formulaire que je souhaiterai stocker.
voici un apercu de ma table ainsi que du formulaire:


http://i.imagehost.org/0963/Sans_titre.jpg
0
et dans la colonne souhait je souhaiterai pouvoir stocker plusieurs variables (si l'utilisateur coche plusieurs cases de la checkbox)

peu etre qu'il existe un moyen plus simple de le faire...

merci
0
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
7 oct. 2009 à 23:59
Le meilleur moyen, c'est de créer des tables supplémentaires et de supprimer cette colonne de ta table.

Une première table souhait(id_souhait, nom_souhait) où seront stocker les valeurs "téléchargements, liens, etc...".

Une seconde table membre_souhait(id_membre_souhait, id_membre, id_souhait) qui servira à faire la relation entre ta table souhait et ta table membre dont tu dois ajouter impérativement un id, qui ne contiendra que 3 colonnes.

Cela peut paraitre complexe au premier abord, mais cela te simplifiera grandement la manipulation de tes données en faisant un schéma de table normalisé.
0
merci de ta patience et de tes explications!

je vais faire tout de suite :)

bonne journée
0