Page 1 sur 2

tableau

Posté : 22 avr. 2007, 19:27
par Arbagon
J'ai une page pour commander. La personne peut commander jusqu'à 5 articles. Le tableau malheureusement affichera 5 ligne même si la personne commande 2 articles, alors je me demandais s'il y avait une manière de rectifier ceci pour qu'il affiche un nombre de lignes égale a celui du nombre d'articles. Voici le code:

Code : Tout sélectionner

<?php $base = mysql_connect("serveur","identifiant","mot de passe"); mysql_select_db("base",$base); $no = $_POST['no'];$no1 = $_POST['no1'];$no2 = $_POST['no2'];$no3 = $_POST['no3'];$no4 = $_POST['no4']; $nb = $_POST['nb'];$nb1 = $_POST['nb1'];$nb2 = $_POST['nb2'];$nb3 = $_POST['nb3'];$nb4 = $_POST['nb4']; $requete = mysql_query("SELECT * FROM inventaire WHERE identifiant='$no'")or die(mysql_error()); $resultat = mysql_fetch_array($requete); $prix = $resultat['prix']; $nom = $resultat['nom']; $photo = $resultat['photo']; $prixtotal = $prix*$nb; $requete1 = mysql_query("SELECT * FROM inventaire WHERE identifiant='$no1'")or die(mysql_error()); $resultat1 = mysql_fetch_array($requete1); $prix1 = $resultat1['prix']; $nom1 = $resultat1['nom']; $photo1 = $resultat1['photo']; $prixtotal1 = $prix1*$nb1; $requete2 = mysql_query("SELECT * FROM inventaire WHERE identifiant='$no2'")or die(mysql_error()); $resultat2 = mysql_fetch_array($requete2); $prix2 = $resultat2['prix']; $nom2 = $resultat2['nom']; $photo2 = $resultat2['photo']; $prixtotal2 = $prix2*$nb2; $requete3 = mysql_query("SELECT * FROM inventaire WHERE identifiant='$no3'")or die(mysql_error()); $resultat3 = mysql_fetch_array($requete3); $prix3 = $resultat3['prix']; $nom3 = $resultat3['nom']; $photo3 = $resultat3['photo']; $prixtotal3 = $prix3*$nb3; $requete4 = mysql_query("SELECT * FROM inventaire WHERE identifiant='$no4'")or die(mysql_error()); $resultat4 = mysql_fetch_array($requete4); $prix4 = $resultat4['prix']; $nom4 = $resultat4['nom']; $photo4 = $resultat4['photo']; $prixtotal4 = $prix4*$nb4; $grandtotal = $prixtotal + $prixtotal1 + $prixtotal2 + $prixtotal3 + $prixtotal4; echo '<div align="center">Veuillez confirmer votre commande s\'il vous plaît</div>'; echo '<div align="center"><center> <table border="1" cellspacing="1" height="55"> <tr> <td align="left">Photo</td> <td align="left">no d\'identification</td> <td align="left">Nom de l\'article</td> <td align="left">Prix à l\'unité</td> <td align="left">Quantité</td> <td align="left">Total</td> </tr> <tr> <td align="center"><img src='.$photo.'></td> <td align="center">'.$no.'</td> <td align="center">'.$nom.'</td> <td align="right">'.number_format($prix, 2, ',', ' ').'</td> <td align="right">'.$nb.'</td> <td align="right">'.number_format($prixtotal, 2, ',', ' ').'</td> </tr> <tr> <td align="center"><img src='.$photo1.'></td> <td align="center">'.$no1.'</td> <td align="center">'.$nom1.'</td> <td align="right">'.number_format($prix1, 2, ',', ' ').'</td> <td align="right">'.$nb1.'</td> <td align="right">'.number_format($prixtotal1, 2, ',', ' ').'</td> </tr> <tr> <td align="center"><img src='.$photo2.'></td> <td align="center">'.$no2.'</td> <td align="center">'.$nom2.'</td> <td align="right">'.number_format($prix2, 2, ',', ' ').'</td> <td align="right">'.$nb2.'</td> <td align="right">'.number_format($prixtotal2, 2, ',', ' ').'</td> </tr> <tr> <td align="center"><img src='.$photo3.'></td> <td align="center">'.$no3.'</td> <td align="center">'.$nom3.'</td> <td align="right">'.number_format($prix3, 2, ',', ' ').'</td> <td align="right">'.$nb3.'</td> <td align="right">'.number_format($prixtotal3, 2, ',', ' ').'</td> </tr> <tr> <td align="center"><img src='.$photo4.'></td> <td align="center">'.$no4.'</td> <td align="center">'.$nom4.'</td> <td align="right">'.number_format($prix4, 2, ',', ' ').'</td> <td align="right">'.$nb4.'</td> <td align="right">'.number_format($prixtotal4, 2, ',', ' ').'</td> </tr> <tr> <td align="center" colspan="5"> <p align="right">Prix total :</td> <td align="right">'.number_format($grandtotal, 2, ',', ' ').'</td> </tr> </table> </div>';

Posté : 22 avr. 2007, 19:33
par thehawk
pense a la balise php pour afficher ton code il sera plus visible et debbugable plus arpidement

Posté : 22 avr. 2007, 19:46
par Invité
voici le code en balise php:
<?php 
$base = mysql_connect("serveur","identifiant","mot de passe"); 

mysql_select_db("base",$base); 

   $no = $_POST['no'];$no1 = $_POST['no1'];$no2 = $_POST['no2'];$no3 = $_POST['no3'];$no4 = $_POST['no4']; 
   $nb = $_POST['nb'];$nb1 = $_POST['nb1'];$nb2 = $_POST['nb2'];$nb3 = $_POST['nb3'];$nb4 = $_POST['nb4']; 

$requete = mysql_query("SELECT * FROM inventaire WHERE identifiant='$no'")or die(mysql_error()); 

$resultat = mysql_fetch_array($requete); 
$prix = $resultat['prix']; 
$nom = $resultat['nom']; 
$photo = $resultat['photo']; 
$prixtotal = $prix*$nb; 

$requete1 = mysql_query("SELECT * FROM inventaire WHERE identifiant='$no1'")or die(mysql_error()); 

$resultat1 = mysql_fetch_array($requete1); 
$prix1 = $resultat1['prix']; 
$nom1 = $resultat1['nom']; 
$photo1 = $resultat1['photo']; 
$prixtotal1 = $prix1*$nb1; 

$requete2 = mysql_query("SELECT * FROM inventaire WHERE identifiant='$no2'")or die(mysql_error()); 

$resultat2 = mysql_fetch_array($requete2); 
$prix2 = $resultat2['prix']; 
$nom2 = $resultat2['nom']; 
$photo2 = $resultat2['photo']; 
$prixtotal2 = $prix2*$nb2; 

$requete3 = mysql_query("SELECT * FROM inventaire WHERE identifiant='$no3'")or die(mysql_error()); 

$resultat3 = mysql_fetch_array($requete3); 
$prix3 = $resultat3['prix']; 
$nom3 = $resultat3['nom']; 
$photo3 = $resultat3['photo']; 
$prixtotal3 = $prix3*$nb3; 

$requete4 = mysql_query("SELECT * FROM inventaire WHERE identifiant='$no4'")or die(mysql_error()); 

$resultat4 = mysql_fetch_array($requete4); 
$prix4 = $resultat4['prix']; 
$nom4 = $resultat4['nom']; 
$photo4 = $resultat4['photo']; 
$prixtotal4 = $prix4*$nb4; 

$grandtotal = $prixtotal + $prixtotal1 + $prixtotal2 + $prixtotal3 + $prixtotal4; 

echo '<div align="center">Veuillez confirmer votre commande s\'il vous plaît</div>'; 

echo '<div align="center"><center> 
  <table border="1" cellspacing="1" height="55"> 
   <tr> 
      <td align="left">Photo</td> 
      <td align="left">no d\'identification</td> 
      <td align="left">Nom de l\'article</td> 
      <td align="left">Prix à l\'unité</td> 
      <td align="left">Quantité</td> 
      <td align="left">Total</td> 
   </tr> 
   <tr> 
      <td align="center"><img src='.$photo.'></td> 
      <td align="center">'.$no.'</td> 
      <td align="center">'.$nom.'</td> 
      <td align="right">'.number_format($prix, 2, ',', ' ').'</td> 
      <td align="right">'.$nb.'</td> 
      <td align="right">'.number_format($prixtotal, 2, ',', ' ').'</td> 
   </tr> 
   <tr> 
      <td align="center"><img src='.$photo1.'></td> 
      <td align="center">'.$no1.'</td> 
      <td align="center">'.$nom1.'</td> 
      <td align="right">'.number_format($prix1, 2, ',', ' ').'</td> 
      <td align="right">'.$nb1.'</td> 
      <td align="right">'.number_format($prixtotal1, 2, ',', ' ').'</td> 
   </tr> 
   <tr> 
      <td align="center"><img src='.$photo2.'></td> 
      <td align="center">'.$no2.'</td> 
      <td align="center">'.$nom2.'</td> 
      <td align="right">'.number_format($prix2, 2, ',', ' ').'</td> 
      <td align="right">'.$nb2.'</td> 
      <td align="right">'.number_format($prixtotal2, 2, ',', ' ').'</td> 
   </tr> 
   <tr> 
      <td align="center"><img src='.$photo3.'></td> 
      <td align="center">'.$no3.'</td> 
      <td align="center">'.$nom3.'</td> 
      <td align="right">'.number_format($prix3, 2, ',', ' ').'</td> 
      <td align="right">'.$nb3.'</td> 
      <td align="right">'.number_format($prixtotal3, 2, ',', ' ').'</td> 
   </tr> 
   <tr> 
      <td align="center"><img src='.$photo4.'></td> 
      <td align="center">'.$no4.'</td> 
      <td align="center">'.$nom4.'</td> 
      <td align="right">'.number_format($prix4, 2, ',', ' ').'</td> 
      <td align="right">'.$nb4.'</td> 
      <td align="right">'.number_format($prixtotal4, 2, ',', ' ').'</td> 
   </tr> 
   <tr> 
      <td align="center" colspan="5"> 
        <p align="right">Prix total :</td> 
      <td align="right">'.number_format($grandtotal, 2, ',', ' ').'</td> 
   </tr> 
</table> 
</div>';

Posté : 23 avr. 2007, 22:50
par Arbagon
Pourrait-il y avoir un moyen avec la condition "si" qui signifirait : si dans la case 'no' il y a quelque chose, affiche la ligne, sinon laisse la invisible.

Posté : 23 avr. 2007, 23:02
par charabia
Tu peux dire si $no existe (avec isset) et si $no est différent de vide alors afficher la ligne.
if(isset($no) && $no!="")
{
echo '<tr>...</tr>';
}

Posté : 23 avr. 2007, 23:09
par Sékiltoyai
En fait, je te conseillerais de construire ton tableau avec un for, en créant les cellules de manière itérative.
Considérons un tableau $data dans lequel tu as mis tes données, alors tu construis ton formulaire comme ca :
<?php
for($i=0;$i<count($data);$i++)
{
?>
<tr>
<td><?php echo $data[$i]['donnee1'] ?></td>
<td><?php echo $data[$i]['donnee2'] ?></td>
<td><?php echo $data[$i]['donnee3'] ?></td>
<td><?php echo $data[$i]['donnee4'] ?></td>
</tr>
<?php
}
?>
Suffit du coup juste de contrôler ce que tu mets dans $data pour limiter à 5 le nombre de colonnes...

edit :
Sinon, ce que tu as fait au niveau de tes requètes est très lourd pour le serveur, mieux vaut faire une grosse requète que plusieurs petites, du genre :

Code : Tout sélectionner

SELECT `machin` FROM `truc` WHERE `id` IN('1', '2', '3', '4', '5');

Posté : 25 avr. 2007, 01:10
par Arbagon
Je ne comprend rien a ton code de for. J'ai essayer avec le if a la méthode de charabia, mais se marche pas. Voici le nouveau code :
'<div align="center"><center>
  <table border="1" cellspacing="1" height="55">
	<tr>
		<td align="left">Photo</td>
		<td align="left">no d\'identification</td>
		<td align="left">Nom de l\'article</td>
		<td align="left">Prix à l\'unité</td>
		<td align="left">Quantité</td>
		<td align="left">Total</td>
	</tr>'
