Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1166 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Bug incompréhensible !!???

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Bug incompréhensible !!???

n°1746579
ti-bank
ti-bank.fr
Posté le 15-06-2008 à 01:05:59  profilanswer
 

SAlut,
 
J'ai étébli ce script pour établir une note moyenne sur 5 en fonction des votes :

Code :
  1. <?php
  2. bloc_head("Noter un logiciel" );
  3. $note="$_POST[note]";
  4. $req1=reqmysql("SELECT * FROM archives where archives . id=$id" );
  5. $ligne1=mysql_fetch_array($req1);
  6.         $vote=$ligne1['vote'];
  7.         $points=$ligne1['points'];
  8.         $vote=$vote +1;
  9.         $newpoints =$points +$note ;
  10.         $newnotem =$newpoints /$vote ;
  11.         $newstars =ceil($newnotem) ;
  12.         $newnotem =substr($newnotem ,0,3);
  13.        
  14.        
  15. $req2 =reqmysql("UPDATE archives SET vote='".$vote."', points='".$newpoints ."', notem='".$newnotem ."',
  16. stars='".$newstars."' where id=".$id ." limit 1" );
  17. echo"
  18. <p align=center>
  19. Vote comptabilisé, la nouvelle note de ce fichier est maintenant de $newnotem<br /><br />
  20. <a href=index.php?mod=archives&amp;ac=voir&amp;id=$id>Retour</a>
  21. </p>
  22. ";
  23. close_table();
  24. ?>


 
Le gros problème c'est que $vote qui est le nombre de votes monte de 1 ou de 2 de manière complètemenat aléatoire. Des fois il se prend normalement +1 et des fois il se prend +2 de manière totalement incompréhensible !!!!
Là faut m'expliquer...


Message édité par ti-bank le 15-06-2008 à 02:17:04

---------------
Tous vos programmes & cours pour calculatrices TI : www.ti-bank.fr
mood
Publicité
Posté le 15-06-2008 à 01:05:59  profilanswer
 

n°1746662
Profil sup​primé
Posté le 15-06-2008 à 03:27:26  answer
 

salut !
 
Quelques petits probleme de base déjà :
 
ligne 7 : $note = $_POST['note'] suffit (toujours mettre des quotes, sinon ta clé est considéré comme constante
 
ligne 9 : vu les champs que tu recuperes dans ton script, évite les select * :  
"SELECT vote, points FROM ..." fera largement l'affaire
 
ligne 9 : ton $id tu le sors d'où ? mets les register_globals à Off !
 
ligne 14 : $vote++ c'est plus propre
 
ligne 22 : pour tout champ numérique, inutile de mettre des quotes à tout va
ligne 23 : limit 1 ne sert à rien pour un update
 
pour vérifier ta requete, procede plutot ainsi :
$ma_requete = "SELECT ..."
reqmysql($ma_requete)
afin de voir exactement les valeurs mises à jour
 
pour ta question, ton script n'est pas censé faire un "+2" sur le nb de vote, mis à part rafraichir 1x la page  
 
 
Voilou :)


Message édité par Profil supprimé le 15-06-2008 à 03:28:28
n°1746733
ti-bank
ti-bank.fr
Posté le 15-06-2008 à 13:45:36  profilanswer
 

Merci pour tes réponses !
Il rafraîchit une fois la page ? Le bug semble se produire uniquement avec Mozilla ?
Comment y remédier ?
J'ai déjà tout corrigé avec tous tes conseils.
Mais avec ++ au lieu de +1, le nombre de votes n'augmente plus....


---------------
Tous vos programmes & cours pour calculatrices TI : www.ti-bank.fr
n°1746749
weed
Posté le 15-06-2008 à 14:47:01  profilanswer
 

une dernier petite remarque d'optimisation : je te conseillerais d'utiliser mysql_fetch_assoc plutot que mysql_fetch_array qui te renvoie numérique et associatif. Fais un :
 

Code :
  1. echo "<pre>";
  2. print_r($ligne1);
  3. echo "</pre>";


tu verras ....
 
les écritures $vote++ ou $vote+=1; ou $vote=$vote+1 sont completement identiques.  
Si tu veux t'en assurer fais un echo avant et apres ...
 
Tes données sont lu dans une table, donc avant de faire quoi que ce soit, fais un print_r($ligne1) ce que tu manipules comme données.
 
Puis apres, sotckes ta requete update dans une variable, afiche la et execute ta requete à partir de ta variable, comme ca tu sais exactement ce que tu recupere et ce que tu mets à jour.
 
Bref, passes en mode debuggage

n°1749378
gugus
Posté le 20-06-2008 à 14:43:13  profilanswer
 

en gros je dirait que la moitié de ton code est plus ou moins inutile, il y a possibilité de remplacé les ligne 9 à 23 par ça :
mysql_query( "UPDATE archives SET vote=(vote+1), points=(points+".$note." );" );

 

Je suis pas certains de la syntaxe mais ça doit s'en rapprocher

 

ton premier select ne sert à rien, tu peux très bien faire les calculs dans la requête

 

ensuite, l'intérêt de sauvegarder une note moyenne est pas évident, étant donné que c'est une valeur calculée à partir de données en base, tu pourra le calculer via le php à l'affichage, c'est pour celà que je ne les ai pas inclu dans la requête d'update.

 

après c'est un choix, mais généralement tous ce qui peux être calculé simplement, j'évite de le mettre en base.

 

ça donnerais à peu près ça :

Code :
  1. $note="$_POST[note]";
  2. mysql_query( "UPDATE archives SET vote=(vote+1), points=(points+".$note." ) where id=".$id.";" );
  3. $req1=reqmysql("SELECT * FROM archives where archives . id=$id" );
  4. $ligne1=mysql_fetch_array($req1);
  5. <p align=center>
  6. Vote comptabilisé, la nouvelle note de ce fichier est maintenant de ".($ligne1['point']/$ligne1['vote'])."<br /><br />
  7. <a href=index.php?mod=archives&amp;ac=voir&amp;id=$id>Retour</a>
  8. </p>
 

je décline toute responsabilité en cas d'erreur, je n'ai pas testé :o

Message cité 1 fois
Message édité par gugus le 20-06-2008 à 14:43:55
n°1749599
leflos5
On est ou on est pas :)
Posté le 21-06-2008 à 03:50:03  profilanswer
 

