Calcul dynamique

stephy -  
 stephy -
Bonjour,
Voici mon pb:
je veux créer une commande ;
je selectionne un fournisseur grace à une liste déroulante
une fois le fournisseur selectionné, j'ai un tableau qui saffiche avec les produit que le fournisseur vend, avec la référence et le prix associé
mon tableau contient aussi une colonne avec en titre "quantité" qui correspond à la qte de produit que l'on souhaite commandé, et une colonne 'total' qui calcul le prix*la qte
je voudrais quen entrant simplement une qte dans la ligne correspondante au produit dont jai besoin, mon total saffiche sans appuyer sur un bouton
étant donné que c un tableau contenant plusieur produit il faut associé la qte au produit, donc la jai un peu de mal,jai essayé la métode des sessions, ensuite jai opté pr le javascript, mais rien ne fonctionne correctement
merci de votre aide

voici mon code:
<?
session_start();
require_once ('inc/header.php');
$res=0;
$total=0;
?>

<center>

<h1>FOURNISSEURS ET PRODUITS ASSOCIES</h1></center>
<form name="fournisseur" action="fournisseur.php" method="POST">
<center>Fournisseur :
<select name="fournisseur">
<option value="0"></option>
<?php
$montant=0;

//on selectionne le nom des fournisseurs pour la liste deroulante
$result = mysql_query ("SELECT id_fournisseur, nom_fournisseur FROM fournisseurs ORDER BY nom_fournisseur");

if (!$result)
{
echo "Une erreur est survenue.\n";
}

while ($row = mysql_fetch_row($result))
{
echo "<option value=\"".$row[0]."\">".$row[1]."</option>";
}

?>
</select>
<input type="submit" value="OK" name="valider" />
</form>
<table border=1>

<?

echo '<tr><td align="left" colspan=6>';
if (isset($_POST['valider']) || isset($_SESSION['fournisseur']))
{
// coordonnees du fournisseur pour le devis
$result = mysql_query ("select nom_fournisseur, rue_fournisseur, cp_fournisseur, ville_fournisseur from fournisseurs where fournisseurs.id_fournisseur=".$_SESSION['fournisseur']."" );

if (!$result)
{
echo "Une erreur est survenue.\n";
}

while ($row = mysql_fetch_row($result))
{
echo '<center>';
echo $row[0];
echo '<br/><br/>';
echo "adresse : ";
echo '<br/><br/>';
echo $row[1];
echo '<br/>';
echo $row[2]." " .$row[3];
echo '</center>';
echo '<br/></td></tr><tr>';
?>
<tr>
<th>reference</th>
<th>designation</th>
<th>quantite</th>
<th>unite</th>
<th>prix</th>
<th>total</th>
</tr>
<?

if(isset($_GET['act']))
{
$action=$_GET['act'];
}

$now=date('j/m/y');
echo 'date du jour : '.$now;

$result2 = mysql_query ("select COUNT(id_produit) from produits, fournisseurs where fournisseurs.id_fournisseur=produits.id_fournisseur and fournisseurs.id_fournisseur=".$_SESSION['fournisseur']."" );

if (!$result2)
{
echo "Une erreur est survenue.\n";
}

while ($row2 = mysql_fetch_row($result2))
{
$nb=$row2[0];
}

$result1 = mysql_query ("select id_produit, nom_produit, prix_produit, nom_unite from produits, unite_produits , fournisseurs where fournisseurs.id_fournisseur=produits.id_fournisseur and unite_produits.id_unite=produits.unite_produit and fournisseurs.id_fournisseur=".$_SESSION['fournisseur']."" );

if (!$result1)
{
echo "Une erreur est survenue.\n";
}

$j=1;
echo "<br/>";
while ($row1 = mysql_fetch_row($result1))
{
if ($j<$nb)
{

echo "</td><td>";

echo $row1[0];
echo "</td><td>";
echo $row1[1];
echo "<td>";

echo '<input type="text" value="" >';
//echo $_SESSION['quantite'][$j];
echo "</td><td>";
echo $row1[3];
echo "</td><td>";
echo $row1[2];
echo "</td><td>";

echo '<input type="text" id="total" name="total" value="">';
// echo $total;
echo "</td>";

echo "</tr>";

}
}
echo '<tr><td colspan="5" align="right">';
echo '<b>Total HT </b>: </td><td>'.$_SESSION['montant']. '€';
echo '</td></tr><tr><td colspan="6">';
echo '</td></tr></table>';
echo '<a href="exportation.php">CREER LA COMMANDE</a>';
// echo '<input type="submit" value="CREER LA COMMANDE" name="valider" />';
echo '<br/>';
}

}
?>
A voir également:

4 réponses

guimton Messages postés 89 Statut Membre 10
 
Salut,

