[RESOLU] REQUETTE SQL sur une Table

Eléphanteau du PHP | 32 Messages

14 oct. 2009, 19:42

Bonsoir Khan


Le fichier PHp qui tourne actuellement c'est celui que j'ai mis hier
de sbi016 le 14 Oct 2009, 07:31
Bonjour Khan,
Voici la totalité de mon fichier php original :

Je le remets ci-essous ....
<style type="text/css">
<!--
a:link {
	text-decoration: none;
}
a:visited {
	text-decoration: none;
}
a:hover {
	text-decoration: none;
}
a:active {
	text-decoration: none;
}
-->
</style>

<body bgcolor="#418FCD">
	<p align="left"><strong><u>Tableau pilotes</u></strong></p>
	<p align="justify">&nbsp;</p>
	<p align="justify">Cliquez sur le callsign d'un pilote pour acc&eacute;der &agrave; son carnet de vol. </p>
	<p align="justify">&nbsp;</p>
	<div align="center">
		<!-- begin FSACARS Reports --><?php

/* Constants */
@define ("MYSQL_CONNECT_INCLUDE", "fsacars/connect_db.php");   // MySQL database connection 

/* Database connection */
include(MYSQL_CONNECT_INCLUDE);

/* Select all pilots */
$query = "SELECT * FROM pilots ORDER BY pilot_id ASC";
$result = mysql_query($query);

/* Determine the number of pilots */
$number = mysql_numrows($result);

if ($number > 0) {
   
  	/* Print roster header 
	   Change this HTML to fit your webpage layout */
	print "<table>";
	print "<tr>";
	print "<td bgcolor=#87B5E2 width=70 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>PILOTE</b></font></td>";
	print "<td bgcolor=#87B5E2 width=90 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>NOM</b></font></td>";
	print "<td bgcolor=#87B5E2 width=110 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>TDV</b></font></td>";
	print "<td bgcolor=#87B5E2 width=70 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>POIDS</b></font></td>";
	print "<td bgcolor=#87B5E2 width=70 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>MN</b></font></td>";
	print "<td bgcolor=#87B5E2 width=80 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>FUEL</b></font></td>";
	print "<td bgcolor=#87B5E2 width=110 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>CA</b></font></td>";
	print "</tr>";
	
	/* Get pilots info */
	for ($i=0; $i<$number; $i++) {
     		$num = mysql_result($result,$i,"pilot_num");
     		$name = mysql_result($result,$i, "name");
		$city = mysql_result($result,$i, "city");
     		$country = mysql_result($result,$i, "country");
     		$status_fr = mysql_result($result,$i, "status_fr");
		$ca= mysql_result($result,$i, "ca");
		$id = mysql_result($result,$i, "pilot_id");
		
         	/* Calculate flight hours */ 
		$query_hours = "SELECT sec_to_time(sum(time_to_sec(t2.duration))) AS duration_sum FROM pilots t1, reports t2 WHERE t1.pilot_id=$id AND t1.pilot_id=t2.pilot_id";
          	$result_hours = mysql_query($query_hours);
       
          	if (mysql_numrows($result_hours) > 0) {
         	$time = mysql_result($result_hours,0,"duration_sum");
      	}

	/* Calculate distance */ 
		$query_dist = "SELECT (sum(t2.distance)) AS distance_sum FROM pilots t1, reports t2 WHERE t1.pilot_id=$id AND t1.pilot_id=t2.pilot_id";
          	$result_dist = mysql_query($query_dist);
       
          	if (mysql_numrows($result_dist) > 0) {
         	$dist = mysql_result($result_dist,"distance_sum");
      	}	

	/* Calculate poids */ 
		$query_poids = "SELECT (sum(t2.registration)) AS registration_sum FROM pilots t1, reports t2 WHERE t1.pilot_id=$id AND t1.pilot_id=t2.pilot_id";
          	$result_poids = mysql_query($query_poids);
       
          	if (mysql_numrows($result_poids) > 0) {
         	$poids = mysql_result($result_poids,"registration_sum");
      	}	
         	
	/* Calculate fuel */ 
		$query_fuel = "SELECT (sum(t2.fuel)) AS fuel_sum FROM pilots t1, reports t2 WHERE t1.pilot_id=$id AND t1.pilot_id=t2.pilot_id";
          	$result_fuel= mysql_query($query_fuel);
       
          	if (mysql_numrows($result_fuel) > 0) {
         	$fuel = mysql_result($result_fuel,"fuel_sum");
      	

	/* Calculate CA */ 
		
		
	}	

     		/* Display roster entries */
     		print "<tr>";
     		print "<td width=70 height=12 align=left><font face=Arial size=2 color=#FFFFFF> <a href=\"index.php?page=carnet$num\"> $num </a> </font></td>";
		print "<td width=90 height=12 align=left><font face=Arial size=2 color=#FFFFFF>$name</font></td>";
     		print "<td width=110 height=12 align=center><font face=Arial size=2 color=#FFFFFF>$time</font></td>";
     		print "<td width=70 height=12 align=right><font face=Arial size=2 color=#FFFFFF>$poids</font></td>";
		print "<td width=70 height=12 align=right><font face=Arial size=2 color=#FFFFFF>$dist</font></td>";
		print "<td width=80 height=12 align=right><font face=Arial size=2 color=#FFFFFF>$fuel</font></td>";
		print "<td width=110 height=12 align=right><font face=Arial size=2 color=#FFFFFF>$ca</font></td>" ;
		  
		print "</tr>";
			
		
	}
	
	print "</table>";
}


