Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/08/2006, 09h33   #1
Membre à l'essai
 
Avatar de bogsy15
 
Inscription : mai 2006
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 147
Points : 24
Points : 24
Par défaut [SQL] Récupérer plusieurs valeurs

Bonjour,

J'ai un formulaire dans lequel se trouve des cases à cocher et des champs de texte. Ce formulaire sert à envoyer les valeurs des champs dans une base de données.

Le problème vient de la récupération des valeurs venant des checkbox.

Si une seule case est coché ca marche bien, la valeur est bien enregistrée dans la base de données.
Par contre si je cohe plusieurs cases, alors la valeur suivante écrase à chaque fois la valeur précédente. Donc je me retrouve à chaque fois avec la dernière valeur cochée.

Pour vous aidez, voici le code en question :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
<form  method="POST" action="index.php?page=declaration/rendu">	
		<fieldset style="width:400px;"><legend>Détail de la non-conformité</legend>
				<input type="checkbox" name="langage[]" value="Tube manquant">Tube manquant<br>                        
				<input type="checkbox" name="langage[]" value="Tube cassé">Tube Cassé<br>
		</fieldset>
<br><br><center><input type="submit" value="Enregistrer" name="envoyer"></center>	
</form>
 
 
$tabLangages = (isset($_POST['langage']))?$_POST['langage']:null;
 
if (!empty($tabLangages)) 
{
    foreach($tabLangages as $valeur) 
	{
        $rep=$valeur;	
    }
	$sql2 = "INSERT INTO patient (option) VALUES('$rep')";
	mysql_query($sql2) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
}
toute aide sera la bienvenue. Merci d'avance.
bogsy15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 09h54   #2
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
C'est logique tu fais ton INSERT en dehors de ta boucle foreach donc seule la dernière valeur est prise en compte...
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 09h59   #3
Invité régulier
 
Inscription : juillet 2006
Messages : 26
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 26
Points : 5
Points : 5
en fait, tu peux faire une sorte de compteur comme ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
 
$cnt1 = count($langage);
     if ($cnt1 == 0) {
            $langage_tube_manquant = "";
$langage_tube_casse= "";                                                                                 } else {
           $langage_tube_manquant = "";
           $langage_tube_casse = "";
           for ($i = 0; $i < $cnt1; $i++)
                {
                   if ($langage_tube_manquant[$i] == "Tube manquant") { $langage_tube_manquant ="Tube manquant"; }
                   if ($langage_tube_casse[$i] == "Tube cassé") { $langage_tube_casse ="Tube cassé"; }
                                        }
 
                                }
Et après il ne te reste plus qu'a mettre les deux varaibles dans $tabLangages et si une des deux est vide ben ça ne mettra rien dedans...
J'espère que ça t'aide....
yiuche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 10h12   #4
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Citation:
Envoyé par yiuche
en fait, tu peux faire une sorte de compteur comme ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
 
$cnt1 = count($langage);
     if ($cnt1 == 0) {
            $langage_tube_manquant = "";
$langage_tube_casse= "";                                                                                 } else {
           $langage_tube_manquant = "";
           $langage_tube_casse = "";
           for ($i = 0; $i < $cnt1; $i++)
                {
                   if ($langage_tube_manquant[$i] == "Tube manquant") { $langage_tube_manquant ="Tube manquant"; }
                   if ($langage_tube_casse[$i] == "Tube cassé") { $langage_tube_casse ="Tube cassé"; }
                                        }
 
                                }
Et après il ne te reste plus qu'a mettre les deux varaibles dans $tabLangages et si une des deux est vide ben ça ne mettra rien dedans...
J'espère que ça t'aide....
perso je vois pas le rapport avec le problème mais bon (et puis ton code va pas faire grand chose...)
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 10h15   #5
Membre à l'essai
 
Avatar de bogsy15
 
Inscription : mai 2006
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 147
Points : 24
Points : 24
oui je suis d'accord avec toi jwhite mais je ne veux pas que chaque valeur cochée soit mis dans des enregistrements différents.

Ce qui serai super c'est que dans mon champ option de ma table patient, j'ai un truc du genre :

"tube manquant, tube cassé"


Est-ce possible ?
bogsy15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 10h19   #6
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Citation:
Envoyé par bogsy15
oui je suis d'accord avec toi jwhite mais je ne veux pas que chaque valeur cochée soit mis dans des enregistrements différents.

Ce qui serai super c'est que dans mon champ option de ma table patient, j'ai un truc du genre :

"tube manquant, tube cassé"


