Page 1 sur 2
encore une histoire de checkbox à choix multiple
Posté : 15 sept. 2005, 14:16
par yola26
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();
?>
Posté : 15 sept. 2005, 14:27
par yola26
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);
Posté : 15 sept. 2005, 14:35
par ouckileou
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
Posté : 15 sept. 2005, 14:46
par yola26
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;
Posté : 15 sept. 2005, 14:48
par yola26
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
Posté : 15 sept. 2005, 14:55
par ouckileou
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
Posté : 15 sept. 2005, 15:02
par yola26
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 ?
Posté : 15 sept. 2005, 15:14
par ouckileou
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
Posté : 15 sept. 2005, 15:28
par yola26
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";
?>
Posté : 15 sept. 2005, 15:32
par ouckileou
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
Posté : 15 sept. 2005, 15:50
par yola26
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

Posté : 15 sept. 2005, 16:24
par ouckileou
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'
Posté : 15 sept. 2005, 16:34
par yola26
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

Posté : 15 sept. 2005, 17:25
par yola26
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

Posté : 29 janv. 2009, 02:45
par Alexdu62
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