$query = "SELECT SEC_TO_TIME( SUM( TIME_TO_SEC(reports.duration))) AS SUM_OF_duration FROM reports"; 

$result = mysql_query($query) or die('0');

$data = mysql_fetch_row($result);

$sum = $data[0];

print "<td bgcolor=#FFFFFF width=73 height=12 align=left><font face=Arial color=#FFFFFF size=3><b>TEMPS DE VOL TOTAL DE LA VA: </b></font></td>";
print "</tr>";
print "<td bgcolor=#FFFFFF width=73 height=12 align=right><font face=Arial size=4 color=#FFFFFF>$sum</font></td>";
print "</tr>";



/* Print table footer */
print "<table>";
print "<tr><td><font face=Arial size=2 color=#0000ff></font></td></tr>";
print "</table>";

/* Close the database connection */
mysql_close();
?><!-- end FSACARS Reports --></div>
	<br>

</body>


Je comprends tout a fait ce que tu essaye de me faire faire ( ou plutot que tu fait ) harmoniser un ensemble de requette, ce qui me chagrine moi c'est que j'ouble toujours un truc du type ";","} ou { " c'est a chaque fois la même chose, bon je reste débutant dans le PHP ( mes base MySQL sont pas énormes , ca va j'y arrives ) mais c'est exclusivement en auto didact et ca c'est pas facil, ce qui est logique pour les développeur n'est pas forcémment logique pour un mec comme moi, je procède plutôt a petit pas, un cooup je fait ce calcul avec requette, ( il marche, c'est bon, je passe à un autre, et ainsi de suite. Au bout d'un momment, ben le code ça devient un peu le foutoir.

En tout cas,je te remercie du profond du coeur, l'ami de m'aider.
NB : J'utilise PsPAd Edotor v 4.5.3 (2298) pour mes pages PHP
Cordialement

Kran
Invité n'ayant pas de compte PHPfrance

14 oct. 2009, 20:28

Je n'ai jamais pris de cours non plus en matière de développement Web (et d'aucuns pourrons dire "Ca se voit !" :wink: )... ça viendra petit à petit ne t'inquette pas ! Mais ça me parait important, quand tu introduis de nouvelles notions comme la BDD par exemple de bien en apréhender l'utilisation car dans ton code tu compenses clairement un manque de compréhension à ce niveau la par un surcroît de code qui se retrouve du coup beaucoup plus confus ^^

Mets nous donc ça en ligne pour voir, à priori ça devrait l'faire... j'suis un peu plus en forme ce soir !
<html>
<head>
<style type="text/css">
<!--
a {text-decoration: none;}
-->
</style>
</head>

<body bgcolor="#418FCD">
	<p align="left"><strong><u>Tableau pilotes</u></strong></p>
	<br />
	<p align="justify">Cliquez sur le callsign d'un pilote pour acc&eacute;der &agrave; son carnet de vol. </p>
	<br />

	<div align="center" style="{color:#fff; font-family:Arial;}">

	<!-- begin FSACARS Reports -->

<?php
/* Database connection */  
include("fsacars/connect_db.php");

echo "<table>
		<tr>
			<td bgcolor=#87B5E2 width=70 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>PILOTE</b></font></td>
			<td bgcolor=#87B5E2 width=90 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>NOM</b></font></td>
			<td bgcolor=#87B5E2 width=110 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>TDV</b></font></td>
			<td bgcolor=#87B5E2 width=70 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>POIDS</b></font></td>
			<td bgcolor=#87B5E2 width=70 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>MN</b></font></td>
			<td bgcolor=#87B5E2 width=80 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>FUEL</b></font></td>
			<td bgcolor=#87B5E2 width=110 height=12 align=center><font face=Arial color=#FFFFFF size=2><b>CA</b></font></td>
		</tr>";

