Problèmes de jointure

Résolu/Fermé
Manover - 15 oct. 2014 à 14:38
 Manover - 18 oct. 2014 à 11:19
Bonjour,

Je développe actuellement quelques pages web avec php pour gérer des sanctions dans un collège. Mais je bloque sur une jointure et je ne trouve pas l'erreur peux être qu'un regard neuf me sauvera :)

Je n'ai pas de message d'erreur et quand je tape mon "SELECT" dans "sql" ça fonctionne ...

Voici mon code:
<?php
if (isset($_GET['incident'])) {
	$_GET['incident'] = htmlspecialchars($_GET['incident']);
	echo $_GET['incident'];
	echo '<table>';
	$ficheincident = $bdd -> prepare('SELECT e.Nom, e.Prenom, e.Division, ie.DteEvenements, pe.NomPersonnel, pe.PrenomPersonnel, pe.StatutPersonnel
	    						 FROM IncidentsEleves AS ie
	    						 LEFT JOIN Incidents AS i ON ie.IdIncidents = i.IdIncidents
	    						 LEFT JOIN Eleves AS e ON ie.IdEleves = e.IdEleves
	    						 LEFT JOIN Personnels AS pe ON ie.IdPersonnels = pe.IdPersonnels
	    						 LEFT JOIN Punitions AS pu ON ie.IdPunitions = pu.IdPunitions
	    						 LEFT JOIN Sanctions AS s ON ie.IdSanctions = s.IdSanctions
								 WHERE i.NomIncident = :fiche
	    						 ORDER BY DteEvenements');
	$ficheincident -> execute(array('fiche' => $_GET['incident']));
	while ($ficheincidentdonnees = $ficheincident -> fetch()) {
		echo '<tr>';
		echo '<td>' . $ficheincidentdonnees[e . Nom] . '</td>';
		echo '<td>' . $ficheincidentdonnees[e . Prenom] . '</td>';
		echo '<td>' . $ficheincidentdonnees[e . Division] . '</td>';
		echo '<td>' . $ficheincidentdonnees[ie . DteEvenements] . '</td>';
		echo '<td>' . $ficheincidentdonnees[pe . NomPersonnel] . '</td>';
		echo '<td>' . $ficheincidentdonnees[pe . PrenomPersonnel] . '</td>';
		echo '<td>' . $ficheincidentdonnees[pe . StatusPersonnel] . '</td>';
		echo '</tr>';
	}
	$ficheincident -> closeCursor();
	echo '<table>';

} else {
	echo '</p><a href="index.php?page=ajouter&incident=incident">Ajouter  un type d\'incident</a></p>';
	echo '<table>';
	$incident = $bdd -> query('SELECT NomIncident FROM Incidents ORDER BY NomIncident');
	while ($incidentdonnees = $incident -> fetch()) {
		echo '<tr>';
		echo '<td><a href="index.php?page=incidents&incident=' . $incidentdonnees[NomIncident] . '">' . utf8_encode($incidentdonnees[NomIncident]) . '</a></td>';
		echo '<td><a href="index.php?page=modifier&incident=' . $incidentdonnees[NomIncident] . '">Modifier</a></td>';
		echo '<td><a href="index.php?page=supprimer&incident=' . $incidentdonnees[NomIncident] . '">Supprimer</a></td>';
		echo '</tr>';
	}
	$incident -> closeCursor();
	echo '<table>';
}
?>


J'ai 6 tables:
-Eleves avec les champs:
-IdEleves
-Nom
-Prenom
-Division

-Personnels avec les champs:
-IdPersonnels
-NomPersonnel
-PrenomPersonnel
-StatusPersonnel

-Incidents avec les champs:
-IdIncidents
-NomIncident

-Punitions avec les champs:
-IdPunitions
-Punition

-Sanction avec les champs:
-IdSanctions
-NomSanctions
-IncidentsEleves avec les champs:
-IdIncidentsEleves
-IdEleves
-DteEvenements
-IdPersonnels
-IdIncidents
-IdPunitions
-IdSanctions

3 réponses

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
16 oct. 2014 à 13:14
Bonjour,

À première vue, il me semble qu'il manque des simples cotes autour de ta variable :fiche dans ta requête.

Xavier
0
Utilisateur anonyme
16 oct. 2014 à 13:27
Bonjour

Dans une requête préparée, il ne faut pas de quotes autour des marqueurs comme :fiche.
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
16 oct. 2014 à 15:37
Même si on ne lui dit nulle part que le paramètre est de type string ?
0
Utilisateur anonyme
16 oct. 2014 à 15:46
Même !

Tu as déjà utilisé les requêtes préparées ?
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
16 oct. 2014 à 15:52
Oui mais pas celles-là : j'utilise un framework perso...
0
Utilisateur anonyme
16 oct. 2014 à 16:07
Ah bon ? Il existe plusieurs sortes de requêtes préparées ?
0
Bonjour

$ficheincidentdonnees[e . Nom]

Si tu n'as pas défini e et Nom comme des constantes en PHP, l'expression e . Nom est indéterminée. Je suppose que tu voulais écrire ['e.Nom'], avec des apostrophes, et sans espaces autour du point.

Mais avant tout, qu'est-ce qui se passe ? Tu ne le dis pas. Entres-tu dans le while ?
0
Bonjour,

Désolé de pas avoir répondu avant je n'ai pas trop eu le temps.
Après une nuit de repos, retour sur mon code et la je me suis rendu compte que j'avais oublié les apostrophes comme la dit "le père".

ps: les espaces dans
$ficheincidentdonnees[e . Nom]
ce sont rajouté sur ccm.

Merci pour votre aide.
0