Probleme lors de la creation d'un tableau dynamique

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Probleme lors de la creation d'un tableau dynamique

par Ajoloca » 24 nov. 2006, 14:49

Re,
Sans oublier la balise de fermeture.

par castell » 24 nov. 2006, 14:47

Sa devrait donner un tableau par groupe ou les lignes de produit s'ajoute selon le tableau au groupe auquel ils appartiennent :lol:

J'ai bon ? lol

par Ajoloca » 24 nov. 2006, 12:05

Bonjour,

Ce petit souci tu devrais être en mesure de le résoudre.
Que fait-il (le script) actuellement ?
- Il me crée un tableau à chaque article (même groupe ou différent)
Quelle instruction (balise) crée un tableau ?
- La balise '<tab>'
Où se trouve-t-elle ?
- A l'intérieur de la bocle qui gère chaque ligne de groupe
Si je la sorts de cette boucle et que je la place dans la boucle qui gère chaque groupe ???

D'après toi?

par castell » 24 nov. 2006, 11:46

Désolé du retard pour ma reponse mais j'etait pas au travail et j'avais pas pris mes lignes de code avec moi

Sinon Ajoloca je tenai vraiment a te remercier d'avoir pris du temps avec mon probleme, c'est vraiment gentil .

Les lignes de code que tu m'a donné s'execute presque parfaitement bien.
Il me reste juste a faire que si lon a plusieur entré pour le meme groupe , le tableau ajoute une ligne au mieu de recréer un tableau.

exemple :

si il y a deux produit de chez acros ,un de chez fluku et un de chez strem;
il y ai un tableau ou sont ranger les deux produit acros , un tableau pour fluka et un pour strem.

j'ais donc fais cela :
$qryGroup = "SELECT distinct(groupe) FROM commande2"; 
$resQryGroup = mysql_query($qryGroup,$link) or die ('Erreur : ' . mysql_error() ); 


while ($rangGroupe = mysql_fetch_array($resQryGroup)){ 
    $qryCmde = "SELECT * FROM commande2 WHERE groupe = '" . $rangGroupe['groupe'] . "'";  
    $resQryCmde = mysql_query($qryCmde,$link) or die ('Erreur : ' . mysql_error() ); 
  
?> 
        <BR><FORM method="POST" action="commande.php"> 
        <table border=1> 
            <TR bgcolor= "#CCFFCC"> 
                <th>Nom</th><th>Référence</th><th>Quantité</th><th>Nombre d'unité</th> 
                <th>Fournisseur</th><th>Reference fournisseur</th><th>Prix à l'unité</th> 
                <th>Prix total</th><th>Prix avec reduction</th><th>Numero de cas</th> 
                <th>Date</th><th>initiale</th><th>Commande</th> 
            </tr> <?php
			  while($rangCmde = mysql_fetch_array($resQryCmde)){ 
			  ?>
            <tr> 
                <td><font face='Verdana' size='2'><?php echo $rangCmde['nom']; ?></font></td> 
                <td><font face='Verdana' size='2'><?php echo $rangCmde['reference']; ?></font></td>  
                <td><font face='Verdana' size='2'><?php echo $rangCmde['quantite']; ?></font></td> 
                <td><font face='Verdana' size='2'><?php echo $rangCmde['nombre_quantite']; ?></font></td> 
                <td><font face='Verdana' size='2'><?php echo $rangCmde['fournisseur']; ?></font></td> 
                <td><font face='Verdana' size='2'><?php echo $rangCmde['reference_fournisseur']; ?></font></td> 
                <td><font face='Verdana' size='2'><?php echo $rangCmde['prix2'];  ?></font></td> 
                <td><font face='Verdana' size='2'><?php echo $rangCmde['prix_total2'];  ?></font></td> 
                <td><font face='Verdana' size='2'><?php echo $rangCmde['reduction2'];  ?> </font></td> 
                <td><font face='Verdana' size='2'><?php echo $rangCmde['numero_cass']; ?></font></td> 
                <td><font face='Verdana' size='2'><?php echo $rangCmde['date']; ?></font></td> 
                <td><font face='Verdana' size='2'><?php echo $rangCmde['initiale']; ?></font></td> 
                <td class="truc"><font face='Verdana' size='2'> 
                    <div style="text-align:left;"> 
                        <select name="commande[]"> 
                            <option value="rien"></option> 
                            <option value="effectuee">Effectuée</option> 
                            <option value="annulee">Annulée</option> 
                        </select> 
                    <input type="hidden" name="tabnom[]" value="<?php echo $rangCmde['nom']; ?>" /> 
                    </div> 
				</font>
			</td>
		</tr>

<?php
}
?>
            <tr> 
                <td colspan=11> 
                    <div style="text-align:center;"> 
                        <input type="submit" value="Valider" /> 
                        <input type="submit" value="Imprimer" onclick="print();" /> 
                        <input type="submit" value="Fermer" onClick="window.close()" /> 
                    </div> 
                </td> 
            </tr> 

       </table> 
    </form> 

<?php

}
?>
et cela fonctionne tré bien

