Problème d'UPDATE MULTIPLE

Petit nouveau ! | 9 Messages

28 août 2008, 10:08

Bonjour,

voici mon problème, j'essai en ce moment de développer une application pour gérer mes comptes bancaires.

jusqu'ici cela ce passait bien jusqu'au moment ou je fais des modif sur un enregistrement de ma compta cela modifie l'ensemble des toto.

voici un exemple concret :

credit=10 , debit=0, total=20
credit=0 , debit=5, total=15
credit=15 , debit=0, total=30

bon voila le blem si je modifie la premiere ligen et que je rajoute 10 en credit le total des autres lignes est modifié, donc j'essaie de faire un update multiple mais rien y fait.

voici mon code de ma page de traitement :
<?php
$id = $_GET['id'];
$id2 = $id - 1;
$id3 = $id + 1;
$datep = $_POST['datep2']; 
$date_uk = substr($datep,6,4)."-".substr($datep,3,2)."-".substr($datep,0,2);
$emetteur = $_POST['liste2'];
$autre = $_POST['mots2'];
$credeb = $_POST['credeb2'];
$montant = $_POST['montant2'];
$oui = $_POST['oui2'];
$non = $_POST['non2'];

$db = mysql_connect('localhost', 'root', '');
mysql_select_db('intracompta',$db);   

$sql = "SELECT total FROM compte WHERE id='$id2'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data = mysql_fetch_array($req);
$toto = $data['total'];

if ( $emetteur =="3" )
{
$emetteur = $autre;
}

if ( $oui == "1")
{
$encaisse = 1;
}
else {
$encaisse = 0;
}

if ( $credeb == "credit" )
{
$credit = $montant;
$total = $toto+$credit;
}

if ( $credeb == "debit" )
{
$debit = $montant;
$total = $toto-$debit;
}

$sql2 = "UPDATE compte SET date='$date_uk',emetteur='$emetteur',credit='$credit',debit='$debit',total='$total',encaisse='$encaisse',id='$id' WHERE id='$id'";
mysql_query($sql2) or die('Erreur SQL !'.$sql2.'<br>'.mysql_error());

$sql3 = "SELECT total FROM compte WHERE id='$id'";
$req3 = mysql_query($sql3) or die('Erreur SQL !<br>'.$sql3.'<br>'.mysql_error());
$data3 = mysql_fetch_array($req3);
$toto3 = $data3['total'];


$sql4 = "SELECT * FROM compte WHERE id >'$id'";
$req4 = mysql_query($sql4) or die('Erreur SQL !<br>'.$sql4.'<br>'.mysql_error());
while($data4 = mysql_fetch_array($req4))
{
$credit4 = $data4['credit'];
$debit4 = $data4['debit'];

if ( $credit4 == 0.00 )
{
$total4 = $toto3-$debit4;
}
else {
$total4 = $toto3+$credit4;
}

$sql5 = "UPDATE compte SET total='$total4' WHERE id >'$id'";
mysql_query($sql5) or die('Erreur SQL !'.$sql5.'<br>'.mysql_error());
}
echo '<p align="center" class="Style1">Votre entrée a bien &eacute;t&eacute; modifiée. </p>'; 

mysql_close();
?>
merci pour vos lumières 8-)

lakawet

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

28 août 2008, 10:30

Tu as un UPDATE multiple ou tu veux un update multiple et tu ne l'as pas ?

Sinon, d'une manière générale, c'est dans le WHERE de l'update que tu filtres les champs sur lesquels tu interviens.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Petit nouveau ! | 9 Messages

28 août 2008, 10:50

je veux un update multiple mais je vois pas comment faire puisque je dois recup le nouveau total de l'enregistrement avant de pouvoir modifier le suivant, je m'explique:

total = 10
total = 20
total = 30

je modifie la premiere ligne

total = 20
total = 30
total = 40

le soucis c'est que dans mon code la ligne 1 fait bien un update la seconde aussi mais la 3eme prends en compte l'ancien total de ligne 2, ce qui donne

total = 20
total = 30
total = 30

j'espere etre assez clair, c'est un casse tete ce truc :shock:

merci

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

28 août 2008, 11:30

c'est un casse tete ce truc :shock:
j'ai cor rien dis moi :(

Sans apporter de solutions... d'une manière générale on ne stocke pas de champ contenant un total en BDD. Il est calculé à la volée :-)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Petit nouveau ! | 9 Messages

28 août 2008, 13:56

merci beaucoup, j'ai résolu mon probleme grace a toi Truc.
j'ai calculé à volée les tot et c'est nickel

encore merci :wink:

lakawet