if(isset($no) && $no!="") 
{
echo	'<tr>
		<td align="center"><img src='.$photo.'></td>
		<td align="center">'.$no.'</td>
		<td align="center">'.$nom.'</td>
		<td align="right">'.number_format($prix, 2, ',', ' ').'</td>
		<td align="right">'.$nb.'</td>
		<td align="right">'.number_format($prixtotal, 2, ',', ' ').'</td>
	</tr>'
}
if(isset($no1) && $no1!="") 
{
echo	'<tr>
		<td align="center"><img src='.$photo1.'></td>
		<td align="center">'.$no1.'</td>
		<td align="center">'.$nom1.'</td>
		<td align="right">'.number_format($prix1, 2, ',', ' ').'</td>
		<td align="right">'.$nb1.'</td>
		<td align="right">'.number_format($prixtotal1, 2, ',', ' ').'</td>
	</tr>'
}
if(isset($no2) && $no2!="") 
{
echo	'<tr>
		<td align="center"><img src='.$photo2.'></td>
		<td align="center">'.$no2.'</td>
		<td align="center">'.$nom2.'</td>
		<td align="right">'.number_format($prix2, 2, ',', ' ').'</td>
		<td align="right">'.$nb2.'</td>
		<td align="right">'.number_format($prixtotal2, 2, ',', ' ').'</td>
	</tr>'
}
if(isset($no3) && $no3!="") 
{
echo	'<tr>
		<td align="center"><img src='.$photo3.'></td>
		<td align="center">'.$no3.'</td>
		<td align="center">'.$nom3.'</td>
		<td align="right">'.number_format($prix3, 2, ',', ' ').'</td>
		<td align="right">'.$nb3.'</td>
		<td align="right">'.number_format($prixtotal3, 2, ',', ' ').'</td>
	</tr>'
}
if(isset($no4) && $no4!="") 
{
echo	'<tr>
		<td align="center"><img src='.$photo4.'></td>
		<td align="center">'.$no4.'</td>
		<td align="center">'.$nom4.'</td>
		<td align="right">'.number_format($prix4, 2, ',', ' ').'</td>
		<td align="right">'.$nb4.'</td>
		<td align="right">'.number_format($prixtotal4, 2, ',', ' ').'</td>
	</tr>'
}
	'<tr>
		<td align="center" colspan="5">
        <p align="right">Prix total :</td>
		<td align="right">'.number_format($grandtotal, 2, ',', ' ').'</td>
	</tr>
</table>
</div>'

Posté : 25 avr. 2007, 01:23
par Sékiltoyai
Je ne comprend rien a ton code de for. J'ai essayer avec le if a la méthode de charabia, mais se marche pas.
J'adore le "ca ne marche pas".
Quand ca ne marche pas, il faut donner l'erreur, et ne dis pas qu'il n'y pas pas d'erreur, puisque là il y a nécessairement des parse error sur tout ton script. Tu as oublié des ';' partout dans ton script.
Ensuite, concernant ma solution, je ne vois pas pourquoi tu ne la comprend pas. Elle n'est pas vraiment dure à comprendre, si tu fais ca :
<?php 
for($i=0;$i<count($data);$i++) 
{ 
?> 
<tr> 
<td><?php echo $data[$i]['donnee1'] ?></td> 
<td><?php echo $data[$i]['donnee2'] ?></td> 
<td><?php echo $data[$i]['donnee3'] ?></td> 
<td><?php echo $data[$i]['donnee4'] ?></td> 
</tr> 
<?php 
} 
?>
ca équivaut à faire ca :
<tr> 
<td><?php echo $data0['donnee1'] ?></td> 
<td><?php echo $data0['donnee2'] ?></td> 
<td><?php echo $data0['donnee3'] ?></td> 
<td><?php echo $data0['donnee4'] ?></td> 
</tr>
<tr> 
<td><?php echo $data1['donnee1'] ?></td> 
<td><?php echo $data1['donnee2'] ?></td> 
<td><?php echo $data1['donnee3'] ?></td> 
<td><?php echo $data1['donnee4'] ?></td> 
</tr>
<tr> 
<td><?php echo $data2['donnee1'] ?></td> 
<td><?php echo $data2['donnee2'] ?></td> 
<td><?php echo $data2['donnee3'] ?></td> 
<td><?php echo $data2['donnee4'] ?></td> 
</tr>
...
C'est à dire qu'au lieu de rentrer tes données en créant ta nouvelle ligne dans ton tableau html, tu rentres toutes tes données dans un tableau, à l'index 0 du tableau, tu as un tableau contenant les données de la premiere ligne, à l'index 1 celles de la deuxième ligne, etc... Et ensuite, une fois le tableau créé avec toutes les données, le for te permet de n'écrire le shéma d'une ligne de tableau html qu'une seule fois, et le for s'éxécutera autant de fois que tu as de lignes dans ton tableau html pour créer la ligne et y entrer les données, et ca prend beaucoup moins de code, et le for crée juste le nombre de lignes nécessaires...

