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] Pb liste deroulante et champ texte lié [Fait]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 60
    Points : 30
    Points
    30
    Par défaut [SQL] Pb liste deroulante et champ texte lié
    Bonjour!!

    Voilà la situation :

    J'ai une table mysql avec trois colonnes qui m'interesse plus particulièrement : 'pac', 'client' et 'nb_bulletins'.

    J'ai un formulaire où l'utilisateur peut : soit entrer dans un champ texte le numéro de pac, soit sélectionné dans une liste déroulante le nom de client souhaité (liste déroulante créer grâce à la base de donnée (champ 'client') via une requete sql).

    Je souhaite alors, lors de la page d'affichage des resultats, que les deux choix soit liés, pour que si l'utilisateur entre que le numéro du 'pac', le nom du client correspondant s'affiche ainsi que le champ correspond pour la colonne 'nb_bulletins'...
    Et inversement lorsque l'utilisateur sélectionne juste un nom de client dans la liste déroulante, que sur la page d'affichage des resultats le numero de 'pac' et le 'nb_bulletins' lié au nom du client s'affiche...

    J'espere avoir été assez clair dans ma description de mon problème, je ne sais pas du tout vers quoi aller et j'aimerai éviter le javascript car inconnu pour moi (je suis une débutante en php aussi)

    Merci de votre aide

    Laeti

  2. #2
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Je ne suis pas certain d'avoir tout compris, surtout ce que tu entends par le fait de lier des colonnes ?

    Pour moi tu vas faire deux types de requetes SQL selon ce qu'a choisi l'utilisateur.
    - si l'utilisateur a tapé un numéro:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT pac, client, nb_bulletins FROM matable WHERE pac = xxx
    - sinon il a choisi le nom d'un client:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT pac, client, nb_bulletins FROM matable WHERE client = 'yyy'

    tu vas donc récupérer les résultats liés entre eux, c'est le principe de ta table justement.

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Bonjour

    Je subodore une histoire de table liées et de jointures... On peut avoir la structure des tables ? et éventuellement un bout du code actuel...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    Merci pour vos reponses

    Alors voici le code de ma page :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
     
    <?php
    	include ("AccueilPAC.php");
    	//include ("connexion.inc.php");
     
    	$serveur = "localhost";
    	$utilisateur = "root";
    	$mot_de_passe = "";
    	$nom_de_la_base = "cartes";
     
    	mysql_connect($serveur,$utilisateur,$mot_de_passe) 
    			or die("Impossible de se connecter à la base de données"); 
    	mysql_select_db($nom_de_la_base);
     
    	$pac=$_POST['pac'];	
    	$client=$_POST['client'];
     
    	if($pac!=null){
    		$resultatpac=mysql_query("select pac,client,nb_bulletins from pac where pac=$pac");
    		$client='client';
    		$nb_bulletins='nb_bulletins';
    	}
    	else{
    		$resultatclient=mysql_query("SELECT pac, client, nb_bulletins FROM pac WHERE client = $client");
    		$pac='pac';
    		$nb_bulletins='nb_bulletins';
    	};
     
    	if(($_POST['pac']==NULL) and ($_POST['client']=='Choisir le nom du client...')){
    		echo"Le champs correspondant au numero de pac n'est pas rempli et le nom du
    				client n'est pas sélectionné... <br><br>";
    	}
    	else{
    		echo" Choix du PAC n° : $pac <br>";
    		echo" Client : $client <br>";
    		echo" Nombre de bulletins de paie : $nb_bulletins <br>";
    	};
    ?>
    Et voici la structure de la table concerné :

    Code SQL : 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
     
     
    CREATE TABLE pac (
      checke varchar(1),
      pac varchar(10),   
      client varchar(150),
      segment_origine varchar(2),
      portef varchar(2),  
      responsable_PortefeuilleDA varchar(75),
      RE varchar(75),
      Agence_Ch varchar(5), 
      Agence_Ch_BO varchar(2),  
      Agence_Ca varchar(5),
      Mod_zpp varchar(6),
      nb_bulletins varchar(6),
      PRIMARY KEY  (pac),
        KEY pac (pac))
      TYPE=MyISAM;

    Je les modifier depuis mon premier message, et j'ai un problème au niveau de mes variables entre autres.. par exemple lorsque je rentre un numero de pac (ici 007077 qui est present dans la bdd) il m'affiche cela dans la page de resultat :

    Choix du PAC n° : 007077
    Client : client
    Nombre de bulletins de paie : nb_bulletins
    et lorsque je choisi un nom de client (par exemple ADP-GSI France), il me renvoi ceci :

    Choix du PAC n° : pac
    Client : ADP-GSI France
    Nombre de bulletins de paie : nb_bulletins
    Ca parait peut etre enfantin, ca se trouve c'est juste une erreur bete (je suis peut etre mal reveillé) mais ca marche pas et ca m'enerve...!!

    Si vous voyez comment résoudre mon probleme...

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Commence par lire ceci :
    http://www.php.net/manual/fr/function.mysql-query.php
    et tu trouveras ton erreur.

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    En me basant sur ton code:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    <?php
    	include ("AccueilPAC.php");
    	//include ("connexion.inc.php");
     
    	$serveur = "localhost";
    	$utilisateur = "root";
    	$mot_de_passe = "";
    	$nom_de_la_base = "cartes";
     
    	mysql_connect($serveur,$utilisateur,$mot_de_passe) 
    			or die("Impossible de se connecter à la base de données"); 
    	mysql_select_db($nom_de_la_base);
     
    	$pac=$_POST['pac'];	
    	$client=$_POST['client'];
     
    	if($pac!=null){
    		$resultatpac=mysql_query("select pac,client,nb_bulletins from pac where pac=$pac");
    		$client='client';
    		$nb_bulletins='nb_bulletins';
    	}
    	else{
    		$resultatclient=mysql_query("SELECT pac, client, nb_bulletins FROM pac WHERE client = $client");
    		$pac='pac';
    		$nb_bulletins='nb_bulletins';
    	};
     
    	if(($_POST['pac']==NULL) and ($_POST['client']=='Choisir le nom du client...')){
    		echo"Le champs correspondant au numero de pac n'est pas rempli et le nom du
    				client n'est pas sélectionné... <br><br>";
    	}
    	else{
    		echo" Choix du PAC n° : $pac <br>";
    		echo" Client : $client <br>";
    		echo" Nombre de bulletins de paie : $nb_bulletins <br>";
    	};
    ?>
    effectivement, il y a un probleme sur le traitement du résultat de tes requetes. Une fois que tu fais un "mysql_query", pour récupérer le résultat, tu ne peux pas faire directement $pac='pac' par exemple.
    En effet, mysql_query renvoit une ressource et non pas un résultat en dur.
    Une fois le mysql_query fait, tu dois récupérer le tableau de résultat par exemple avec un mysql_fetch_assoc, ce qui te donne dans ton code:
    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
     
    if($pac!=null){
    		$resultatpac=mysql_query("select pac,client,nb_bulletins from pac where pac=$pac");
                   if($resultatpac){
                       $tab_result=mysql_fetch_assoc($resultatpac);
                       $client=$tab_result[client];
                       $nb_bulletins=$tab_result[nb_bulletins];
                   }		
     
    	}
    	else{
    		$resultatclient=mysql_query("SELECT pac, client, nb_bulletins FROM pac WHERE client = $client");
                   if($resultatclient){
                       $tab_result=mysql_fetch_assoc($resultatclient);
                       $pac=$tab_result[pac];
                       $nb_bulletins=$tab_result[nb_bulletins];
                   }		
    	};

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    Une petite précision sur ma réponse.
    Si ta requete renvoit plusieurs lignes de résultat ( j'avais présumé que dans ton cas, ta requete ne devrait renvoyer qu'au maximum une ligne), tu dois faire une boucle pour parcourir les résultats de la manière suivante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ressource=mysql_query($requete_plusieurs_resultats);
    if($ressource){
      while($tab_result=mysql_fetch_assoc($ressource)){
        echo $tab_result[client];
      }
    }

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    Merci ca avance un peu plus ...

    Alors j'ai remplacer par ton code, ca ne marche qu'à moitié : Quand je rentre un numero de pac, il me donne les autres renseignements correspondant, mais pour l'inverse ca ne marche pas (quand je sélectionne un nom dans la liste déroulante, il ne m'affiche que le nom du client et rien dautres pour le numero de pac et nb_bulletins)...

    Et oui dans ce cas ca ne renvoi qu'une seule ligne de ma table (sinon c'est pas normal!!)

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    On avance donc déjà un peu ce qui est bien
    Maintenant, pour identifier la source du problème, essaie de remplacer ceci dans ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	$resultatclient=mysql_query("SELECT pac, client, nb_bulletins FROM pac WHERE client = $client");
            echo "requete : SELECT pac, client, nb_bulletins FROM pac WHERE client = $client";
     
                   if($resultatclient){
                       $tab_result=mysql_fetch_assoc($resultatclient);
                       $pac=$tab_result[pac];
                       $nb_bulletins=$tab_result[nb_bulletins];
                   }
    et récupère la requete affiché et exectue la dans phpmyadmin directement par exemple pour voir si la requete est correct et si elle renvoit bien un résultat.
    Attention, je ne sais pas si ca peut jouer, mais en général, on met entre quotes les chaines de caractères dans une requete SQL. Dans ton cas, on aurait ceci;
    "SELECT pac, client, nb_bulletins FROM pac WHERE client = '$client'"

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    Alors j'ai fais tes modifs

    il m'affiche cela dans l'echo de la requête :

    SELECT pac, client, nb_bulletins FROM pac WHERE client = BRITISH AIRWAYS Choix du PAC n° :
    lorsque je la rentre tel quel dans phpmyadmin, il me met cette erreur :

    requête SQL:

    SELECT pac, client, nb_bulletins
    FROM pac
    WHERE client = BRITISH AIRWAYS Choix du PAC n° :
    LIMIT 0 , 30

    MySQL a répondu:

    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AIRWAYS Choix du PAC n° :
    LIMIT 0, 30' at line 1
    J'ai ensuite mis la modif des quotes autour de $client... Et ca marche!!!

    Ce qui est bizarre c'est qu'autour de celle du pac, il n'y en a pas et ca marche aussi... enfin bon du moment que tout marche ca me va

    Merci beaucoup!!!!!

    Laeti

  11. #11
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    des que tu as des valeurs varchar ou chaine de caractères , mets des quotes autour de la variable. Fais le tout le temps, tu éviteras ce genre de déconvenues. Avec pac, tu n'as pas eu d'erreurs parce que probablement que ta variable pac était toujours un seul mot sans espace et sans mot réservé de mysql.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    D'accord j'y penserai merci encore!!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/03/2010, 08h14
  2. Liste deroulante et champ de texte grisé
    Par amine_en_france dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/12/2007, 12h23
  3. [AJAX] Lier une liste déroulant à un champ texte
    Par arnaudperfect dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 13/04/2007, 14h50
  4. alimenter liste deroulante avec champs texte
    Par logone dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 26/05/2006, 11h53
  5. Liste modifiable vers champ texte ou mémo
    Par Michel DEMANET dans le forum Access
    Réponses: 14
    Dernier message: 21/01/2006, 09h25

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