UPDATE

Eléphant du PHP | 150 Messages

13 mai 2006, 15:20

Bonjour à tous,

Je suis bloqué sur un problème d'UPDATE d'une table SQL.
En fait, j'ai une table de prix que je voudrais mettre en H.T. : donc sélectionner, puis modifier après un calcul simple.
Je ne vois pas clairement si c'est la partie php ou mysql qui cloche.
Pouvez-vous me donner votre avis ?
<?php

include('/connect.php');

$req = mysql_query('SELECT cp_prod, cp_pu, cp_pu1, cp_pu2, cp_pu3 FROM produits');


while ($row = mysql_fetch_array($req)) {

        $ref = $row[cp_prod];
        $nb = count($ref);
        
        for ($i = 0; $i < $nb; $i++) {

                $ref = $row[cp_prod][$i];
                $prixini = $row[cp_pu][$i];
                $prix1 = $row[cp_pu1][$i];
                $prix2 = $row[cp_pu2][$i];
                $prix3 = $row[cp_pu3][$i];
                
                $prixini_new = $prixini/1.196;
                $prix1_new = $prix1 / 1.196;
                $prix2_new = $prix2 / 1.196;
                $prix3_new = $prix3 / 1.196;
                
                $prixini_n = round($prixini_new, 2);
                $prix1_n = round($prix1_new, 2);
                $prix2_n = round($prix2_new, 2);
                $prix3_n = round($prix3_new, 2);
                
                $maj_tva1 = mysql_query('UPDATE produits_L SET cp_prod_pu ="'.$prixini_n.'" WHERE cp_prod_prod ="'.$prixini.'"');
                $maj_tva2 = mysql_query('UPDATE produits_L SET cp_prod_pu1 ="'.$prix1_n.'" WHERE cp_prod_prod ="'.$prix1.'"');
                $maj_tva3 = mysql_query('UPDATE produits_L SET cp_prod_pu2 ="'.$prix2_n.'" WHERE cp_prod_prod ="'.$prix2.'"');
                $maj_tva4 = mysql_query('UPDATE produits_L SET cp_prod_pu3 ="'.$prix3_n.'" WHERE cp_prod_prod ="'.$prix3.'"');
                
        }
}
Merci d'avance de votre aide.

Eléphant du PHP | 150 Messages

13 mai 2006, 15:23

Pardon, je reposte: la fin du script n'était pas bonne.
 

include('/connect.php'); 

$req = mysql_query('SELECT cp_prod, cp_pu, cp_pu1, cp_pu2, cp_pu3 FROM produits'); 


while ($row = mysql_fetch_array($req)) { 

        $ref = $row[cp_prod]; 
        $nb = count($ref); 
         
        for ($i = 0; $i < $nb; $i++) { 

                $ref = $row[cp_prod][$i]; 
                $prixini = $row[cp_pu][$i]; 
                $prix1 = $row[cp_pu1][$i]; 
                $prix2 = $row[cp_pu2][$i]; 
                $prix3 = $row[cp_pu3][$i]; 
                 
                $prixini_new = $prixini/1.196; 
                $prix1_new = $prix1 / 1.196; 
                $prix2_new = $prix2 / 1.196; 
                $prix3_new = $prix3 / 1.196; 
                 
                $prixini_n = round($prixini_new, 2); 
                $prix1_n = round($prix1_new, 2); 
                $prix2_n = round($prix2_new, 2); 
                $prix3_n = round($prix3_new, 2); 
                 
                $maj_tva1 = mysql_query('UPDATE produits SET cp_pu ="'.$prixini_n.'" WHERE cp_prod ="'.$prixini.'"'); 
                $maj_tva2 = mysql_query('UPDATE produits SET cp_pu1 ="'.$prix1_n.'" WHERE cp_prod ="'.$prix1.'"'); 
                $maj_tva3 = mysql_query('UPDATE produits SET cp_pu2 ="'.$prix2_n.'" WHERE cp_prod ="'.$prix2.'"'); 
                $maj_tva4 = mysql_query('UPDATE produits SET cp_pu3 ="'.$prix3_n.'" WHERE cp_prod ="'.$prix3.'"'); 
                 
        } 
}

Mammouth du PHP | 19672 Messages

13 mai 2006, 15:53

De toutes façnos aucune des requêtes n'es bonne si j'interprète correctement.

Si dans ra requête initiale le champ "cp_prod" est la clé primaire du produit, tout le comptage que tu fais et la boucle imbriquée ne servent à rien et sauf à créer des erreurs : proposition de corrigé, tu vas voir comment un grand coup de sabre peut éclaircir un problème ;)
<?php
include('/connect.php');

$req = mysql_query('SELECT cp_prod, cp_pu, cp_pu1, cp_pu2, cp_pu3 FROM produits');
while(($row = mysql_fetch_array($req)) != false)
{
    $prixini_n = round(($row['cp_pu'] / 1.196), 2);
    $prix1_n = round(($row['cp_pu1'] / 1.196), 2);
    $prix2_n = round(($row['cp_pu2'] / 1.196), 2);
    $prix3_n = round(($row['cp_pu3'] / 1.196), 2);

    $sql = "UPDATE produits SET ".
           "cp_pu ='". $prixini_n ."' ".
           "cp_pu1 ='". $prix1_n ."' ".
           "cp_pu2 ='". $prix2_n ."' ".
           "cp_pu3 ='". $prix3_n ."' ".
           "WHERE cp_prod = ". $row['cp_prod'] .";";
    $maj_tva = mysql_query($sql);
}
?>
Moins de fioritures, une seule requête update par tour de boucle et tu vas tout mettre à jour normalement ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 377 Messages

13 mai 2006, 15:58

et
<?php 
include('/connect.php');
$sql="UPDATE produits SET cp_pu=cp_pu/1.196, cp_pu1=cp_pu1/1.196, cp_pu2=cp_pu2/1.196, cp_pu3=cp_pu3/1.196";
mysql_query($sql);
?>
ça marcherait pas?
Petit scarabée deviendra grand

Mammouth du PHP | 19672 Messages

13 mai 2006, 16:03

Peut-être bien, à tester et effectivement, ce serait encore plus rapide.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

13 mai 2006, 18:37

Oui ! ça marche, merci à tous. J'ai appliqué la structure de Cyrano et l'idée de regrouper les différentes colonnes dans la requête venant de Shrell, et j'en ai profité aussi pour supprimer la varible $sql, pour tout faire passer dans le dernier query.
Merci pour le coup de sabre ! :)

A bientôt.