Aide utiliser une valeur a la fois

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 : Aide utiliser une valeur a la fois

par guigui69 » 26 déc. 2007, 13:37

C'est bon j'ai trouver ou cela coinçait dans mon code, mais j'ai encore une petite question,

Comment faire pour que dans ma page générer à la place d'une place vide (null) j'ai un 0 a la place.? A quel niveau du code je doit agirn et quel code je doit mettre pour remplacer, car j'ai tester mais je ne suis jamais arriver a le faire fonctionner.

C'est a ce niveau la:

Code : Tout sélectionner

while($ligne = mysql_fetch_assoc($query)){ echo '<td width=200><u>'.$ligne["ref_pdt"].'</u></td>'; $totalmat=$totalmat+$ligne["somme1"]+$ligne["somme2"]; echo '<td width=300><u>'.$totalmat.'</u></td>'; echo '<td width=300><u>'.$ligne["somme3"].'</u></td>'; echo '<td width=300><u>'.$ligne["somme4"].'</u></td>'; $total=$total+$ligne["somme1"]+$ligne["somme2"]+$ligne["somme3"]+$ligne["somme4"]; echo '<td width=300><u>' .$total.'</u></td>'; echo '</tr>';
JE voudrait dire que Si .$ligne["somme4"].' est egal à " " alors on remplace par 0 mais je ne voit pas comment mettre le code en place

Merci d'avance


guigui69

par guigui69 » 24 déc. 2007, 10:39

Si quelqu'un aurait une petite aide pour moi sa serai la bienvenue.

Merci

guigui69

==================================
MAJ, j'arrive a avoir quelque chose si dans ma liste deroulante je sélection q'un produit j'arrive a avoir mon tableau, par contre si j'en sélectionne 2 il me sort ERREUR.

Voici le code de ma page php:

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html lang="fr"> <head> <?php $matricule = $_POST['matricule']; //$matricule = 23; print("<center>$matricule</center>"); $server="******"; $user="*****"; $pass="*****"; $db="pdr"; mysql_connect($server,$user,$pass) or die('erreur de connexion'); mysql_select_db($db) or die ('impossible de se connecter a la base'); $listeMatriculeSQL = array(); foreach ($_POST['matricule'] as $matricule) { $listeMatriculeSQL[] = '\'' . mysql_real_escape_string($matricule) . '\''; } $req = implode(', ', $listeMatriculeSQL); echo $req; $requete = "SELECT ref_pdt, (SELECT FORMAT(SUM(qte_m*pu_m)/(SUM(qte_m)-(SUM(qte_m)/100)*perte_pdt)*poids_u_m_pdt,4) as prix_u_m FROM recette INNER JOIN matiere ON recette.code_m=matiere.code_m INNER JOIN produit ON recette.ref_pdt=produit.ref_pdt WHERE produit.ref_pdt IN ($req)AND recette.fourrage_rctt=0) AS somme1, (SELECT FORMAT(SUM(qte_m*pu_m)/(SUM(qte_m)-(SUM(qte_m)/100)*perte_pdt)*poids_u_f_pdt,4) as prix_u_f FROM recette INNER JOIN matiere ON recette.code_m=matiere.code_m INNER JOIN produit ON recette.ref_pdt=produit.ref_pdt WHERE produit.ref_pdt IN ($req)AND recette.fourrage_rctt=1) AS somme2, (SELECT FORMAT(SUM(qte_emb*pu_emb)/nbre_piece_fab_main,4) AS test2 FROM recette_emb LEFT JOIN emballage ON recette_emb.id_emb=emballage.id_emb LEFT JOIN main_d_oeuvre ON recette_emb.ref_pdt = main_d_oeuvre.ref_pdt LEFT JOIN produit ON produit.ref_pdt=recette_emb.ref_pdt WHERE produit.ref_pdt IN ($req)) AS somme3, (SELECT FORMAT((nbre_per_main*nbre_heure_main*taux_hor_main)/nbre_piece_fab_main,4) AS pdr_m_o_u FROM main_d_oeuvre INNER JOIN produit ON main_d_oeuvre.ref_pdt=produit.ref_pdt WHERE produit.ref_pdt IN ($req)) AS somme4, (SELECT FORMAT(SUM(qte_m*pu_m)/(SUM(qte_m)-(SUM(qte_m)/100)*perte_pdt)*poids_u_m_pdt,4) as prix_u_m FROM recette INNER JOIN matiere ON recette.code_m=matiere.code_m INNER JOIN produit ON recette.ref_pdt=produit.ref_pdt WHERE produit.ref_pdt IN ($req)AND recette.fourrage_rctt=0) + (SELECT FORMAT(SUM(qte_m*pu_m)/(SUM(qte_m)-(SUM(qte_m)/100)*perte_pdt)*poids_u_f_pdt,4) as prix_u_f FROM recette INNER JOIN matiere ON recette.code_m=matiere.code_m INNER JOIN produit ON recette.ref_pdt=produit.ref_pdt WHERE produit.ref_pdt IN ($req)AND recette.fourrage_rctt=1) + (SELECT FORMAT(SUM(qte_emb*pu_emb)/nbre_piece_fab_main,4) AS test2 FROM recette_emb LEFT JOIN emballage ON recette_emb.id_emb=emballage.id_emb LEFT JOIN main_d_oeuvre ON recette_emb.ref_pdt = main_d_oeuvre.ref_pdt LEFT JOIN produit ON produit.ref_pdt=recette_emb.ref_pdt WHERE produit.ref_pdt IN ($req)) + (SELECT FORMAT((nbre_per_main*nbre_heure_main*taux_hor_main)/nbre_piece_fab_main,4) AS pdr_m_o_u FROM main_d_oeuvre INNER JOIN produit ON main_d_oeuvre.ref_pdt=produit.ref_pdt WHERE produit.ref_pdt IN ($req)) AS total FROM produit WHERE ref_pdt IN ($req);"; echo $requete; while($ligne = mysql_fetch_assoc($query)){ echo '<br>'; echo '<b>1=> Ref_pdt : '.$ligne["ref_pdt"].'</b>';echo '<br>'; echo '<b>1=> Somme Matiere Premiere : '.$ligne["somme1"].'</b>';echo '<br>'; echo '<b>1=> Somme Fourrage : '.$ligne["somme2"].'</b>';echo '<br>'; echo '<b>1=> Somme Emballage : '.$ligne["somme3"].'</b>';echo '<br>'; echo '<b>1=> Somme Mains D oeuvre : '.$ligne["somme4"].'</b>';echo '<br>'; echo '<b>1=>Somme Total : '.$ligne["total"].'</b>';echo '<br>'; } //while( $ligne2 = mysql_fetch_assoc($query2)){ // echo '<br>'; // echo '<b>2=>'.$ligne2["prix_u_f"].'</b>'; //} ?>
Pourriez vous me dire qu'est qui ne va pas ?

Je pense mettre tromper, je veut que sa soit de la manière suivante,
exemple je prend 2 produit (22 et 23), la requête se lance pour le produit 22, et affiche les informations, puis on passe au produit 23 etc...

(En faite un produit = une ligne)

Merci d'avance pour votre aide,

guigui69

par guigui69 » 21 déc. 2007, 13:05

En fait de faire fusionner ces 4 requêtes en une seul, comment faire pour les condition WHERE, car ça sera toujours le même produit, mais dans les premières requête il y a ça en plus comme condition
recette.fourrage_rctt=0
ou
recette.fourrage_rctt=1
Alors que les autres ne l'on pas.

Comment faire?

Merci

guigui69

par d0m » 21 déc. 2007, 12:43

d'utiliser une requete SQL qui fait tout le travail y compris la somme final.

par guigui69 » 21 déc. 2007, 12:19

Bonjour merci pour ta réponse.

En fait pour mon tableau j'aurai

4 colonne qui seront remplis par une requête chacune:

Colonne 1|Colonne 2|Colonne 3|Colonne 4|Colonne5
$requete |$requete2|$requete3|$requete4|=$requete +$requete2 +$requete3 +$requete4
$requete = "SELECT FORMAT(SUM(qte_m*pu_m)/(SUM(qte_m)-(SUM(qte_m)/100)*perte_pdt)*poids_u_m_pdt,4) as prix_u_m FROM recette INNER JOIN matiere ON recette.code_m=matiere.code_m INNER JOIN produit ON recette.ref_pdt=produit.ref_pdt WHERE produit.ref_pdt IN ($req)AND
recette.fourrage_rctt=0;";
$requete2 = "SELECT FORMAT(SUM(qte_m*pu_m)/(SUM(qte_m)-(SUM(qte_m)/100)*perte_pdt)*poids_u_f_pdt,4) as prix_u_f FROM recette INNER JOIN matiere ON recette.code_m=matiere.code_m INNER JOIN produit ON recette.ref_pdt=produit.ref_pdt WHERE produit.ref_pdt IN ($req)AND recette.fourrage_rctt=1;";
$requete3 = "SELECT FORMAT(SUM(qte_emb*pu_emb)/nbre_piece_fab_main,4) AS test2 FROM recette_emb LEFT JOIN emballage ON recette_emb.id_emb=emballage.id_emb LEFT JOIN main_d_oeuvre ON recette_emb.ref_pdt = main_d_oeuvre.ref_pdt LEFT JOIN produit ON produit.ref_pdt=recette_emb.ref_pdt WHERE produit.ref_pdt IN ($req);";
$requete4 = "SELECT id_main, nbre_per_main, nbre_heure_main, taux_hor_main, nbre_piece_fab_main, nbre_per_main*nbre_heure_main*taux_hor_main AS totalcout, FORMAT((nbre_per_main*nbre_heure_main*taux_hor_main)/nbre_piece_fab_main,4) AS pdr_m_o_u FROM main_d_oeuvre INNER JOIN produit ON main_d_oeuvre.ref_pdt=produit.ref_pdt WHERE produit.ref_pdt IN ($req);";
Plus une 5ème colonne qui fera la somme des lignes.

Quel est la meilleur solution pour y arriver ?

Merci

guigui69

par d0m » 21 déc. 2007, 09:40

Est-il possible que lorsque que la reconnait renvoir NULL pour un résultat celui ce transforme en 0.?
Pourquoi ne pas mettre la valeur 0 par défaut au lieu de null? Cela éviterai ce genre de problème.

A part ça, tu peux faire un traitement PHP avant l'affichage avec des tableaux
et en mettant par exemple en clé la réference du produit puisque je crois que tu as une ligne par produit.
$tableau = array();
while( $ligne2 = mysql_fetch_assoc($query2) ){
  $tableau[$id_produit]['valeur1'] = ....;
}
while( $ligne3 = mysql_fetch_assoc($query3) ){
  $tableau[$id_produit]['valeur2'] = ....;
}
tu auras donc un tableau qui contient pour chaque produit les valeurs. Et fire un test si un produit ne contient pas valeur1 ou valeur2 afficher 0.

MAis tu ne pourrais pas faire une seule requête au lieu de 2? Ca simplifierai largement le traitement.

par guigui69 » 21 déc. 2007, 00:05

Comment je pourrais faire un tableau pour que par la suite il me fasse un calcul? avec un tableau array est ce possible ? Si oui comment, car la première requête va remplir la premier colonne et la seconde requête la seconde colonne etc....

Merci d'avance

guigui69

par guigui69 » 19 déc. 2007, 15:18

Ben en fait certain sont vide, donc cela va poser des problèmes.

Est-il possible que lorsque que la reconnait renvoir NULL pour un résultat celui ce transforme en 0.?

Merci

guigui69

par d0m » 19 déc. 2007, 14:34

Le meilleur moyen de savoir c'est encore d'essayer et de tester.

Le problème ici c'est que la boucle
while( $ligne2 = mysql_fetch_assoc($query2) &&  $ligne3 = mysql_fetch_assoc($query3))
va s'executer jusqu'à ce que l'une des 2 conditions soit fausse.
C'est à dire que si l'une de tes requêtes renvoie plus de résultats que l'autre, tu ne parcouras pas les dernières lignes de celle ci.
Si tu es sûr que les 2 renverront toujours le même nombre d'enregistrements alors ça devrait passer.

Aide utiliser une valeur a la fois

par guigui69 » 19 déc. 2007, 13:31

Bonjour à tous,

Allez voir plus bas


Merci


guigui69