encore une histoire de checkbox à choix multiple

yola26
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 14:16

J'ai beau fais une recherche à propos des checkboxs sur le forum mais je ne trouve pas la solution à mon probleme, peut etre à cause d'un manque de connaissance en la matière.

Mon probleme est le suivant :
je souhaiterais à l'aide d'un formulaire qui s'enregistre dans une base de donnée pouvoir procéder à un choix multiple à l'aide des checkbox, hélas je n'arrive pa à enregistrer mes valeurs dans mon champs, il me retourne obligatoirement "Array". Voici le code html dans le fichier php
	<td width="125"><b><font face="Verdana" size="2">problemes liés le plus souvent :</font></b></td>
		<td width="125">
		<input type="checkbox" name="probleme[]" value="Imprimante">Imprimante
		<input type="checkbox" name="probleme[]" value="Palm">Palm
		<input type="checkbox" name="probleme[]" value="scanner">scanner
		<input type="checkbox" name="probleme[]" value="Portable">Portable</td>
	</table>
maintenant le code qui va traite la requete :
   // connection avec MySQL
    @mysql_connect($host, $user, $pass) or die("Impossible de se connecter à la base de données"); // Le @ indique à php de ne pas afficher de message d'erreur
    @mysql_select_db($bdd) or die("Impossible de se connecter à la base de données");


 $titre = addslashes($_POST['titre']);
 $description = addslashes($_POST['description']);
 $utilisateur = $_POST['utilisateur'];
 $probleme = $_POST['probleme'];


    // affichage sélection
 $sql = "INSERT INTO " . $table . "(titre, description, utilisateur, probleme) VALUES('" . $titre . "','" . $description . "','" . $utilisateur . "','" . $probleme . "')";
 $res = mysql_query($sql);

 echo "Sauvegarde réussite";

    // stockage dans la bdd

    // déconnection avec MySQL
    mysql_close();

     ?>

yola26
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 14:27

j'ai essayer ceci mais plus rien ne ce passe :

    // affichage sélection
 $sql = "INSERT INTO " . $table . "(titre, description, utilisateur, probleme) VALUES('" . $titre . "','" . $description . "','" . $utilisateur . "',";
 if (!empty($probleme)) {
     foreach($probleme as $cle => $valeur) {
         $sql .= "'".$valeur."', ";
     }
 }
 $sql = substr($sql, 0, -2);
// on execute
mysql_query($sql);

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

15 sept. 2005, 14:35

le deuxième code est sur la bonne voie
mais avant d'exécuter la requête, affiche la à l'écran pour voir si rien ne te choque
ensuite, copie-colle le code dans phpMyAdmin et exécute la directement, tu verras d'éventuelles erreurs MySQL

yola26
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 14:46

