Aide pour requete basique

Eléphant du PHP | 142 Messages

04 mai 2011, 11:56

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

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" ???

Eléphant du PHP | 241 Messages

04 mai 2011, 12:38

Salut,

c'est quoi ces $ qui trainent de partout ? :mrgreen:

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 :mrgreen: )
Tu trouveras ton bonheur ici :
http://www.siteduzero.com/tutoriel-3-14 ... mysql.html

Eléphant du PHP | 142 Messages

04 mai 2011, 15:07

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 "_" #-o

ViPHP
ViPHP | 2577 Messages

04 mai 2011, 15:51

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

Eléphant du PHP | 142 Messages

04 mai 2011, 17:58

Bonjour Mazarini,

C'est justement pour la jointure, après le where, que j'ai du mal... Peux-tu m'aiguiller ? 8-|

Eléphant du PHP | 142 Messages

05 mai 2011, 12:23

Help !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 mai 2011, 22:33

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 ;))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 142 Messages

06 mai 2011, 11:38

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'];
}

ViPHP
ViPHP | 2577 Messages

06 mai 2011, 11:52

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.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 mai 2011, 11:53

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 ;)


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 142 Messages

06 mai 2011, 15:23

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 ?

ViPHP
ViPHP | 2577 Messages

06 mai 2011, 16:18

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.

Eléphant du PHP | 142 Messages

06 mai 2011, 16:30

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 mai 2011, 16:38

il s'agit d'un problème de concaténation

je te conseil de lire les tutos de bases ça ira plus vite ;)


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 142 Messages

06 mai 2011, 16:44

En effet j'ai compris mon erreur en 5 secondes. Merci à tous !