Est-ce possible ?
Oui c'est possible mais si tu dois faire ça c'est que tu as probablement un problème de conception au niveau de ta base...
A toi de construire la chaîne à insérer dans ta boucle (tu parcours le tableau de résultat et tu ajoutes les valeurs à chaque fois à ta chaîne) et après tu fais ta requête avec ça.

Dans ton cas , le départ serait ça :

Code :
1
2
3
$rep = "";
foreach($tabLangages as $valeur) 
        $rep .= $valeur . " ";

A adapter selon ce que tu veux (avec les virgules par exemple).
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 10h25   #7
Expert Confirmé
 
Avatar de yiannis
 
Inscription : septembre 2005
Messages : 1 499
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : septembre 2005
Messages : 1 499
Points : 2 563
Points : 2 563
si ton tableau $tabLangages a plusieurs valeurs que tu veut separer avec une virgule, je te conseille d'utiliser la fonction implode() plutot que de parcourir ton tableau avec foreach
Code :
implode(",",$tabLangages)
__________________
"Ce besoin de remords qui précède le Mal, que dis-je ! qui le crée..." E. CIORAN
yiannis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 10h26   #8
Membre à l'essai
 
Avatar de bogsy15
 
Inscription : mai 2006
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 147
Points : 24
Points : 24
merci bcp, ca marche niquel.


P.S : moi aussi j'adore le basket !
bogsy15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 10h29   #9
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Citation:
Envoyé par bogsy15
merci bcp, ca marche niquel.


P.S : moi aussi j'adore le basket !
Bien vu Yannis j'avais jamais pensé à ça c'est l'idéal


Vive le basket (bogsy c'est un mix avec Mugsy Bogues ), t'es d'où ?
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 10h33   #10
Membre à l'essai
 
Avatar de bogsy15
 
Inscription : mai 2006
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 147
Points : 24
Points : 24
ah !!! bien vu !! tu es le premier à trouver d'où venait le pseudo bogsy .

Je suis à coté, je suis dans l'orne.
bogsy15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 10h39   #11
Membre à l'essai
 
Avatar de bogsy15
 
Inscription : mai 2006
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 147
Points : 24
Points : 24
ah !!!! il m'arrive encore une petite misère que je n'avais pas tout a l'heure.

Avec les checkbox, j'ai aussi une zone de texte que j'envoi dans la bdd.
Mais les envois vers la bdd des valeurs des checkbox puis celle de la zone de texte se sont dans 2 enregistrement différents.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
if (!empty($tabLangages) OR !empty($autre)) 
{
	$rep = "";
    foreach($tabLangages as $valeur) 
	{
		$rep .= $valeur . " ";		
    }
	$sql2 = "INSERT INTO patient (date) VALUES('$rep')";
	mysql_query($sql2) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
	$sql = "INSERT INTO patient (essai) VALUES('$autre')";
	mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
}
mysql_close();
bogsy15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 10h39   #12
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Citation:
Envoyé par bogsy15
ah !!! bien vu !! tu es le premier à trouver d'où venait le pseudo bogsy .

Je suis à coté, je suis dans l'orne.
Ah oui en effet, pour le pseudo ça avait fait tilt dès que j'ai vu ton pseudo je sais pas pourquoi , si d'aventure tu venais voir un match du MSB à Antarès...
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 10h40   #13
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Citation:
Envoyé par bogsy15
ah !!!! il m'arrive encore une petite misère que je n'avais pas tout a l'heure.

Avec les checkbox, j'ai aussi une zone de texte que j'envoi dans la bdd.
Mais les envois vers la bdd des valeurs des checkbox puis celle de la zone de texte se sont dans 2 enregistrement différents.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
if (!empty($tabLangages) OR !empty($autre)) 
{
	$rep = "";
    foreach($tabLangages as $valeur) 
	{
		$rep .= $valeur . " ";		
    }
	$sql2 = "INSERT INTO patient (date) VALUES('$rep')";
	mysql_query($sql2) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
	$sql = "INSERT INTO patient (essai) VALUES('$autre')";
	mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
}
mysql_close();
Il faut tout mettre dans le même INSERT nan

Code :
1
2
$sql = "INSERT INTO patient (essai, date) VALUES('$autre', '$rep')";
	mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 10h42   #14
Membre à l'essai
 
Avatar de bogsy15
 
Inscription : mai 2006
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 147
Points : 24
Points : 24
bah cette année je part faire ma licence pro au mans ... donc .....
bogsy15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 10h46   #15
Membre à l'essai
 
Avatar de bogsy15
 
Inscription : mai 2006
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 147
Points : 24
Points : 24
ouai c'est bon ça marche, je c'est pas pourquoi j'ai mis ca dans 2 requête différentes. Merci
bogsy15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h28.


 
 
 
 
Partenaires

Hébergement Web