Encore merci a tout le monde pour l'aide que vous nous apporter a nous developpeur en aide :)

par Ajoloca » 23 nov. 2006, 19:21

Re,
Essaie ceci, SANS GARANTIE mais au moins on y vois plus clair
J'ai modifié l'indentation, donné des noms plus parlants au variables et ajouté la seconde boucle while().
<?php
$qryGroup = "SELECT distinct(groupe) FROM commande2";
$resQryGroup = mysql_query($qryGroup,$link) or die ('Erreur : ' . mysql_error() );


while ($rangGroupe = mysql_fetch_array($resQryGroup)){
	$qryCmde = "SELECT * FROM commande2 WHERE groupe = '" . $rangGroupe['groupe'] . "'"; 
	$resQryCmde = mysql_query($qryCmde,$link) or die ('Erreur : ' . mysql_error() );
	while($rangCmde = mysql_fetch_array($resQryCmde)){
?>
		<BR><FORM method="POST" action="commande.php">
		<table border=1>
			<TR> bgcolor=\"#CCFFCC\">
				<th>Nom</th><th>Référence</th><th>Quantité</th><th>Nombre d'unité</th>
				<th>Fournisseur</th><th>Reference fournisseur</th><th>Prix à l'unité</th>
				<th>Prix total</th><th>Prix avec reduction</th><th>Numero de cas</th>
				<th>Date</th><th>initiale</th><th>Commande</th>
			</tr>
			<tr>
				<td><font face='Verdana' size='2'><?php echo $rangCmde['nom']; ?></font></td>
				<td><font face='Verdana' size='2'><?php echo $rangCmde['reference']; ?></font></td> 
				<td><font face='Verdana' size='2'><?php echo $rangCmde['quantite']; ?></font></td>
				<td><font face='Verdana' size='2'><?php echo $rangCmde['nombre_quantite']; ?></font></td>
				<td><font face='Verdana' size='2'><?php echo $rangCmde['fournisseur']; ?></font></td>
				<td><font face='Verdana' size='2'><?php echo $rangCmde['reference_fournisseur']; ?></font></td>
				<td><font face='Verdana' size='2'><?php echo $rangCmde['prix2'];  ?></font></td>
				<td><font face='Verdana' size='2'><?php echo $rangCmde['prix_total2'];  ?></font></td>
				<td><font face='Verdana' size='2'><?php echo $rangCmde['reduction2'];  ?> </font></td>
				<td><font face='Verdana' size='2'><?php echo $rangCmde['numero_cass']; ?></font></td>
				<td><font face='Verdana' size='2'><?php echo $rangCmde['date']; ?></font></td>
				<td><font face='Verdana' size='2'><?php echo $rangCmde['initiale']; ?></font></td>
				<td class="truc"><font face='Verdana' size='2'>
					<div style="text-align:left;">
						<select name="commande[]">
							<option value="rien"></option>
							<option value="effectuee">Effectuée</option>
							<option value="annulee">Annulée</option>
						</select>
					<input type="hidden" name="tabnom[]" value="<?php echo $rangCmde['nom']; ?>" />
					</div>
				</font></td>
			</tr>
			<tr>
				<td colspan=11>
					<div style="text-align:center;">
						<input type="submit" value="Valider" />
						<input type="submit" value="Imprimer" onclick="print();" />
						<input type="submit" value="Fermer" onClick="window.close()" />
					</div>
				</td>
			</tr>
		</table>
	</form>
<?php
	}
} 
?>

