L'exploitation de donnée

Mammouth du PHP | 543 Messages

21 juil. 2005, 10:23

il manque un ; apres $data = $req :)
Mais toute facon ce n'est pas comme ca qu'on fait:
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

$concours_mode = null;

// boucle sur les résultats de requêtes
while ($data=mysql_fetch_array($req)) {
   if ($id_concours <> $concours_mode){
   echo ' <i>Nom : '.$data['nom'].'</i><br>';
   echo ' <i>Mois : '.$data['mois'].'</i><br>';
   echo ' <i>Détails : '.$data['dmois'].'</i><br>';
   echo ' <i>Report : '.$data['report'].'</i><br>'; 
   echo ' <i>lien : '.$data['lien'].'</i><br>'; 
   echo ' <i>info : '.$data['info'].'</i><br>';}

   else ($concours_mode = $id_concours){
   echo ' <i>Mode : '.$data['mode'].'</i><br>';}
   }
PS : je ne sais pas ce que représente $id_concours, donc je n'y ai pas touché :)

Eléphant du PHP | 174 Messages

21 juil. 2005, 10:32

J'ai essayé de corrigé mon erreur voir ancien post script

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

21 juil. 2005, 10:36

et tu ne précises toujours pas ce qui ne marche pas correctement

par contre regarde l'algo que je t'avais filé, le else est de trop ici

car tu récupères des lignes comme ceci (a peu de choses près)

Code : Tout sélectionner

id_concours, nom_concours, date_concours, bande, mode
et toi tu ne veux afficher : id_concours, nom_concours, date_concours
que une seule fois pour chaque concours

par contre tu veux afficher bande et mode tout le temps

ce n'est aps ce que tu fais ici ;)

Mammouth du PHP | 543 Messages

21 juil. 2005, 10:38

Ptite optimisation :
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());


// boucle sur les résultats de requêtes
while ($data=mysql_fetch_array($req)) {
   if ($id_concours != NULL){
   echo ' <i>Nom : '.$data['nom'].'</i><br>';
   echo ' <i>Mois : '.$data['mois'].'</i><br>';
   echo ' <i>Détails : '.$data['dmois'].'</i><br>';
   echo ' <i>Report : '.$data['report'].'</i><br>';
   echo ' <i>lien : '.$data['lien'].'</i><br>';
   echo ' <i>info : '.$data['info'].'</i><br>';}

   else {
   echo ' <i>Mode : '.$data['mode'].'</i><br>';}
   }

- Inutile de créer une variable pour null
else ($concours_mode = $id_concours){
- Un teste d'égalité s'effectue avec == voir === dans certains cas, mais pas = qui designe une affectation. De plus, un else ne contient pas de condition, puisqu'il est pas definition le contraire du if.

@+

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

21 juil. 2005, 10:41

Toutes les remarques de raptor sont justes, mais il faudrait quand même que quand tu postes pour qu'on t'aide tu précises ce qui ne marche pas

plutôt qu'on traque tout ce qui nous semble anormal :roll:

édition : non en fait elles ne le sont pas toutes
- Inutile de créer une variable pour null
si, c'est pour initialiser la variable qui contient l'identifiant du concours courant
pour la comparer à l'identifiant de chque ligne de résultat et n'afficher qu'une seule fois les infos d'un concours

il n'y aura jamais NULL dans une ligne de résultat donc ton test n'est plus valable...

Mammouth du PHP | 543 Messages

21 juil. 2005, 10:43

il veut tester notre capacité a deviner le probleme, et d'y trouver une réponse ^^
on pourrait inventer plein de probleme et trouver pleins de solutions pour faire impressionnant :twisted:

Mammouth du PHP | 543 Messages

21 juil. 2005, 10:44

Toutes les remarques de raptor sont justes, mais il faudrait quand même que quand tu postes pour qu'on t'aide tu précises ce qui ne marche pas

plutôt qu'on traque tout ce qui nous semble anormal :roll:

édition : non en fait elles ne le sont pas toutes
- Inutile de créer une variable pour null
si, c'est pour initialiser la variable qui contient l'identifiant du concours courant
pour la comparer à l'identifiant de chque ligne de résultat et n'afficher qu'une seule fois les infos d'un concours

il n'y aura jamais NULL dans une ligne de résultat donc ton test n'est plus valable...
Dans ce cas on fait un test avec un un isset dans la boucle, c'est plus propre :p
Je ne savais pas non plus le but precis du $id_concours :)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

21 juil. 2005, 10:48

Dans ce cas on fait un test avec un un isset dans la boucle, c'est plus propre :p
je ne vois pas ce qu'il y a de sale à initialiser une variable mais bon...

