atreides51
Messages postés11Date d'inscriptionlundi 13 novembre 2000StatutMembreDernière intervention18 décembre 2008
-
7 juil. 2008 à 21:20
JoJo738
Messages postés1267Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention29 juin 2010
-
8 juil. 2008 à 23:03
Bonjour,
je cherche un truc tout bete du style, j'envoie dans un fichier req.php plusieurs valeurs d'un champ.ensuite en fonction de ses valeurs je cherche à les additionner entre elles groupé par fournisseur et afficher le résultat. j'ai essayé avec la fonction SUM(prix), la condition et group by fournisseur mais ils ne m'aditionne pas le resultat lorsque je choisi plusieurs produits...mon champ prix est en VARCHAR...
quelqu'un pourrait m'expliquer comment m'approcher de la réponse à ma requête ?..
Merci d'avance
for($i=0;$i<$nb_code_produit;$i++)
{
if (isset($_POST["mavaleur$i"]))
{
$le_produit=$_POST["mavaleur$i"];
}
}
$query = "SELECT code_produit, fournisseur, SUM(prix) as masomme FROM catalogue_produit WHERE code_produit='$le_produit' GROUP BY fournisseur";
$somme = mysql_query($query) or die ('Erreur : '.mysql_error() );
while($code_f=mysql_fetch_array($somme))
{
echo "Le total chez " .$code_f["fournisseur"]; . " est de : " . $code_f['masomme'] . "
";
}
?>
JoJo738
Messages postés1267Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention29 juin 20101 8 juil. 2008 à 22:29
Re,
Bon, j'ai fait un code qui fonctionne ^^ (la flemme de mettre en couelur)
En fait, le but est de récupérer les tableau de valeurs ... quoi de mieux qu'un Array ^^ Et Html nous offre cette possibilité ! (regarde le code rouge) Et il ne reste qu'a traité (2eme code rouge) comme un simpel Array. Si tu as besoin de plus d'informations demande :p
<?php
include './connexion.php';
$sql = 'SELECT code, produit, stock_actuel, stock_mini, mesure FROM rep_produits WHERE stock_actuel <= stock_mini order by produit';
$resultat = mysql_query($sql) or die('Une erreur systeme s\'est glissée: ' . mysql_error());
// Le formulaire à t'il été envoyé ? Et _POST['produits'] est-il un Array ??
// -> cela permet une meilleur gestion. Un simple parcourt de tableau suffit,
// et on récupère toutes les valeurs, facilitant par la même occasion la
// gestion
if( isset($_POST['produits']) && is_array($_POST['produits']) )
{
$list_id_produits = array();
foreach( $_POST['produits'] as $id_produit )
{
// Et autres vérifications, si besoin :p
if( !is_numeric($id_produit) )
{
continue;
}
$list_id_produits[] = $id_produit;
}
// $list_id_produit contient donc la liste de tous les produits à tester ...
// Soit on fait directement dans le SQL, soit on fait une reqûete par produit
// ou on lit tout et on prend ce qu'on à besoin ...
// -> 1er solution ^__^
// On crée une chaîne de caractères avec les ID des produits pour SQL $sql_list_id_produits 'code_produit ' . implode(' OR code_produit = ', $list_id_produits);
// Si besoin : // { $sql_list_id_produits 'code_produit "' . implode('" OR code_produit = "', $list_id_produits) . '"'; }
## PARTIE I
// On fait la liste de tous les produits demandés et on prend les informations utiles ...
$list_produits_fournisseurs = array();
$sql = '
SELECT
code_produit, fournisseur, prix, table2.produit as name_produit
FROM
catalogue_produit
LEFT JOIN rep_produits as table2 ON table2.code = code_produit
WHERE
(' . $sql_list_id_produits . ')';
$resultats = mysql_query($sql) or die ('SQL Erreur : '.mysql_error() );
while( $row = mysql_fetch_assoc($resultats ))
{
$list_produits_fournisseurs[$row['fournisseur']][$row['code_produit']] = $row;
}
## PARTIE II
// On fait le traitement par fournisseur, le total et le nombre de produits ;)
// L'ideal serait de trouver un moyen de récupérer tous les code_produits (séparés par quelque chose (caractère)) ...
// malheureusement je ne sais pas faire ça ... et je ne voie pas si c'est possible :s
// Donc, on sépare les deux requetes ^^
$sql = '
SELECT
fournisseur, SUM(prix) as prix_total, COUNT(code_produit) as nbre_produits
FROM
catalogue_produit
WHERE
(' . $sql_list_id_produits . ')
GROUP BY fournisseur';
$resultats = mysql_query($sql) or die ('SQL Erreur : '.mysql_error() );
while( $row = mysql_fetch_assoc($resultats ))
{
// On vérifie qu'il existe une entrée par apport à la 1er requete (normalement pas de problème ^^) -> BUG de MySQL ??
if( isset($list_produits_fournisseurs[$row['fournisseur']]) )
{
// On affiche de détail
echo '
Détail fournisseur n°', $row['fournisseur'], ' :
';
// ... par rapport à la 1er reqûete
foreach( $list_produits_fournisseurs[$row['fournisseur']] as $code_produit => $row_detail_produit )
{
// Bla bla bla ...
echo '
<li>', $row_detail_produit['name_produit'], ' (ID ', $row_detail_produit['code_produit'], ') ', $row_detail_produit['prix'], '</li>';
}
echo '
Total : ', $row['prix_total'], ' (', $row['nbre_produits'], ' articles)
JoJo738
Messages postés1267Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention29 juin 20101 8 juil. 2008 à 00:11
Salut !
Hum ... je ne comprend pas trop ton code :s
Bon, tu sélectionne le code_produit, le fournisseur et la somme des prix de ton catalogue quand code_produit = $le_produit (une erreur d'ailleurs ! Ta boucle n'as aps de sens ! Seule la dernière valeur est gardée ...)
Donc, tu récuperes ce résultat ... qui corespond en fait à par exemple pour code_produit = 34
1 34 1 12.20
3 34 2 12.25
5 34 3 12.28
Ensuite, tu fais une boucle, et affiche le total chez X ... En fait, tu veux (selon ton code) afficher la table telle qu'elle est ... alors quel est l'utilité de SUM() ??
Peux-tu m'expliquer ton code ??
Sinon, coté récupération de données ... que récupères-tu (plusieurs données ? une seule ?) ??
Selon ton code, il existe plusieurs champs mavaleurX, et seul le dernier est gardé dans $le_produit ...
Ne veux-tu pas récupérer plusieurs codes produits ???
<hr />Si ma reponse te convient, merci de l'accepter !
atreides51
Messages postés11Date d'inscriptionlundi 13 novembre 2000StatutMembreDernière intervention18 décembre 2008 8 juil. 2008 à 15:39
Bonjour Jojo,
merci de prendre un peu de ton temps pour m'aider dans cette appli qui j'en suis sur est toute bete mais je m'en sors pas...
voici ma page formulaire :
<?php
include "../connexion.php";
$rq="SELECT code,produit,stock_actuel,stock_mini,mesure FROM rep_produits WHERE stock_actuel <= stock_mini order by produit";
$resultat=mysql_query($rq) or die("Une erreur systeme s'est glissée: ".mysql_error());
$nb=mysql_num_rows($resultat);
if ($nb>0)
{
?>
<form name="form1" method="post" action="req_caddie_formulaire.php">
<?
$nb_code_produit=0;
while($lignes=mysql_fetch_array($resultat,MYSQL_NUM)) // ou bien: while ($lignes=mysql_fetch_rows($resultat))
{
if ($lignes[2] < $lignes[3])
{
?>
----
</form>
<?
mysql_free_result($resultat);
}
mysql_close();
?>
/***********************/
ensuite avec $nb_code_produit je compte le nombre de variable que je fais passer dans le second fichier et je recupere les valeurs des variables incrémenter avec :
$nb_code_produit=$_POST['nb_code_produit'];for($i=0;$i<$nb_code_produit;$i++)
{
if (isset($_POST["mavaleur$i"]))
{
$le_produit=$_POST["mavaleur$i"];
}
}
$le_produit me sort donc tous les codes produits car si je fais un echo $le_produit.'
';
j'ai bien tous mes codes produits l'un en dessous des autres dans mon fichier req_caddie_formulaire.php et c'est apres que je veux en fonction de tout ces codes produit, les additionner et les regrouper par fournisseur.
Selon ton code, il existe plusieurs champs mavaleurX, et seul le dernier est gardé dans $le_produit ...
Ne veux-tu pas récupérer plusieurs codes produits ???
Si exactement ca.je veux simplement additionner le champ "prix" et regrouper par fournisseur seulement ces codes produits qui auront été cochés dans le fichier formulaire ci dessus.
Donc, tu récuperes ce résultat ... qui corespond en fait à par exemple pour code_produit = 34
1 34 1 12.20
3 34 2 12.25
5 34 3 12.28
oui mais je n'arrive pas a additionner plusieurs "prix" en fonction des codes produits choisis dans le fichier formulaire qui envoi tous ces codes produits et les regrouper par fournisseur.
vois tu ce que je veux dire?
c'est dur?
Merci
JoJo738
Messages postés1267Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention29 juin 20101 8 juil. 2008 à 19:33
Je n'ai pas trop regarder, là je vais manger ^^
Mais :
for($i=0;$i<$nb_code_produit;$i++)
{
if (isset($_POST["mavaleur$i"]))
{
$le_produit=$_POST["mavaleur$i"];
}
}
C'est faux ! Si tu fais tout de suite un echo $le_produit; oki, ca va marcher. Mais si apprès tu fais un echo(); ... la tu ne vas récupérer que le dernier.
Après manger je te montre une autre méthode beaucoup plus simple ;)
(passer en _POST un tableau -> mavaleur['id_array'])
Après pour ton traitement, tu peux faire un traitement dirrectement sur le SQL ou après ... tout dépend ce que tu veux faire ... Je vais étudier ça ;)
Pour m'aider dans ma tache, pourrais tu me passer ton code SQL (création de al table, et quelques enregistrements ???) J'ai la flemme de tout créer :p
<hr />Si ma reponse te convient, merci de l'accepter !
Vous n’avez pas trouvé la réponse que vous recherchez ?
formulaire_caddie.php
<?php
include "../connexion.php";
$rq="SELECT code,produit,stock_actuel,stock_mini,mesure FROM rep_produits WHERE stock_actuel <= stock_mini order by produit";
$resultat=mysql_query($rq) or die("Une erreur systeme s'est glissée: ".mysql_error());
$nb=mysql_num_rows($resultat);
if ($nb>0)
{
?>
<form name="form1" method="post" action="req_caddie_formulaire.php">
<?
$nb_code_produit=0;
while($lignes=mysql_fetch_array($resultat,MYSQL_NUM)) // ou bien: while ($lignes=mysql_fetch_rows($resultat))
{
if ($lignes[2] < $lignes[3])
{
?>
----
$query = "SELECT code_produit, fournisseur, SUM(prix) as masomme FROM catalogue_produit WHERE code_produit='$le_produit' GROUP BY fournisseur ";
$somme = mysql_query($query) or die ('Erreur : '.mysql_error() );
while($code_f=mysql_fetch_array($somme))
{
echo "Le total chez " . $code_f["fournisseur"] . " est de : " . $code_f['masomme'] . "
";
}
?>
Voila les 2 fichiers et les 2 tables et je crois entre apercevoir ce que tu veux dire par la boucle pour sortir $le_produit...
mais les array j'ai encore un peu de mal a comprendre leur utilisation hormis quand je fais du pompage betement...
atreides51
Messages postés11Date d'inscriptionlundi 13 novembre 2000StatutMembreDernière intervention18 décembre 2008 8 juil. 2008 à 22:51
Jojo tu es un super Chef !!!!
voilà 3 jours que je coince sur ce truc car il me manque quelques base en php et quand on a pas quelqu'un pres de soi
pour expliquer calmement eh ben c'est pas evident ...
je vais 'éplucher ce code pour mieux comprendre des fonctions que tu as mis.
et tu maitrises super le php, pas comme moi LOL
si je rencontre quelques problemes épineux pour moi, pourrai je te demander conseil encore?
Un Grand merci pour ton aide je vais pouvoir devellopper davantage mon programme et utiliser session_start(); pour ce type de formulaire
Encore merci et je te souhaite une bonne soirée !
Webamicalement
Florian
JoJo738
Messages postés1267Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention29 juin 20101 8 juil. 2008 à 23:03
^^
Je suis là, pas de problème !
Enfin, je me suis quand même un peu creusé la tête ... je voulait tout rasemblait en une seule requête, mais ce n'est apparamment pas possible (enfin, avec une certaine méthode si ... mais bon .. je l'aime pas ^^ (ORDER BY fournisseur, et mettre un bout de code suplementaire pour savoir si c'est un nouveau fournisseur ou pas ... bla bla bla ^^) Berk ! ^^)
Sinon, je rajouterais un petit ORBER BY code_produit ou name_produit dans la 1er reqûete, pour avoir un rendu uniformisé ;)
Ah, et fait attention au include ;) je l'ai legerement modifié pour mes besoins :p
Aller ! sur ce, bonnen nuit ^^ Et bon courage :D
<hr />Si ma reponse te convient, merci de l'accepter !