$sqltxt= "SELECT t1.pilot_id,
				 t1.name AS nom_pilote, 
				 sec_to_time(sum(time_to_sec(t2.duration))) AS duration_sum,
				 (sum(t2.distance)) AS distance_sum,
				 (sum(t2.registration)) AS poids_sum,
				 (sum(t2.fuel)) AS fuel_sum 
		FROM pilots t1, reports t2 
		WHERE t1.pilot_id=t2.pilot_id 
		ORDER BY t1.name ASC";

$sql_result = mysql_query($sqltxt) or die ( "<br/><br/>mysql_query returns : Err".mysql_errno()." ".mysql_error() );

if(mysql_numrows($sql_result) > 0) {
	
	while($resline=mysql_fetch_assoc($sql_result) ) {
		$num = $resline['pilot_id'];
		$name = $resline['nom_pilote'];
		$time = $resline['duration_sum'];
		$distance = $resline['distance_sum'];
		$poids = $resline['poids_sum'];
		$fuel = $resline['fuel_sum'];
		$ca = (($poids*4.9) + ($distance*300) - ($fuel*63)); 
	
		echo '<tr>
				 <td width="70" height="12" align="center"><font face="Arial" size="3" color="#FFFFFF"> <a href="index.php?page=carnet'.$num.'">'.$num.'</a> </font></td>
				 <td width="90" height="12" align="center"><font face="Arial" size="2" color="#FFFFFF">'.$name.'</font></td>
				 <td width="110" height="12" align="center"><font face="Arial" size="2" color="#FFFFFF">'.$time.'</font></td>
				 <td width="70" height="12" align="center"><font face="Arial" size="2" color="#FFFFFF">'.$poids.'</font></td>
				 <td width="70" height="12" align="center"><font face="Arial" size="2" color="#FFFFFF">'.$distance.'</font></td>
				 <td width="80" height="12" align="center"><font face="Arial" size="2" color="#FFFFFF">'.$fuel.'</font></td>
				 <td width="110" height="12" align="right"><font face="Arial" size="2" color="#FFFFFF">'.$ca.'</font></td>
			</tr>' ;
	}
	
	$query = "SELECT SEC_TO_TIME( SUM( TIME_TO_SEC(reports.duration))) AS SUM_OF_duration FROM reports"; 
	$result = mysql_query($query) or die("<br/><br/>mysql_query sum_of_duration returns : Err".mysql_errno()." ".mysql_error() );
	$data = mysql_fetch_row($result);
	$sum = $data[0];

	echo '<tr>
			<td height="12" align="left" colspan="5"><font face="Arial" size="3"><b>TEMPS DE VOL TOTAL DE LA VA: </b></font></td>
			<td height="12" align="right" colspan="2"><font face="Arial" size="4">$sum</font></td>
		  </tr>';
	
} else echo "<tr>
				 <td width=70 height=12 align=center colspan=7>La requête n'a retourné aucune ligne !</td>
			</tr>";

			
echo "</table>";

mysql_close();

?>
<!-- end FSACARS Reports -->

</div>
<br />
</body>
</html>

Kran
Invité n'ayant pas de compte PHPfrance

14 oct. 2009, 20:35

Bon j'te préviens tout d'suite : ton TEMPS DE VOL TOTAL DE LA VA va afficher "$sum" au lieu de la valeur lol (finalement j'suis p'tet pas si en forme que ça :P )
A toi de trouver pourquoi ;)

Mais si tu as des problèmes avec les ; , " et autres ' je te conseille d'utiliser un éditeur avec coloration syntaxique... tu verras c'est beaucoup plus pratique ^^ (sans vouloir faire de pub, tu as par exemple notepad++ qui est gratuit et tout a fait sympathique)

Eléphanteau du PHP | 32 Messages

15 oct. 2009, 09:19

Bonjour Kran,

Voila le résultat :
http://www.siberiavirtual.fr/cargo/retest.php

Mais je penses savoir d'ou vient mon erreur, ce que j'ai oublié de te dire c'est qu'il y a 2 tables (reports & pilots), et ce que je fesais c'est que je m'appuyais sur celle de pilot pour récupere le champs pilot_num.
Je crois que je me suis foutu dans un gros bourbier.........
Et tu vois la ben j'arrives même pas à trouver l'erreur du "$sum".

Quelle catastrophe!!

Pour ce qui est de notepad++, je vais récupérer ca
Merci Kran

Kran
Invité n'ayant pas de compte PHPfrance