sur le input contenant la quantité du produit as tu essayé de faire un:

onkeydown = "document.getElementById('id_de_ton_input_total').value = (this * document.getElementById('id_de_ton_input_prixduproduit').value);"

Et n'oublies pas de tester si on a rentré un caractère numérique, sinon ça te mettra une undifined dans ton input total
0
stephy
 
je ne travaillle pas dans un formulaire, c pr ça que je ne sais pas si je mi prend de la bonne façon
seule ma qte se trouve ds un input
je ne comprend pas ce que vs voulez dire pr 'id_de_ton_input_prixduproduit' ?
0
stephy
 
je ne travail pas dans un formulaire, c juste ma qte qui est ds un input, c pr cela que je ne sais pas si je mi prend bien
pour calculer le montant total je n'aurais juste a faire un $montant=$montant+$total dans une boucle;
le pb c pr le total en fasse de la ligne souhaité
je ne comprend pas ce que vous voulais dire pour 'id_de_ton_input_prixduproduit' ?
0
stephy
 
J'ai essayé avec ce que vous m'avez conseillé, mais qd je saisie une qte, le total ne saffiche pas

while ($row1 = mysql_fetch_row($result1))
{
if ($j<$nb)
{
echo "</td><td>";
echo $row1[0];
echo "</td><td>";
echo $row1[1];
echo "<td>";

echo '<input type="text" id="qte" value="" onkeydown = "document.getElementById(\'total\').value = (this * document.getElementById("prix").value);" >';

//echo $_SESSION['quantite'][$j];
echo "</td><td>";
echo '<input type="text" id="prix" value="'.$row1[3].'">';
//echo $row1[3];
echo "</td><td>";
echo $row1[2];
echo "</td><td>";

echo '<input type="text" id="total" name="total" value="">';
// echo $total;
echo "</td>";

echo "</tr>";
$montant=$montant+$total;
}
}
0
guimton Messages postés 89 Statut Membre 10
 
re-bonjour:

les id tu as l'air ed les avoir bien mis.

essaye de mettre cela:
echo "<input type=\"text\" id=\"qte\" value=\"\" onkeydown = \"document.getElementById('total').value = (this.value * document.getElementById('prix').value);\" >";

pour voir si ça marche.

Tu es obligé de passer par du javascript pour mettre à jour le champ total.
0
stephy > guimton Messages postés 89 Statut Membre
 
Nikel ça fonctionne merci!
par contre ça marche pour une seule ligne
si je saisie une qte pour plusieurs pdt, c tjr la mm ligne qui change
je suppose qu'il faut que je mette mes valeurs ds un tableau?
0
guimton Messages postés 89 Statut Membre 10 > stephy
 
non, il faut que tu crée tes input dynamiquement, afin de créer des id dynamique.

ainsi, tu peux faire:

dans ton while: ($id = id unique de chaque ligne de ta requete)

echo "<input id='prix".$id."'

et dans le onkeypress => pense à mettre les id suivi du numéro.

et echo "<input id='total".$id"'

comme cela ils ont un id unique.

sinon, c'est normal que ça marche pas, car ils ont tous le même nom.
0
stephy > guimton Messages postés 89 Statut Membre
 
Merci guimtond'avoir pris le tps de me répondre,
voici donc mon code avec les $id dynamique, pour l'instant le code se fait tjr sur la mm ligne:

while ($row1 = mysql_fetch_row($result1))
{
if ($i<$nb)
{
echo "</td><td>";
//reference du produit
echo $row1[0];
echo "</td><td>";
//designation du produit
echo $row1[1];
echo "<td>";
//quantite du produit
echo "<input type=\"text\" id=\"qte".$i."\" value=\"\" onkeydown = \"document.getElementById('total".$i."').value = (this.value * document.getElementById('prix".$i."').value);\" >";
echo "</td><td>";
//unite du produit
echo $row1[3];
echo "</td><td>";
// echo $row1[2];
//prix du produit
echo "<input type=\"text\" id=\"prix".$i."\"
name=\"prix\" readonly value=\"$row1[2]\" />";
echo "</td><td>";
echo "<input type=\"text\" id=\"total".$i."\" name=\"total\" readonly value=\"\" >";
echo "</td>";
echo "</tr>";
$i=$i++;
$montant=$montant+$total;
}
}
0
stephy > guimton Messages postés 89 Statut Membre
 
bon ça yé ça marche, javais une petite erreur avec mon $i, un énorme merci guimton pour ton aide, sinon ji serais encor ;-)
0
maximehome Messages postés 59 Statut Membre 1
 
Stephy t'a l'air balèse en prog, fodrai que l'on en parle mieux tout les deux, j'ai quelque question a te poser, nottement sur un médiathèque...
Bonne soirée! (l)
0