ca m'affiche ceci :
INSERT INTO fiche_client(titre, description, utilisateur, probleme) VALUES('fffgg','ffffggg $jjggg','SYLVAIN REMEYSE','Imprimante', 'Palm', 'scanner', 'Portable', Sauvegarde réussite
déjà il manque une parenthese mé ou la mettre je ne se sais pa trop

j'ai mis :

echo $sql;

yola26
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 14:48

en faite ca m'affiche ceci plutot :

INSERT INTO fiche_client(titre, description, utilisateur, probleme) VALUES('fffgg','ffffggg $jjggg','SYLVAIN BOREMISE','Imprimante' 'Palm' 'scanner' 'Portable' Sauvegarde réussite

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

15 sept. 2005, 14:55

il faut rajouter la parenthèse à la fin, en fait enlever l'espace et l'apostrophe en trop, et lesremplacer par une parenthèse

mais là c'est normal que ça ne marche sinon, tu as 4 colonnes, et tu essayes d'insérer 7 valeurs

yola26
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 15:02

sui j'ai bien compris je ne peux pas rentrer les données imprimante, scanner, portable etc.. dans le même champs ? je suis obligé de créer autant de champs spécifiques que j'ai de données multiples par rapport aux checkboxc donc ?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

15 sept. 2005, 15:14

tu pourrais enregistrer toutes ces données dans la même colonne, mais en une seule fois, en les concaténant dans une même chaine
or ici tu les enregistres séparément, donc il faudrait un nombre de colonnes correspondant

mais si tu dois stocker plusieurs valeurs dans une seule colonne, il doit y avoir un problème de conception quelque part

lorsqu'il y a répétition des données, plusieurs valeurs dans une même colonne, ou plusieurs colonnes sensiblement identiques, alors il y a un problème

yola26
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 15:28

oui le but est d'enregistrer dans la meme colonne en les concaténant et je n'arrive toujours pas à savoir ou je mets ma parenthese si tu peux me poster la correction car la je suis vraiment perdu et je ne comprend plus rien


<?php

    // déclaration de quelques variables
    $host = "xxx";
    $user = "xxx";
    $pass = "";
    $bdd = "xxx";
    $table = "xxx_xxx";

 // connection avec MySQL
    @mysql_connect($host, $user, $pass) or die("Impossible de se connecter à la base de données"); // Le @ indique à php de ne pas afficher de message d'erreur
    @mysql_select_db($bdd) or die("Impossible de se connecter à la base de données");


 $titre = addslashes($_POST['titre']);
 $description = addslashes($_POST['description']);
 $utilisateur = $_POST['utilisateur'];
 $probleme = $_POST['probleme'];




    // affichage sélection
 $sql = "INSERT INTO " . $table . "(titre, description, utilisateur, probleme) VALUES('" . $titre . "','" . $description . "','" . $utilisateur . "',";
 if (!empty($probleme)) {
     foreach($probleme as $cle => $valeur) {
         $sql .= "'".$valeur."' ";
     }
 }
 echo $sql;
 $sql = substr($sql, 0, -2);
// on execute
mysql_query($sql);
 $res = mysql_query($sql);



    // stockage dans la bdd




    // déconnection avec MySQL
    mysql_close();

 echo "Sauvegarde réussite";

     ?>

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

15 sept. 2005, 15:32

la parenthèse se met à la fin
// affichage sélection
$sql = "INSERT INTO " . $table . "(titre, description, utilisateur, probleme) VALUES('" . $titre . "','" . $description . "','" . $utilisateur . "',";
if (!empty($probleme)) {
     foreach($probleme as $cle => $valeur) {
         $sql .= "'".$valeur."' ";
     }
}
$sql = substr($sql, 0, -2);
// on rajoute une parenthèse
$sql .= ')';
echo $sql;
mais là, c'est tjrs la même chose, tu crées directement la requête, comme si chaque valeur allait dans une colonne distincte
mais tu ne les concatènes pas ensemble

yola26
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 15:50

bon jvé me renseigner sur la facon de concatenes, jte remercie de l'aide fourni jvé essayer de me débrouiller pour pa te déranger de nouveau :D

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

15 sept. 2005, 16:24

tu ne me déranges pas, mais tu as déjà un exemple de concaténation ici dans la boucle

.= est une concaténation

sauf qu'ici tu concatènes les valeurs en les séparant par des ' et des ,
ce qui fait que ta requête SQL sera fausse
il faudrait n'en faire qu'une seule chaine, en séparant les valeurs par des virgules, et en entourant toute la chaine par des '

pour l'instant tu as :
'val1', 'val2', 'val3'

et il te faudrait, pour tout mettre dans le même champ:
'val1, val2, val3'

yola26
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 16:34

oki si ca marche jte fé un gro post de remerciement, des moments le php cé vraiment prise de tete lol mais on aime ca :D

yola26
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 17:25

ca y é ca marche enfin !!!!! cé pa trop tot !

bon je poste mon code manquant :
// affichage sélection
$sql = "INSERT INTO " . $table . "(titre, description, utilisateur, probleme) VALUES('" . $titre . "','" . $description . "','" . $utilisateur . "','";
if (!empty($probleme)) {
     foreach($probleme as $cle => $valeur) {
         $sql .= "".$valeur.", ";

     }
}

$sql = substr($sql, 0, -2);

// on rajoute une parenthèse

$sql .= '';
$sql .="')";
echo $sql;



mysql_query($sql);
et un grand merci à toi ouckileou d'avoir pris le temps de nous expliquer même si tout nous as fait chercher c'est une bonne chose car tu nous as orienté de façon à ce que l'on se creuse les menages pour trouver le résultat final par nous même ! Congratulations :wink:

Alexdu62
Invité n'ayant pas de compte PHPfrance

29 janv. 2009, 02:45

Bonsoir à tous :)

Désolé de déterrer un si vieux post, mais j'ai un petit souci.

Je réalise un questionnaire, auquel il y aura plusieurs questions à choix multiples.

J'ai donc suivi les instructions de ce topic et ca fonctionne :)
La ou ca devient compliqué et que je me heurte à un pb, c'est dès que je veux généralisé le code pour d'autres questions :s

J'ai fait ceci, mais ca ne marche pas :-/

Code : Tout sélectionner

<? @include("bdd.php"); // affichage sélection $sql = "INSERT INTO nightfly_sondage (Q1, Q2, Q3) VALUES('".$Q1."','"; if (!empty($Q2)) { foreach($Q2 as $cle => $valeur) { $sql .= "".$valeur.", "; } if (!empty($Q3)) { foreach($Q3 as $cle => $valeur) { $sql .= "".$valeur.", "; } } } $sql = substr($sql, 0, -2); // on rajoute une parenthèse $sql .= ''; $sql .="')"; echo $sql; mysql_query($sql); ?>
Merci d'avance pour l'aide :)