par castell » 23 nov. 2006, 18:54

Pour retournerl e nombre d'enregistrement lus je fais sa :
$voir2=mysql_num_rowS($res3);
$voir3=count(mysql_num_rowS($res3)); 
j'ai fais un echo dessus et il 'y a la valeur 1 qui s'affiche au dessus de chaque tableau

sinon pour la boucle qui doit traiter les resultats un par un

j'ai essailler de faire un for (j'ai lus la definition sur phpnet)

pour dire que tant que un resultat est trouvé il est ajouté

voila l'essais

for ($voir2=1;$voir2<$voir3;$voir2++){mon tableau}

mais comme tu te doute sa ne donne rien du tout : //


(desolé d'etre si boulet )[/php]

par Ajoloca » 23 nov. 2006, 18:39

z'allez dire que j'radote mais bon... ;)

Puisque les données viennent de la base, je recommande d'autant plus le "=" à la place du "LIKE %" ça sera beaucoup plus efficace d'un point de vue performance et temps de traitement (il a juste à comparer 2 valeurs au lieu de vérifier si l'une n'est pas par hazard contenue dans l'autre)

Et pour peu que la table possède un index sur ce champ, la réponse sera quasi immédiate même avec un grand nombre d'enregistrement :)

A voir bien entendu, si tu as besoin d'une égalité ou qu'au contraire tu cherches volontairement des chaines qui se ressemblent
:pouce:

par Ryle » 23 nov. 2006, 18:34

z'allez dire que j'radote mais bon... ;)

