Rechercher : dans
Par :

Récupérer valeur de checkbox dans bdd

Dernière réponse le 8 oct 2009 à 17:14:18 dallap, le 7 oct 2009 à 15:31:01 
 Signaler ce message aux modérateurs

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!

Meilleures réponses pour « récupérer valeur de checkbox dans bdd » dans :
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...

1

P@t@ch0n, le 7 oct 2009 à 18:11:26

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 ;)

Répondre à P@t@ch0n

2

dallap, le 7 oct 2009 à 18:23:44

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>

Répondre à dallap

3

dallap, le 7 oct 2009 à 18:32:18

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 ;)

Répondre à dallap

4

P@t@ch0n, le 7 oct 2009 à 18:34:42

Il manque une apostrophe avant erreur dans le exit ;)

Répondre à P@t@ch0n

5

dallap, le 7 oct 2009 à 19:04:53

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? :(

Répondre à dallap

6

P@t@ch0n, le 7 oct 2009 à 19:44:49

Oups désolé, j'ai oublié les quotes.

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

Par :

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

Répondre à P@t@ch0n

7

dallap, le 7 oct 2009 à 20:08:46

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 ...

Répondre à dallap

8

P@t@ch0n, le 7 oct 2009 à 22:06:24

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.

Répondre à P@t@ch0n

9

dallap, le 7 oct 2009 à 22:15:42

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

Répondre à dallap

10

dallap, le 7 oct 2009 à 22:16:57

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

Répondre à dallap

11

P@t@ch0n, le 7 oct 2009 à 23:59:53

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é.

Répondre à P@t@ch0n

12

 dallap, le 8 oct 2009 à 17:14:18

Merci de ta patience et de tes explications!

je vais faire tout de suite :)

bonne journée

Répondre à dallap
Collection CommentÇaMarche.net