Page 1 sur 1

Requêtes PDO & listes déroulantes appelant plusieurs tables

Posté : 14 sept. 2013, 23:40
par ionesco
Bonsoir,
J'essaie d'afficher le résultat de listes déroulantes qui sont rattachées à plusieurs bases de données.
Je m'explique.
Page 1 contient le formulaire avec les listes déroulantes:
Dans le form la page de direction affichagePage1 après avoir appuyé sur le bouton "Rechercher"
Niveau seconde, première et terminale
Cours français, anglais, espagnol
département ceux de l'IDF : Hauts-de-Seine, Seine-Saint-Denis, Paris,Seine-et-Marne, Yvelines, Essonne, Val-de-Marne, Val-d'Oise

Mes tables
etablissement
id, categorie, nomEtablissement, region, jauge,departement, nivID

niveaux
id (en A_I)
niveau: seconde, premiere, terminale

cours
id (en A_I)
nom_cours: français, anglais, espagnol

departement
id (en A_I)
nom_depart: Hauts-de-Seine, Seine-Saint-Denis, Paris,Seine-et-Marne, Yvelines, Essonne, Val-de-Marne, Val-d'Oise


Les tables niveaux et departement sont liées à etablissement.
J'ai écrit un code qui crée une jointure entre les tables mais j'ai peut-être une faute de syntaxe ou d'ordre car je n'ai rien en termes de résultats.

Je souhaiterais que dans ma page affichagePage1 s'affiche les éléments sélectionnés dans mes listes déroulantes.
Voici le code de la page affichagePage1:
<?php
require_once('Connex.php');

if(isset($_POST['niveau']) || isset($_POST['cours']) || isset($_POST['departement'])){  //récupération de la page1
	$niveau=$_POST['niveau']; 
	$filiere=$_POST['cours']; 
	$region=$_POST['departement']; 
	
$requete=$b2d->query('SELECT categorie, nomEtablissement,region,jauge, departement nivID FROM etablissement
JOIN niveaux on etablissement.nivID=niveaux.niveau
JOIN  cours on etablissement.categorie=cours.nom_cours
JOIN department on etablissement.departement=departement.nom_depart  
WHERE niveaux.niveau='.$_POST['niveau'].' AND etablissement.cours='.$_POST['cours'].' AND departement.nom_depart='.$_POST['departement'].'');
}
?>
<!DOCTYPE>
<html>
<body>
<table width="95%" cellspacing="2" cellpadding="5" >
			<td id="entete">Nom Etablissement</td>
			<td id="entete">Cours</td>
		        <td id="entete">Région</td>
			
			
			<?php	
				while($affichage=$requete->fetch(PDO::FETCH_OBJ)){
			?>
		
		<tr>
			<td id="body"><?php echo $affichage['nomEtablissement']; ?></td>
			<td id="body"><?php echo $affichage['jauge']; ?></td>
			<td id="body"><?php echo $affichage['departement']; ?></td>
		</tr>
		<?php } ?>
		</table>
</body>
</html>	

Vous remerciant par avance pour vos idées que vous me soumettrez pour m'aider à afficher les résultats.
Cordialement
Ionesco

Re: Requêtes PDO & listes déroulantes appelant plusieurs tab

Posté : 15 sept. 2013, 11:16
par moogli
Salut,

As tu affiché la requête pour la tester dans un client sql ?

Je ne vois pas bien les relations dans ta requêtes c'est un peux étonnant.
C'est des chiffres les infos que tu récupère ?
Sinon la requête n'est pas bonne syntaxiquement.
Utilise la méthode quote pour protéger tes données ;)

@+

Re: Requêtes PDO & listes déroulantes appelant plusieurs tab

Posté : 15 sept. 2013, 14:55
par ionesco
Bonjour,
Moogli: En fait, je n'ai pas de table client car il s'agit en somme d'un annuaire.
Je recense les informations et souhaite les afficher.
J'ai créé une table departement (un peu comme la table code postal).
En fait j'ai des tables liées. Dans ma table Etablissement, departement est rempli par rapport à l'id correspondant de la table departement.
Donc ma démarche est peut-être fausse et ma requête sql erronée.
L'idée est de comprendre comment on affiche les résultats de listes déroulantes. Quelle est la méthode?
Je veux récupérer les informations et non les chiffres. Mais les informations des listes déroulantes ne sont pas affichées, elles agissent comme un filtre et permettent d'afficher les éléments souhaités dans la partie HTML.
PS: Je vais revoir le code et ajouter Quote. Bien noté.
Qu'est-ce qui est faux dans ma requête, que dois-je revoir? les Join?



Modification de ma requête
if(isset($_POST['niveau']) || isset($_POST['cours']) || isset($_POST['departement'])){  //récupération de la page1
        $niveau=$_POST['niveau'];
        $cours=$_POST['cours'];
        $region=$_POST['departement'];
       
$requete=$b2d->query('SELECT e.categorie, e.nomEtablissement,e.region,e.jauge, e.departement,e.nivID FROM etablissement e
JOIN niveaux n ON n.niveau=e.nivID
JOIN cours c ON c.nom_cours=e.categorie
JOIN departement d ON d.nom_depart=e.departement
WHERE n.niveau='.$b2d->quote($niveau).' AND e.cours='.$b2d->quote($cours).' AND d.nom_depart='.$b2d->quote($cours).'');
}
Concrètement je récupère au niveau des variables des isset des chiffres et non des éléments textuels (cf le var_dump($_POST)) et donc quand je les insère dans le where je récupère des chiffres même si j'interroge les tables qui devraient retourner le texte.
Comment faire pour récupérer ces éléments textuels plutôt que chiffrés.
Faut-il que je modifie mes requêtes en page1 et que je les lie à la table établissement comme dans cette page-ci?
Car rien ne s'affiche. A moins que ce ne soit mon $affiche qui ne récupère pas les bons éléments dans mon while?
Je ne sais pas. Je continue à chercher.

Merci par avance
Ionesco

Re: Requêtes PDO & listes déroulantes appelant plusieurs tab

Posté : 16 sept. 2013, 00:49
par ionesco
Bonsoir,
J'ai résolu mon problème en effectuant une requête plus simple sans jointure juste en précisant dans le WHERE les variables récupérées grâce au POST.
Par contre pour un des éléments, j'intègre un lien. Ça fonctionne sauf que lorsque je clique sur le lien qui est un site Internet, j'ai ce message d'erreur : The requested URL /NomDossiers/mesPages/fichierContenantMapage/www.xxxx.fr was not found on this server.
Je ne comprends pas car l'adresse du site est dans ma base de données, dans etablissement. Elle correspond à adresseSite.
Je souhaiterais qu'en cliquant sur le lien je sois redirigé sur le site de l'établissement désigné.
Comment procéder s'il vous plait? Si quelqu'un à une idée.
<td id="body"><a style="text-decoration:none" href="<?php echo $affichage['adresseSite'];?>"><?php echo $affichage['nomEtablissement'];?></a></td>
Je me réponds. En fait il faut ajouter devant l'adresse http://www.lemonde.fr => http://
Je dois mettre à jour ma bdd en ajoutant devant chaque adresse saisie http://
Si quelqu'un a une méthode plus simple, surtout moins longue, je prends.
A l'attention de Moogli: j'ai modifié ma requête en ajoutant quote, ma syntaxe est-elle correcte?
Merci par avance.

Cordialement
Ionesco