15 oct. 2009, 20:46

Entre guillements doubles, un mot commençant par $ est interpretté comme une variable par php.
Entre guillements simples, le même mot est interpretté comme une chaine de caractères simples !

Entre guillements simples, tu dois donc finir ta chaine de caractères et la concaténer avec la variable à l'aide de "."
// exemple :
$var='tata';
echo "titi $var toto"; // affiche : titi tata toto
echo 'titi $var toto'; // affiche : titi $var toto
echo 'titi '.$var.' toto'; // affiche : titi tata toto
C'est le genre de choses que tu verras beaucoup plus facilement avec la coloration syntaxique...

J'vais finir par te dire que google est ton ami si tu continues !

Pour le reste, fais moi une copie d'écran du contenu de tes deux tables histoire de... je suspecte de petites incompréhensions à ce niveau aussi...

Eléphanteau du PHP | 32 Messages

15 oct. 2009, 23:01

Bonsoir Kran,

Bien joué , '.$sum.' et en plus je l'avais sous les yeux, c'est sur qu'avec notepad++ ça va mieux, merci pour cela.

Ci-joint les screens demandés :

Table reports
Image
Table pilots ( en sachant que les champs ( statut, status_fr, grade, grade_fr ) sont des champs qui ne servent à rien et que le champs (ca) me sert actuellement en saisie manuelle comme ci-dessous le résultat
Image

Le résultat escompté :

Image

Voili voilou !!
Cordialement

Kran
Invité n'ayant pas de compte PHPfrance

15 oct. 2009, 23:48

Y m'semblait bien qu'y fallait un group by....
$sqltxt= "SELECT t1.name AS nom_pilote, 
                                sec_to_time(sum(time_to_sec(t2.duration))) AS duration_sum,
                                (sum(t2.distance)) AS distance_sum,
                                (sum(t2.registration)) AS poids_sum,
                                (sum(t2.fuel)) AS fuel_sum 
                FROM pilots t1, reports t2 
                WHERE t1.pilot_id=t2.pilot_id 
                GROUP BY t1.name
                ORDER BY t1.name ASC ";

Eléphanteau du PHP | 32 Messages

16 oct. 2009, 15:34

Bonjour Kran,

Voici les résultats après un ptit formatage :

Page française :
http://www.siberiavirtual.fr/cargo/inde ... age=roster
Page Anglaise :
http://www.siberiavirtual.fr/cargo/e_in ... e=e_roster

J'ai juste modifié dans le SELECT (t1.pilot_id par t1.pilot_num ) pour avoir le N° du pilote (ex:SBIXXX)et non son id (ex:1) et du formatage de chiffre avec la commande number_format()

Je souhaiterais apporter mes petites remarques concernant ton aide :
1 - J'ai apris 100 fois plus en une ptite semaine avec toi, qu'avec les 1 an de bricolage que j'ai déjà réalisé en php.
2 - J'avais acheté un bouquin (Programmation Web avec PHP - de Lacroix - Editions Eyrolles ) mais vraiment barbant à lire, c'est quand même plus facile d'avoir l'aide en direct (on ne le dira jamais assez)
3 - Je ne sais comment te remercier, mais si tu as besoin de qui que ce soit, dans mon domaine de compétence ( CAO,DAO ( Autocad en particulier)) alors n'hésites pas, ce sera un très grand plaisir pour moi
4 - Je sais que sur les forum, en général, la reconnaissance importe peu, mais pour moi, elle est hyper importante, je ne te remercierais jamais assez, et tu as à mon avis une superbe compétenceen ce domaine.
5 - Je vais maintenant enfin pouvoir me pencher sur les stats.


Merci mille fois Kran ( Et c'est même pas assez )
Amitiés et à très bientôt je l'espère

Kran
Invité n'ayant pas de compte PHPfrance

16 oct. 2009, 17:10

Hébé c'est pas trop tôt :P !

Bon ba bonne continuation... le principal c'est que tu aies appris des choses qui te serons utiles par la suite !
Comme le dit si bien la signature de jesaispukitrop sur le forum : "ce qu'on apprend dans la douleur reste toujours gravé plus longtemps"
Du coup, j'pense que c'que t'as appris cette fois ci va rester graver a vie :lol:

Et oublies pas de marquer le sujet comme résolu ça fera genre on c'est pas pris la tête pour des prunes :lol:

@+

Eléphanteau du PHP | 32 Messages

16 oct. 2009, 17:40

Ma fois Kran, j'suis vieux moi, 50 printemps, il me faut du temps
:D :D :D :D :D :D

A bientôt, je l'espere de tout coeur........ :mrgreen: