Page 1 sur 2
Aide pour requete basique
Posté : 04 mai 2011, 11:56
par Jonathan
Bonjour,
J'ai une question qui semblera probablement toute bête, mais étant donné que je n'y connais rien, merci de ne pas m'assassiner
J'ai une table qui s'appelle
les$formations$par$date, une autre qui s'appelle
les$dates, et une autre qui s'appelle
les$formations. Voici leur contenu :
les$formations$par$date :
id
FK_les$formations
FK_les$dates
nombre$de$place
les$dates :
num
date$de$debut
date$de$fin
periode
les$formations :
num
prerequis
libellé$de$la$session
libellé$de$la$formation
description$de$la$formation
FK_les_sessions
Ma question est la suivante :
Comment faire pour faire apparaître une phrase du genre : "La formation que vous avez choisi débutera le
date$de$debut" ???
Re: Aide pour requete basique
Posté : 04 mai 2011, 12:38
par misterflo
Salut,
c'est quoi ces
$ qui trainent de partout ?
Le gros problème ici c'est qu'on ne sait pas assez de chose sur l'utilisation de ta requête, la je pourrai te dire que la requête serait :
$req = $bdd->prepare('SELECT date$de$debut FROM les$dates');
$req->execute();
$donnees = $req->fetch();
echo "La formation que vous avez choisi débutera le {$donnees['date$de$debut']}";
Le gros problème, le
echo n'affichera que la première valeur qu'il aura trouvé dans la
bdd, tu ne sais pas pour qui est cette date etc. (ce sera la même date pour tous les utilisateurs !)
Je pense qu'il y a nécessité d'apprendre les bases de SQL. (ce n'est pas un mal, on a tous débuté un jour

)
Tu trouveras ton bonheur ici :
http://www.siteduzero.com/tutoriel-3-14 ... mysql.html
Re: Aide pour requete basique
Posté : 04 mai 2011, 15:07
par Jonathan
Merci de ton aide ! Oui en effet, apprendre les bases serait pour ainsi dire un bon début... Je m'y mettrai à l'occasion.
En fait moi je veux afficher cette fameuse
date$de$debut, mais en passant par la table
les$formations$par$date, afin d'afficher la date de la formation en question, et non une date par défaut qui sera erronée. Il faudrait donc une jointure, que je n'arrive pas à écrire correctement...
PS : "Ces
$ qui traînent partout" m'ont aussi perturbé ! Je travaille sur une page d'une autre personne, qui préfère visiblement les "
$" aux "
_"

Re: Aide pour requete basique
Posté : 04 mai 2011, 15:51
par Mazarini
Bonjour,
Les $ risque de poser des problèmes dans PHP à moins que tu fasses très attention. En particulier, il ne faudra jamais mettre tes noms de table et tes noms de colonnes entre double quote. Personnellement, j'évite aussi d'utiliser des accents et tout autre caractère spécial.
$sql = 'select date$de$debut from les$formations$par$date where...';
$req = mysql_query($sql);
$row = mysql_fetch_array($req);
$date = $row['date$de$debut'];
Voilà pour le principe, mais il faudra ajouter quelques contrôles
Re: Aide pour requete basique
Posté : 04 mai 2011, 17:58
par Jonathan
Bonjour
Mazarini,
C'est justement pour la jointure, après le
where, que j'ai du mal... Peux-tu m'aiguiller ?

Re: Aide pour requete basique
Posté : 05 mai 2011, 12:23
par Jonathan
Help !
Re: Aide pour requete basique
Posté : 05 mai 2011, 22:33
par Ryle
En fait, ta requête doit interroger les trois tables en spécifiant comment les enregistrements sont reliés d'une table à l'autre :
SELECT ...
FROM table1, table2, table3
WHERE table1.champA = table2.champZ
AND table2.champY = table3.champQuiVaBien
La question est de savoir quelles sont les colonnes qui doivent correspondre entre tes tables...
A vu de nez, je dirais que les$formations$par$date.FK_les$formations doit faire référence à les$formations.num, et de la même manière les$formations$par$date.FK_les$dates doit référencer les$dates.num...
Et par contre, je rejoint misterflo et Mazarini et te recommande fortement de passer un peu de temps à renommer tes tables et des champs (et à modifier ton code pour qu'il corresponde) ... c'est une après midi de perdu, mais c'est un confort non négligeable que tu peux y gagner (de même que tout ceux qui auront la joie de reprendre ce code après toi

)
Re: Aide pour requete basique
Posté : 06 mai 2011, 11:38
par Jonathan
Bonjour,
J'ai fait ma jointure, mais je rencontre désormais un nouveau problème. Quelqu'un pourrait me dire pourquoi le code suivant ne fonctionne pas ??! (
Parse error: syntax error, unexpected T_VARIABLE...)
if(isset($_GET['date'])){
$Sql = 'select date$de$debut from les$formations$par$dates lfpd, les$dates ld, les$formations lf
where lfpd.FK_Les$formations = lf.Num
and lfpd.FK_Les$dates = ld.Num'
$Req = mysql_query($sql) or die('Erreur SQL !<br>'.$Sql.'<br>'.mysql_error());
$Row = mysql_fetch_array($Req);
$date = $Row['date$de$debut'];
}
Re: Aide pour requete basique
Posté : 06 mai 2011, 11:52
par Mazarini
Bonjour,
Il manque un ; en fin de ligne de $sql =...
De plus, il faut mettre les instruction sur 1 ligne.
J'ai un doute, car tu ne précise pas de critère dans ton select. Tu lis donc toute la table.
Re: Aide pour requete basique
Posté : 06 mai 2011, 11:53
par moogli
Tu a oublié le ; a la fin de la declaration de $Sql
Quand tu lis le message d'erreur tu trouve le numéro de ligne qui pose probleme le 3/4 du temps tu regarde la ligne du dessus et tu Trouve le probleme
@+
Re: Aide pour requete basique
Posté : 06 mai 2011, 15:23
par Jonathan
En effet, merci moogli !
Par contre j'ai un nouveau problème : Quand je teste, j'obtiens un message d'erreur : "Query was empty". Une idée ?
Re: Aide pour requete basique
Posté : 06 mai 2011, 16:18
par Mazarini
Bonjour,
$Sql dans un cas et $sql dans un autre. c'est une cause possible.
Edit : ajoutes error_reporting(E_ALL); en début de script pour avoir un message d'erreur en cas de faute de frappe sur un nom de variable.
Re: Aide pour requete basique
Posté : 06 mai 2011, 16:30
par Jonathan
Super, tu avais raison. Encore une question, avec le code suivant :
if(isset($_GET['date'])){
$Sql = 'select Date$de$début from Les$dates ld, Les$formations$par$dates lfpd, Les$formations lf
where lfpd.Les$formations = lf.Num
and lfpd.FK_Les$dates= ld.Num';
$Req = mysql_query($Sql) or die('Erreur SQL...<br>'.$Sql.'<br>'.mysql_error());
$Row = mysql_fetch_array($Req);
$date = $Row['Date$de$début'];
echo 'la formation aura lieu le $date';
}
J'obtiens :
"la formation aura lieu le $date"
Alors que j'aimerais évidemment obtenir une date à la place de
$date...
EDIT : Merci pour l'astuce, je ne connaissais pas
Re: Aide pour requete basique
Posté : 06 mai 2011, 16:38
par moogli
il s'agit d'un problème de
concaténation
je te conseil de lire les tutos de bases ça ira plus vite
@+
Re: Aide pour requete basique
Posté : 06 mai 2011, 16:44
par Jonathan
En effet j'ai compris mon erreur en 5 secondes. Merci à tous !