PHP calculs possible ?

PHP calculs possible ? - PHP - Programmation

Marsh Posté le 03-06-2008 à 16:31:04    

Vous pouvez me dire si on peut peu faire ces calculs :
 

Code :
  1. while ($row = mysql_fetch_array($resulta)) 
  2.   {
  3.   $$row["nom_appli"]=addslashes($_POST['$row["nom_appli"]']);
  4.   $query1="SELECT COUNT(login_fr)
  5.   FROM result_fr";
  6.   $result1 = mysql_query($query1) or die(mysql_error());
  7.   $query2="SELECT score_appli
  8.   FROM appli
  9.   WHERE nom_appli='".$row['nom_appli']."'";
  10.   $result2 = mysql_query($query2) or die(mysql_error());
  11.   $result3 = $result2 + $$row["nom_appli"];
  12.   $sql2="UPDATE appli
  13.     SET score_appli='$result3'
  14.    WHERE nom_appli='".$row['nom_appli']."'";
  15.   mysql_query($sql2) or die('Erreur SQL !'.$sql2.'<br>'.mysql_error());
  16.   $result4 = $result2/$result1;
  17.   $sql3= "UPDATE appli
  18.      SET tot='$result4'
  19.     WHERE nom_appli='".$row['nom_appli']."'";
  20.   mysql_query($sql3) or die('Erreur SQL !'.$sql3.'<br>'.mysql_error());
  21.   }


 
Parce que ces calculs me donne des resultats improbable dans ma base de donnée.
Pourtant dans la logique les calculs que je veu faire sont bon.

Reply

Marsh Posté le 03-06-2008 à 16:31:04   

Reply

Marsh Posté le 03-06-2008 à 16:41:03    

J'ai la flemme de lire ton code tellement c'est dur à lire là, mais c'est forcément faisable. Et tu as $$row au début de la boucle alors que tu veux surement utiliser $row.


Message édité par skeye le 03-06-2008 à 16:42:25

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 03-06-2008 à 16:44:45    

Bon, j'ai regardé le code, tu ne fetches jamais le résultats de tes requêtes, tu utilises le résultat de mysql_query à la place, m'étonne pas que ça fasse n'importe-quoi. Et tu utilises plusieurs fois $$, j'espère que c'est des fautes de frappe et pas comme je le crains volontaire pour remplacer un bête tableau.


Message édité par skeye le 03-06-2008 à 16:45:54

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 03-06-2008 à 16:45:03    

Tu pourrais faire ton truc en une seule requête plutot que d'en faire 4  requêtes:

Code :
  1. $sql =  sprintf("UPDATE
  2. appli
  3. SET
  4. score_appli += %d,
  5. tot = ( appli + %d ) / COALESCE(SELECT COUNT(DISTINCT login_fr) FROM result_fr)",
  6. mysql_real_escape_string( $_POST[$row["nom_appli"]] ),
  7. mysql_real_escape_string( $_POST[$row["nom_appli"]] )
  8. );


enfin si j'ai tout bien compris :)

Message cité 1 fois
Message édité par anapajari le 03-06-2008 à 16:45:34

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 03-06-2008 à 16:46:31    

anapajari a écrit :

Tu pourrais faire ton truc en une seule requête plutot que d'en faire 4  requêtes:

Code :
  1. $sql =  sprintf("UPDATE
  2. appli
  3. SET
  4. score_appli += %d,
  5. tot = ( appli + %d ) / COALESCE(SELECT COUNT(DISTINCT login_fr) FROM result_fr)",
  6. mysql_real_escape_string( $_POST[$row["nom_appli"]] ),
  7. mysql_real_escape_string( $_POST[$row["nom_appli"]] )
  8. );


enfin si j'ai tout bien compris :)


oui, aussi [:joce]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 03-06-2008 à 17:11:30    

Si j'ai bien compris a ta requete 'anapajari' il faudrait que je fasse ca :
 

Code :
  1. $resulta = mysql_query("SELECT nom_appli FROM appli" );
  2.   while ($row = mysql_fetch_array($resulta)) 
  3.   {
  4.       $sql2 =  sprintf("UPDATE
  5.       appli
  6.       SET
  7.       score_appli += %d,
  8.       tot = ( score_appli ) / COALESCE(SELECT COUNT(login_fr) FROM result_fr)",
  9.       mysql_real_escape_string( $_POST[$row["nom_appli"]] ),
  10.       mysql_real_escape_string( $_POST[$row["nom_appli"]] )
  11.       );
  12.   mysql_query($sql2) or die('Erreur SQL !'.$sql2.'<br>'.mysql_error());
  13.   }


 
Mais il me met une erreur de syntaxe a la ligne 4 :

Code :
  1. tot = ( score_appli ) / COALESCE(SELECT COUNT(login_fr) FROM result_fr)",

Reply

Marsh Posté le 03-06-2008 à 17:20:31    

c'est pas forcément facile de s'y retrouver avec le peu d'information que tu donnes mais:

  • c'est pas la requête que j'avais donnée, le double %d était voulu car lors de l'execution score_appli n'aurait pas encore été mis à jour et la valeur de tot ne sera pas bonne
  • si tu tiens à conserver ta requête, vu que tu n'as plus qu'un seul bind dans le sprintf , pourquoi passer deux fois nom_appli


Ensuite sur l'erreur elle-même, j'imagine qu'il s'agit d'une erreur SQL car le code php ( enfin celui que tu montres) a l'air bon.
Quelle est exactement l'erreur rencontrée? le message complet?
Quel SGBD? Quelle Version? (Si tu me sors MySQL 3 tu peux directement oublier).

 

Ma conclusion: essaye au moins de faire un effort pour expliquer ton problème et comprendre ce qu'on te donne comme indication.


Message édité par anapajari le 03-06-2008 à 17:21:05

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 03-06-2008 à 17:30:38    

Ce que je veu c'est de faire :
-score_appli = score_appli + la valeur de $row["nom_appli"]
-une moyenne en faisant le score_appli / nombre de login
 
SGBD: MySQL: 5.0.45
 
Et l'erreur : Erreur SQL !UPDATE appli SET score_appli += 4, tot = ( score_appli ) / COALESCE(SELECT COUNT(login_fr) FROM result_fr)
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '+= 4, tot = ( score_appli ) / COALESCE(SELECT COUNT(login_fr) FROM result' at line 4
 
J'espere avoir été assez claire  :pt1cable:

Reply

Marsh Posté le 03-06-2008 à 17:38:17    

Code :
  1. COALESCE((SELECT COUNT(login_fr) FROM result_fr),1)


manquait un param ç coalesce.


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed