Ajouter +10 dans un champ

Eléphant du PHP | 69 Messages

14 nov. 2007, 18:14

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:

ViPHP
ViPHP | 2287 Messages

14 nov. 2007, 18:19

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.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 69 Messages

14 nov. 2007, 18:35

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??

Eléphant du PHP | 445 Messages

14 nov. 2007, 18:45

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); 
?>

ViPHP
ViPHP | 2287 Messages

14 nov. 2007, 18:45

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.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 nov. 2007, 18:55

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.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

14 nov. 2007, 18:56

- 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
:-#

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 69 Messages

14 nov. 2007, 19:14

Merci Énormément de votre aide et de mavoir donné de votre temps !
:)

Eléphant du PHP | 445 Messages

14 nov. 2007, 19:15

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