gugus a écrit :

en gros je dirait que la moitié de ton code est plus ou moins inutile, il y a possibilité de remplacé les ligne 9 à 23 par ça :
mysql_query( "UPDATE archives SET vote=(vote+1), points=(points+".$note." );" );
 
Je suis pas certains de la syntaxe mais ça doit s'en rapprocher
 
ton premier select ne sert à rien, tu peux très bien faire les calculs dans la requête
 
ensuite, l'intérêt de sauvegarder une note moyenne est pas évident, étant donné que c'est une valeur calculée à partir de données en base, tu pourra le calculer via le php à l'affichage, c'est pour celà que je ne les ai pas inclu dans la requête d'update.
 
après c'est un choix, mais généralement tous ce qui peux être calculé simplement, j'évite de le mettre en base.
 
ça donnerais à peu près ça :

Code :
  1. $note="$_POST[note]";
  2. mysql_query( "UPDATE archives SET vote=(vote+1), points=(points+".$note." ) where id=".$id.";" );
  3. $req1=reqmysql("SELECT * FROM archives where archives . id=$id" );
  4. $ligne1=mysql_fetch_array($req1);
  5. <p align=center>
  6. Vote comptabilisé, la nouvelle note de ce fichier est maintenant de ".($ligne1['point']/$ligne1['vote'])."<br /><br />
  7. <a href=index.php?mod=archives&amp;ac=voir&amp;id=$id>Retour</a>
  8. </p>


 
je décline toute responsabilité en cas d'erreur, je n'ai pas testé :o


Ta responsabilité civile sera engagée en cas de retard sur la recette :o


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Bug incompréhensible !!???

 

Sujets relatifs
Bug IE - texte d'un LI qui se répète[RESOLU]Bug d'affichage galerie sous firefox
Bug FireFox liste deroulante ?[PHP] Erreur incompréhensible
Bug sur mon petit projet incompréhensible...Bug incomprehensible pour un gugus comme moi :P
Bug incompréhensible sur IE (CSS - Mise en page)[PHP+Flash] Bug incomprehensible sur LoadVar() !
BUG ! Incomprehensible[VB] Bug avec Unload incompréhensible
Plus de sujets relatifs à : Bug incompréhensible !!???


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR