Page 1 sur 1

Ajouter +10 dans un champ

Posté : 14 nov. 2007, 18:14
par Poinball
Bonjour, j'Ai le code si dessous
$sql = "UPDATE utlilisateurs SET magma='$magma + 10' WHERE id = '".$id."'";
Je sais que le code n'est pas bon.. cars je ne sais pas comment faire en sorte dajouter une valeur a une autre..

Jajoute aussi que $magma est égale a 0 mais que apres L'update il devrait etre égale a 10 et au prochain a 20 .. etc..

Alors si vous etes capable de corriger mon code.. japprécirais grandement :)
jespere avoir été assé précis :roll:

Re: Ajouter +10 dans un champ

Posté : 14 nov. 2007, 18:19
par Calimero
Bonjour,
$sql = "UPDATE utlilisateurs SET magma=magma+10 WHERE id = '".$id."'";
Tout simplement. On ne passe même plus par une variable php, MySQL fait cela tout seul.

Posté : 14 nov. 2007, 18:35
par Poinball
Daccord je te remerci beaucoup :)

et si je met ce code en WebCron qui fonctionne a chaque heure
<?

$hc = mysql_connect("localhost","*****","*****") or die ("impossible de connecter le serveur de données");
$db = mysql_select_db("poinball_jeux") or die ("impossible de connecter la base de données. <br/>".mysql_errno()." : ".mysql_error()."");

$utilisateur = "SELECT * FROM utlilisateurs ";
$resultat = mysql_query($utilisateur); // résultat
while($rows = mysql_fetch_array($resultat)) { // boucle ( loop )
$id = $rows['id']; // résultat de la boucle pour la colonne pseudo:P
$login = $rows['login']; // résultat de la boucle pour la colonne id
$lvlmagma = $rows['lvlmagma'];
$magma = $rows['magma'];

}

if ( $lvlmagma == niv1 ) {
$sql = "UPDATE utlilisateurs SET magma=magma+10 WHERE id = '".$id."'"; 
mysql_query($sql);
}
if ( $lvlmagma == niv2 ) {
$sql = "UPDATE utlilisateurs SET magma=magma+20 WHERE id = '".$id."'"; 
mysql_query($sql);
}
 
?>
Escequ'il va ajouter +10 a toute les user qui ont niv1 dans lvlmagma a chaque heure??

Posté : 14 nov. 2007, 18:45
par h0_noMan
Si ton code ne fait que cela, tu peux alors le simplifier.

Tu fais un SELECT sans conditions puis un UPDATE (en fonction de son lvlmagma) pour tout les enregistrements de ta base.
Tu pourrais faire directement un UPDATE pour chaque condition sans avoir besoin d'un SELECT avant.
<?
$hc = mysql_connect("localhost","*****","*****") or die ("impossible de connecter le serveur de données");
$db = mysql_select_db("poinball_jeux") or die ("impossible de connecter la base de données. <br/>".mysql_errno()." : ".mysql_error()."");
$sql = "UPDATE utlilisateurs SET magma=magma+10 WHERE lvlmagma=".niv1; 
mysql_query($sql);
$sql = "UPDATE utlilisateurs SET magma=magma+20 WHERE lvlmagma=".niv2; 
mysql_query($sql); 
?>

Posté : 14 nov. 2007, 18:45
par Calimero
Deux petites choses :

- Ta question aurait eu sa place dans le forum SQL, pense à poster là-bas la prochaine fois ;-)

- En voyant le reste de ton code, je pense à une simplification supplémentaire :
// Connexion habituelle à ta base de données
$hc = mysql_connect("localhost","*****","*****") or die ("impossible de connecter le serveur de données");
$db = mysql_select_db("poinball_jeux") or die ("impossible de connecter la base de données. <br/>".mysql_errno()." : ".mysql_error()."");

// Ces deux requêtes font tout le travail que tu faisais dans ta boucle, en plus court et plus lisible
$sql = "UPDATE utlilisateurs SET magma=magma+10 WHERE lvlmagma='niv1'";
mysql_query($sql);
$sql = "UPDATE utlilisateurs SET magma=magma+20 WHERE lvlmagma='niv2'";
mysql_query($sql);
Ou un truc dans le genre, selon ce que tu mets dans niv1 et niv2.

Et pour répondre à ta question : oui, tout cela provoquera une mise à jour massive à chaque éxécution. Il te suffit donc de programmer l'éxécution du script en crontab pour qu'il soit lancé périodiquement.

Fais tout de même bien attention à la capacité du type de champ que tu as choisi pour "magma" notamment, car ça peut augmenter assez haut et assez vite avec un système comme celui-là :-) Il serait dommage que ça en vienne à plafonner.

Posté : 14 nov. 2007, 18:55
par zeus
Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "SQL & Bases de données".

Merci de prendre le temps de lire les règlements
ainsi que l'intitulé de chaque forum avant de poster un nouveau sujet.

Posté : 14 nov. 2007, 18:56
par Truc
- Ta question aurait eu sa place dans le forum SQL, pense à poster là-bas la prochaine fois ;-)
Et on déménage... :wink:

EDIT: Bon ben c'est déjà fait
:-#

Posté : 14 nov. 2007, 19:14
par Poinball
Merci Énormément de votre aide et de mavoir donné de votre temps !
:)

Posté : 14 nov. 2007, 19:15
par h0_noMan
Tu pourrais simplifier encore plus en stockant lvlmagma sous forme d'entier (1,2,3,4,...) et faire une requete de ce genre:
$sql = "UPDATE utlilisateurs SET magma=magma+(lvlmagma*10)";
// Si lvlmagma=1 alors on ajoute 10
// Si lvlmagma=2 alors on ajoute 20
// et ainsi de suite