pb calcul

Eléphant du PHP | 250 Messages

13 janv. 2007, 01:12

Bonsoir,

ma méthode de calcul ne donne rien lors d'une sauvegarde...
$sql = "UPDATE membres SET fric_sur_compte=fric_sur_compte-(fric_sur_emprunt*1.013-emprunt)"; 
[/php]

Eléphant du PHP | 445 Messages

13 janv. 2007, 01:16

Bonsoir,

Tu peux expliquer un peu le problème ?

Ca veut dire quoi "ne donne rien lors d'une sauvegarde" ?

Tu as un message d'erreur, le résultat n'est pas celui attendu...
LLDC
Ulti

Mammouth du PHP | 1885 Messages

13 janv. 2007, 02:27

Quelle est la structure de la table et quel est l'opération à effectuer?
La priorité des opérations doit être prise en compte dans ta requête.
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Eléphant du PHP | 250 Messages

14 janv. 2007, 16:23

$sql = "UPDATE membres SET fric_sur_compte=fric_sur_compte-(emprunt*1.013-emprunt)"; 
Voilà le bout de script qui ne fonctionne pas.
"fric_sur_compte" est comme son nom l'indique l'argent sur le compte bancaire.
"emprunt" est la somme qui a été empruntée.
cet update est censé retirer du compte bancaire une somme moins l'emprunt initial multiplié par un certain taux moins l'emprunt initial.....

exemple emprunt= 1000
fric_sur_compte=700
update= 700-1000*1.013-1000 devrait donner la somme à oter de "fric_sur_compte"
ce qui donnerait 700-(1013-1000)= 700-13= 697, donc 13 euros? enlevés du compte bancaire (fric_sur_compte) !

une seule opration fonctionne(rait) mon problème vient de la "complexité" du calcul si j'ose dire.

Eléphant du PHP | 445 Messages

14 janv. 2007, 16:46

Il n'y a donc pas d'erreur d'afficher, c'est juste que cela ne fait pas ce que tu désires...

Question idiote, mais sait-on jamais, vérifie bien les noms de tes champs, le nom de table, as-tu mis mysql_query($sql); ?
LLDC
Ulti

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 janv. 2007, 16:48

C'est peut être moi, mais j'ai l'impression que tu n'as répondu à aucune des questions qui t'ont été posées...

- Quel est le problème que tu rencontres ? quelle est la valeur érronée ? quel est le message d'erreur ? Tu donnes un exemple avec le résultat attendu, quel est le résultat réellement obtenu avec cette opération ?

- Quelle est la structure de ta table ? est ce que emprunt est bien une colonne de ta table membres ?

...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 250 Messages

14 janv. 2007, 18:10

voilà le code exact qui est un update passant en tache cron à une certaine heure chez mon hébergeur (il faudrait p-etre que je teste celà en direct ou via mysql? )

<?php
$db= mysql_connect(localhost, xxx, xxx) or die("Impossible de se connecter à la base de données"); 	   
 mysql_select_db('xxxxx',$db)  or die('Erreur de selection base'.mysql_error());
$sql = "UPDATE membres SET fric_sur_compte=fric_sur_compte-(emprunt*1.013)-emprunt"; 
mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
?>
la structure de la table est "basique"
x champs dans table membres avec id en index.
le champ "emprunt" est bel et bien là avec INT (10)

comme ce script passe à une certaine heure, je vois ensuite le résultat à l'écran qui ne donne donc rien, pas de modif par rapport à "fric_sur_compte".

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 janv. 2007, 19:03

Dans la mesure où personne n'est devant pour voir le résultat du traitement, ce serait peut être bien d'essayer de jouer la requête dans mysql pour voir si elle ne génère pas une erreur...

Sinon tu peux également jouer :

Code : Tout sélectionner

SELECT fric_sur_compte, emprunt, fric_sur_compte-(emprunt*1.013)-emprunt FROM membres
Pour voir les résultats que tu obtiendras lors de l'update

Tu peux aussi l'écrire ainsi

Code : Tout sélectionner

fric_sur_compte-(emprunt*1.013)-emprunt <=> fric_sur_compte-(emprunt*(1.013-1)) <=> fric_sur_compte-(emprunt*0.013)
A défaut de changer le résultat, ça te simplifiera l'écriture :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 1885 Messages

14 janv. 2007, 19:16

Quelle est la structure de la table exactement? Tu sembles utiliser INT(10) pour des valeurs monétaires...
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Eléphant du PHP | 250 Messages

14 janv. 2007, 19:46

Bon, j'ai testé toutes le spossibilités en direct dans mysql, apparemment, ca coince à chaque fois.

J'ai refais une modif pour l'update, j'attends la tache cron ato et vous en reparlerai demain.
Sinon, Xenon, ou est le pb avec int(10)? :roll:
ma "valeur" monétaire n'est qu'un nombre à 5 chiffres maxi....

Eléphant du PHP | 445 Messages

14 janv. 2007, 19:59

Pourquoi attendre la tâche cron ? Si après chaque modification tu attends l'exécution de ton script, tu n'as pas terminé et perds du temps inutilement.

Si toutes les possibilités coincent depuis PhpMyAdmin, il te reste à vérifier une nouvelle fois tes champs.

fric_sur_compte est de quel type ?
LLDC
Ulti

Mammouth du PHP | 1885 Messages

14 janv. 2007, 21:47

Bon, j'ai testé toutes le spossibilités en direct dans mysql, apparemment, ca coince à chaque fois.

J'ai refais une modif pour l'update, j'attends la tache cron ato et vous en reparlerai demain.
Sinon, Xenon, ou est le pb avec int(10)? :roll:
ma "valeur" monétaire n'est qu'un nombre à 5 chiffres maxi....
INT(10) ne gère pas les décimals.
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Eléphant du PHP | 250 Messages

14 janv. 2007, 23:16

<?php
$db= mysql_connect(localhost, xxx) or die("Impossible de se connecter à la base de données"); 	   
 mysql_select_db('xxx',$db)  or die('Erreur de selection base'.mysql_error());
SELECT" fric_sur_compte, emprunt FROM membres";
$sql = "UPDATE membres SET fric_sur_compte=fric_sur_compte-(emprunt*1.013)-emprunt"; 
mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
?>
voilà la tache cron (que j'ai avancée dans le temps) qui va se déclencher.
je vous tiens au courant, sinon, emprunt est à medium int (5) et fric_sur_compte à int(10)
mon calcul ne doit logiquement pas faire appel ou générer des chiffres à virgule....

je dois ajouter que pour le meme genre de truc avec l'épargne" ca fonctionne impecc mais il n'y a qu'1 calcul
(epargne=epargne*xx)
:wink:

Eléphant du PHP | 250 Messages

15 janv. 2007, 00:04

Heu, ça marche toujours pas :twisted:
je vais essayer de biaiser et de "décomposer" en plusieurs mouvements, hop :lol:

Mammouth du PHP | 1885 Messages

15 janv. 2007, 00:21

C'est pour toutes les lignes ou une en particulier? Je ne vois pas de WHERE.
As-tu des données sur lesquelles nous pouvons tester? (ainsi que les résultats attendus)
La programmation est l'expression de la poésie d'un programmeur
Génération PHP