Posté : 25 avr. 2007, 02:09
par Arbagon
mais ou prend tu data et donnée et le [$i]? et ai-je dit qu'il n'y avait pas d'erreurs?

Posté : 25 avr. 2007, 07:54
par Sékiltoyai
mais ou prend tu data et donnée et le [$i]?
le tableau $data est rempli avec tes propres données, celles que tu as mis directement dans le tableau html. Et au lieu de les mettre directement dans le tableau html, tu les entres dans le tableau php.
Tu fais
$data[0]=array('machin'=>'contenu de la variable machin pour la première ligne', 'truc'=>'contenu de la variable truc pour la première ligne');
 $data[1]=array('machin'=>'contenu de la variable machin pour la seconde ligne', 'truc'=>'contenu de la variable truc pour la seconde ligne');
et ai-je dit qu'il n'y avait pas d'erreurs?
Non, mais tu n'as pas dit qu'il y en avait.

Posté : 25 avr. 2007, 22:46
par Arbagon
bon, c'est que j'ai une page html qui a deux cellules de texte, une no et un nb.

J'ai 5 fois chaques cellules.

Le html post ensuite chaque cellules qui deviennent mes variables.

Je veut que si la cellule no et nb sont remplie, il affiche une ligne. Si no et nb + no1 et nb1 sont remplie, il affiche 2 ligne et ainsi de suite, jusqu'à ce que tout mes no et nb soit passer.

Je ne comprend pas comment ton for peut détecter que mes cellules sont remplie.

Mais pour chaque items, j'ai 5 variables. J'ai une requête qui selon le no vas chercher la photo, le nom et le prix qui correspond a l'identifiant identique au no, dans ma base de données. Ensuite dans ma requête, il mutiplie le prix au nb, qui est le nombre désirer.

Comment je fais pour intégrer ce qui vient de ma base de données? Comment je peut garder les résultat de mes requête dans ton for? Et comment fait-ils pour voir que les cellules textes on du contenue?

Posté : 26 avr. 2007, 03:18
par Sékiltoyai
Ouh, t'as du mal à comprendre, je te dis de remplir le for avec les données, et si les données viennent d'une requète, tu le remplis avec les données de la requète :
$data = array();
$i=0;
while($row = mysql_fetch_array($result))
{
$data[$i++] = $row;
}
Ou bien, vu que tu es allergique aux for, tu peux directement créer le tableau html avec les résultats de la requète :
while($row = mysql_fetch_array($result))
{
?>
<tr>
<td><?php echo $row['donnée1'] ?></td>
<td><?php echo $row['donnée2'] ?></td>
<td><?php echo $row['donnée3'] ?></td>
<td><?php echo $row['donnée4'] ?></td>
</tr>
<?php
}
Ca revient au même, ca monopolise juste un peu plus longtemps la ressource de résultat...

Posté : 26 avr. 2007, 17:14
par Arbagon
j'ai un professeur qui va m'aider, je vais voir ce que je ferais. Merci.

Posté : 26 avr. 2007, 18:02
par Sékiltoyai
Tu fais quoi comme études ?

Posté : 26 avr. 2007, 22:51
par Arbagon
Je suis en secondaire 3, en infocom. J'ai proposer a un petit commerce de faire un site web, puis sa c'est compliquer de plus en plus jusqu'à ce bon de commande. J'ai un proffesseur qui connait le php et il m'aide. Il m'a dit qu'il me conseillait le if du for et il m'esplique peut a peut sa méthode, mais j'ai de la difficulter a comprendre se qui est nouveau si je ne voie pas quelque le faire devant moi.