Ajout de points dans un classement

Ajout de points dans un classement - SQL/NoSQL - Programmation

Marsh Posté le 13-07-2012 à 22:03:21    

Bonjour a tous,
 
Je suis actuellement sur la réalisation d'un site pour un club de poker et il y a une partie classement et dans cette partie l'admin du site peut ajouter des points aux joueurs correspondant. Pour le moment j'ai une requéte pour modifier les points la voici :

Code :
  1. foreach ($_POST['joueurId'] as $i=>$v) {     // utilisé pour parcourir les array avec $i, on s'en fout de $v
  2.      $joueurId = mysql_real_escape_string($_POST['joueurId'][$i]);    // on récupère les données
  3.      $Points = mysql_real_escape_string($_POST['Points'][$i]);           // de la ligne $i
  4.      $query_update   = "UPDATE ".$POINTS_CLASSEMENT_1ER_TRIMESTRE." SET ".           // on fait la maj pour la ligne
  5.                                         " Points = '".$Points."' ".
  6.                                         " WHERE joueurId = '".$joueurId."';";
  7.       mysql_query($query_update) OR die('Erreur SQL :<br />'.$query_update.'<br />'.mysql_error());

.
 
Mais maintenant je voudrais qu'à la place de modifier la valeur points on l'ajoute a la valeur existante.
 
j'ai pensé a un truc du genre "Points = '".$Points+ .$Points."' mais ca doit pas marcher puisque cette variable est celle que insére l'admin dans le formulaire.
 
J'espére que vous pourrez m'aider avec ce probléme si vous avez des sites avec des tutos sur ce probléme ou si vous pouvez m'aidez a changer ce code je suis preneur.
 
Merci d'avance pour votre aide.

Reply

Marsh Posté le 13-07-2012 à 22:03:21   

Reply

Marsh Posté le 13-07-2012 à 22:50:47    

2 min de google, 2ème résultat : un post HFR avec la solution :o  
 

Citation :

UPDATE matable SET mavaleur=mavaleur+10 WHERE id=15


 
Sinon sans faire élégant, tu peux récupérer préalablement ta valeur point via un SELECT et ensuite l'ajouter via ton SET.  
 
 
De mémoire, maintenant en PHP tu peux préparer ta requête et l’exécuter, c'est plus propre que des real_escape_string. Et me semble que ça protège mieux niveau injection.


Message édité par kray le 13-07-2012 à 22:51:11

---------------
I guess my real ennemy is me
Reply

Marsh Posté le 14-07-2012 à 11:33:33    

Bonjour Kray,
 
J'ai essayé de récupérer ma valeur Point via un SELECT mais apparement cela ne fonctionne pas. je pense que le probléme vient du fait que c'est exactement la meme variable avant le traitement et aprés le traitement.
 

Reply

Marsh Posté le 14-07-2012 à 12:52:28    

J'ai peut être mal compris ton pb mais si tu fais un (à la syntaxe php/sql près):
SELECT Points FROM $POINTS_CLASSEMENT_1ER_TRIMESTRE WHERE Joueueur ID = XXX
 
Un mysql_fetcharray sur le résultat, tu récupère la valeur points, tu ajoutes la valeur passée en POST puis tu stocke le résultat dans $Points et ensuite tu refais ton update ça devrait marcher.
 
Après, c'est plus élégant et efficace de faire l'addition via la commande SQL de mon premier post qu'en PHP IMHA, mais je vois pas de raison que ça marche pas via un SELECT avant.


---------------
I guess my real ennemy is me
Reply

Marsh Posté le 16-07-2012 à 19:29:12    

Kray t'a donné la bonne réponse tout de suite, fais ce qu'il a écris et ne te complique pas la vie.
 
Pour le foreach de php, je crois que tu n'as pas bien compris son utilisation
 

Code :
  1. foreach ($_POST['joueurId'] as $i=>$v) { 
  2.      $joueurId = mysql_real_escape_string($v);
  3.     ...


 
Voilà, sinon pour l'élégance :) :
Tu devrais déjà commencer par utiliser $k => $v ou $i => $j mais ne pas faire de mélange, et puis changer la structure de ton tableau.
 

Code :
  1. foreach ($_POST['joueur'] as $v) {
  2.     $sql= mysql_real_escape_string(
  3.         "UPDATE " . $POINTS_CLASSEMENT_1ER_TRIMESTRE
  4.         . " SET Points = Points + " . $v['Points']
  5.         . " WHERE joueurId = '" . $v['joueurId'] . "';"
  6.     );
  7.     mysql_query($sql) OR die('Erreur SQL :<br />' . $sql . '<br />'.mysql_error());
  8. }


 
Bon allez, je retourne en vacances, bon courage

Reply

Sujets relatifs:

Leave a Replay

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