bon pour revenir au sujet : elminio tu pourras reposter ton code en listant ce qui ne va pas après modifications :)

Mammouth du PHP | 543 Messages

21 juil. 2005, 10:50

Non en fait le mot propre etait mal choisi dans ma phrase désolé :)
Je voulais dire que créer des variables vides c'est dommage, enfin c'est un avis perso ca ;)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

21 juil. 2005, 10:53

même si elles ne le restent pas longtemps ?

Mammouth du PHP | 543 Messages

21 juil. 2005, 10:54

C'est discutable ;)
Enfin chacun ca methode de developpement, je suis pas sectaire ;)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

21 juil. 2005, 11:02

ben moi je préfère ça
$id_courant = null;

if ($id_courant != $id) {
	$id_courant = $id;
}
à ça :
if ($id_courant != $id || !isset($id_courant)) {
	$id_courant = $id;
}
un petit test en moins ;) mais bon c'est pas si important en effet et puis ça risque d'embrouiller un peu le débat ;)

Eléphant du PHP | 174 Messages

21 juil. 2005, 11:03

// on se connecte à MySQL
$db = mysql_connect('localhost', 'root', '');

// on sélectionne la base
mysql_select_db('bconcours',$db);

// on crée la requête SQL
$sql = 'SELECT C.nom, C.mois, C. dmois, B.bande, M.mode, C.report, C.lien, C.info
FROM concours C
INNER JOIN concours_bande CB
ON C.id_concours = CB.id_concours
INNER JOIN bandes B
ON CB.id_bande = B.id_bande
INNER JOIN concours_mode CM
ON C.id_concours = CM.id_concours
INNER JOIN modes M
ON CM.id_mode = M.id_mode
ORDER BY C.id_concours';

$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

// boucle sur les résultats de requêtes
while ($data=mysql_fetch_array($req)) {
   if ($id_concours != NULL){
   echo ' <i>Nom : '.$data['nom'].'</i><br>';
   echo ' <i>Mois : '.$data['mois'].'</i><br>';
   echo ' <i>Détails : '.$data['dmois'].'</i><br>';
   echo ' <i>Report : '.$data['report'].'</i><br>';
   echo ' <i>lien : '.$data['lien'].'</i><br>';
   echo ' <i>info : '.$data['info'].'</i><br>';}

   else {
   echo ' <i>Mode : '.$data['mode'].'</i><br>';}
   }

// on ferme la connexion à mysql
mysql_close();
voilà le resultat :

Mode : phonie
Mode : phonie
Mode : phonie
Mode : phonie
Mode : phonie
Mode : phonie
Mode : télégraphie
Mode : télégraphie
Mode : télégraphie
Mode : télégraphie
Mode : télégraphie
Mode : télégraphie
Mode : phonie
Mode : télégraphie
Mode : phonie
Mode : télégraphie
Mode : phonie
Mode : télégraphie
Mode : phonie
Mode : télégraphie
Mode : phonie
Mode : télégraphie
Mode : mode digitaux
Mode : phonie
Modifié en dernier par elminio le 21 juil. 2005, 21:35, modifié 1 fois.

Eléphant du PHP | 174 Messages

21 juil. 2005, 20:52

j'essaye d'avoir ce résultat:

Nom : IARU HF World Championship

Période :
Mois : Juillet
Détails : 2 nd week-end entier, du samedi à 12:00 UTC
au dimanche à 12:00 UTC.

Bande : 160, 80, 40, 20, 15, 10 mètres

Mode : Phonie et Télégraphie

Report :
Société membre IARU
RST + abréviation de la société (ex : 599REF)
Radio Amateur
RST + Zone ITU (ex : 59927)

Lien : http://www.arrl.org/contests/rules/2005/iaru.html

Infos : Aucune

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

21 juil. 2005, 21:25

par contre regarde l'algo que je t'avais filé, le else est de trop ici

car tu récupères des lignes comme ceci (a peu de choses près)

Code : Tout sélectionner

id_concours, nom_concours, date_concours, bande, mode
et toi tu ne veux afficher : id_concours, nom_concours, date_concours
que une seule fois pour chaque concours

par contre tu veux afficher bande et mode tout le temps

ce n'est aps ce que tu fais ici ;)
et à ta place, je commencrai par afficher d'abord dans l'ordre
- toutes les infos du concours
- les bandes et les modes

ce sera plus simple

donc tu ne dois pas être trop loin de ton résultat non ? tu postes encore du code sans dire ce qui ne va pas et moi j'ai pas envie de deviner je te le dis franchement [-X