IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Récupérer plusieurs valeurs


Sujet :

PHP & Base de données

  1. #1
    Membre du Club Avatar de bogsy15
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Points : 53
    Points
    53
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    C'est logique tu fais ton INSERT en dehors de ta boucle foreach donc seule la dernière valeur est prise en compte...

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    en fait, tu peux faire une sorte de compteur comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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....

  4. #4
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Citation Envoyé par yiuche
    en fait, tu peux faire une sorte de compteur comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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...)

  5. #5
    Membre du Club Avatar de bogsy15
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Points : 53
    Points
    53
    Par défaut
    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 ?

  6. #6
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $rep = "";
    foreach($tabLangages as $valeur) 
            $rep .= $valeur . " ";

    A adapter selon ce que tu veux (avec les virgules par exemple).

  7. #7
    Membre émérite
    Avatar de yiannis
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 494
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 494
    Points : 2 791
    Points
    2 791
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    implode(",",$tabLangages)

  8. #8
    Membre du Club Avatar de bogsy15
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Points : 53
    Points
    53
    Par défaut
    merci bcp, ca marche niquel.


    P.S : moi aussi j'adore le basket !

  9. #9
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    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ù ?

  10. #10
    Membre du Club Avatar de bogsy15
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Points : 53
    Points
    53
    Par défaut
    ah !!! bien vu !! tu es le premier à trouver d'où venait le pseudo bogsy .

    Je suis à coté, je suis dans l'orne.

  11. #11
    Membre du Club Avatar de bogsy15
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Points : 53
    Points
    53
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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();

  12. #12
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    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...

  13. #13
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = "INSERT INTO patient (essai, date) VALUES('$autre', '$rep')";
    	mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

  14. #14
    Membre du Club Avatar de bogsy15
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Points : 53
    Points
    53
    Par défaut
    bah cette année je part faire ma licence pro au mans ... donc .....

  15. #15
    Membre du Club Avatar de bogsy15
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Points : 53
    Points
    53
    Par défaut
    ouai c'est bon ça marche, je c'est pas pourquoi j'ai mis ca dans 2 requête différentes. Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer plusieurs valeurs
    Par loukoum82 dans le forum SQL
    Réponses: 3
    Dernier message: 21/09/2007, 16h07
  2. récupérer plusieurs valeurs dans un champ hidden
    Par karimphp dans le forum Langage
    Réponses: 3
    Dernier message: 07/12/2006, 17h13
  3. Requête SQL : récupérer la valeur max
    Par Rodie dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 23/07/2006, 11h28
  4. Réponses: 16
    Dernier message: 19/07/2006, 00h16
  5. [SQL] Récupérer plusieurs lignes spécifiques d'une table
    Par Anduriel dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/04/2006, 19h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo