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 07/08/2007, 09h53   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2007
Messages : 60
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Yvelines (Île de France)

Informations forums :
Inscription : juillet 2007
Messages : 60
Points : 13
Points : 13
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
laetiheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 10h03   #2
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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 :
SELECT pac, client, nb_bulletins FROM matable WHERE pac = xxx
- sinon il a choisi le nom d'un client:
Code sql :
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.
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 10h18   #3
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 451
Points : 5 451
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...
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 10h33   #4
Candidat au titre de Membre du Club
 
Inscription : juillet 2007
Messages : 60
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Yvelines (Île de France)

Informations forums :
Inscription : juillet 2007
Messages : 60
Points : 13
Points : 13
Merci pour vos reponses

Alors voici le code de ma page :

Code :
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 :
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 :

Citation:
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 :

Citation:
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...
laetiheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 10h50   #5
Membre Expert
 
Inscription : août 2002
Messages : 1 036
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 1 036
Points : 1 166
Points : 1 166
Commence par lire ceci :
http://www.php.net/manual/fr/function.mysql-query.php
et tu trouveras ton erreur.
jeca est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 10h57   #6
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
En me basant sur ton code:
Code :
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 :
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];
               }		
	};
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 11h02   #7
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
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 :
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];
  }
}
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 11h04   #8
Candidat au titre de Membre du Club
 
Inscription : juillet 2007
Messages : 60
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Yvelines (Île de France)

Informations forums :
Inscription : juillet 2007
Messages : 60
Points : 13
Points : 13
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!!)
laetiheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 11h11   #9
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
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 :
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'"
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 11h20   #10
Candidat au titre de Membre du Club
 
Inscription : juillet 2007
Messages : 60
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Yvelines (Île de France)

Informations forums :
Inscription : juillet 2007
Messages : 60
Points : 13
Points : 13
Alors j'ai fais tes modifs

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

Citation:
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 :

Citation:
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
laetiheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 14h08   #11
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
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.
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2007, 09h26   #12
Candidat au titre de Membre du Club
 
Inscription : juillet 2007
Messages : 60
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Yvelines (Île de France)

Informations forums :
Inscription : juillet 2007
Messages : 60
Points : 13
Points : 13
D'accord j'y penserai merci encore!!
laetiheu 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 08h44.


 
 
 
 
Partenaires

Hébergement Web