Puisque les données viennent de la base, je recommande d'autant plus le "=" à la place du "LIKE %" ça sera beaucoup plus efficace d'un point de vue performance et temps de traitement (il a juste à comparer 2 valeurs au lieu de vérifier si l'une n'est pas par hazard contenue dans l'autre)

Et pour peu que la table possède un index sur ce champ, la réponse sera quasi immédiate même avec un grand nombre d'enregistrement :)

A voir bien entendu, si tu as besoin d'une égalité ou qu'au contraire tu cherches volontairement des chaines qui se ressemblent

par Ajoloca » 23 nov. 2006, 18:15

Re,
En premier
$voir2=(mysql_num_rowS($res3)); 
retournr le nombre d'enregistements lus et non pas les enregistrements eux-mêmes.

En suite un petit PB de logique
Dans cette requête
$requete=" SELECT distinct(groupe) FROM commande2"; 
tu vas avoir un certain nombre de réponses que tu traites avec
while ($voir=mysql_fetch_array($res2))
Jusque là tout va bien, mais... dans ce while tu as une nouvelle requête
$requete2="SELECT * FROM commande2 WHERE groupe LIKE '%".$voir['groupe']."%'";
Qui elle aussi retourne plusieurs résultats, il est où le while() (ou autre strcture de boucle) qui traite les résultats un par un ?

par castell » 23 nov. 2006, 18:00

Voila code que sa me donne en ce moment
$requete=" SELECT distinct(groupe) FROM commande2";
$res2 = mysql_query($requete,$link) or die ('Erreur : '.mysql_error() );


while ($voir=mysql_fetch_array($res2))
{

$requete2="SELECT * FROM commande2 WHERE groupe LIKE '%".$voir['groupe']."%'"; 
$res3 = mysql_query($requete2,$link) or die ('Erreur : '.mysql_error() );
$voir2=(mysql_num_rowS($res3));

echo "<BR><FORM method=\"POST\" action='commande.php'><table border=1>";

$nom=$voir2['nom'];

echo "<TR> bgcolor=\"#CCFFCC\"><th>Nom</th><th>Référence</th><th>Quantité</th><th>Nombre d'unité</th><th>Fournisseur</th><th>Reference fournisseur</th><th>Prix à l'unité</th><th>Prix total</th><th>Prix avec reduction</th><th>Numero de cas</th><th>Date</th><th>initiale</th><th>Commande</th></tr>";
echo"<tr>";

?>
<td><font face='Verdana' size='2'><?php echo $nom; ?></font></td>

<td><font face='Verdana' size='2'><?php echo $voir2['reference']; ?></font></td> 

<td><font face='Verdana' size='2'><?php echo $voir2['quantite']; ?></font></td>

<td><font face='Verdana' size='2'><?php echo $voir2['nombre_quantite']; ?></font></td>


<td><font face='Verdana' size='2'><?php echo $voir2['fournisseur']; ?></font></td>

<td><font face='Verdana' size='2'><?php echo $voir2['reference_fournisseur']; ?></font></td>


<td><font face='Verdana' size='2'> <?php echo $voir2['prix2'];  ?></font></td>

<td><font face='Verdana' size='2'> <?php echo $voir2['prix_total2'];  ?></font></td>

<td><font face='Verdana' size='2'> <?php echo $voir2['reduction2'];  ?> </font></td>

<td><font face='Verdana' size='2'> <?php echo $voir2['numero_cass']; ?></font></td>

<td><font face='Verdana' size='2'> <?php echo $voir2['date']; ?></font></td>

<td><font face='Verdana' size='2'><?php echo $voir2['initiale']; ?></font></td>

<?php echo "
<td class=\"truc\"><font face='Verdana' size='2'><div style=\"text-align:left;\">

<select name=\"commande[]\">

<option value=\"rien\"></option>
<option value=\"effectuee\">Effectuée</option>
<option value=\"annulee\">Annulée</option>

</select>
<input type=\"hidden\" name=\"tabnom[]\" value=\"$nom\"
</div></font></td></tr>";

echo "<tr><td colspan=11><div style=\"text-align:center;\">
<input type=\"submit\" value=\"Valider\">
<input type=\"submit\" value=\"Imprimer\" onclick=\"print();\">
<input type=\"submit\" value=\"Fermer\" onClick=\"window.close()\";></div></TD></tr>";
echo "</table></form>"; 

}

par Ajoloca » 23 nov. 2006, 17:53

Poste ton nouveau code.

par castell » 23 nov. 2006, 17:50

j'ais tester de modifié mes requetes comme tu me la montrée Ajoloca ,
Je n'ai aucun retour d'erreur mais par contre mon tableau est toujours aussi vide lol

j'ai surement du faire fausse route dans la maniere d'utiliser ma boucle : /

par Ajoloca » 23 nov. 2006, 17:41

Re,
Essaie ceci
$requete=" SELECT distinct(groupe) FROM commande2";
Les parenthèses en plus.
et
$requete2="SELECT * FROM commande2 WHERE groupe LIKE '%".$voir['groupe']."%'";

par castell » 23 nov. 2006, 17:34

Deja merci pour m'avoir fais corriger certaine erreur de syntaxe

j'ai fermer ma boucle pour whyle , mis des '' pour les trois champs qui en manquait et enfin remplacer le like de ma requete par un egale comme vous me l'aviez conseillez.

Pour ce qui es de :
while ($voir=mysql_fetch_array($res2))  
{  
$requete2="SELECT * FROM commande2 WHERE groupe LIKE '".$voir."'";
j'ai essaille de mettre a la place de mysql_fetc_array , mysql_num_rowS mais j'ai l'impression que sa me fais une boucle infinie

enfin voila
a votre avis ai je mal batis ma boucle ? que puis je mettre a la place de mysql_fetch_array pour que mes variables apparaissent dans le tableau??

merci encore

par Ryle » 23 nov. 2006, 16:08

Pareil qu'Ajoloca ! :)

Pis en plus, tu dois également avoir un soucis par ici :
while ($voir=mysql_fetch_array($res2)) 
{ 
$requete2="SELECT * FROM commande2 WHERE groupe LIKE '".$voir."'"; 
$voir est un tableau et pas une variable. Si tu affiches cette requête avant de l'exécuter, tu risques d'être surpris par la valeur de $voir :)

Par ailleurs, un LIKE sans % comme caractère joker (à moins qu'il n'y en ait dans les valeurs de ton $voir, ce dont je doute) n'a aucun intérêt et consomme beaucoup de ressource inutilement. Si c'est une égalité qu'il te faut, autant utiliser le signe "=" :)