par
publieur » 28 sept. 2011, 20:15
Bonjour j'ai une table qui contient les utilisateurs avec leur nombre de points et une autre table qui contient les sommes gagné par chacun et je rencontre un problème avec mon script qui distribue les sommes
<?php
$a = 1;
// je recupère la valeur de chaque gains
$req_gains = $this->bdd->query('SELECT * FROM gains ORDER BY places');
while($res_req = $req_gains->fetch())
{
$gains[$a] = $res_req['gains'];
$a++;
}
$req_gains->closeCursor();
$i = 1;
// je recupere les 30 premiers de mon classement
$req = $this->bdd->query('SELECT * FROM users ORDER BY points DESC LIMIT 0, 30');
while($result = $req->fetch()) // j'ai un General error à cette ligne mais tout marche comme même
{
if($i == 1)
{
$req1 = $this->bdd->prepare('SELECT argent FROM users WHERE id=:id');
$req1->execute(array('id'=>$result['id']));
$argent_base = $req1->fetch();
$req1->closeCursor();
$nouveau_argent = $argent_base['argent'] + $gains['1'];
$req = $this->bdd->prepare('UPDATE users SET argent=:argent WHERE id=:id');
$req->execute(array(
'argent'=>$nouveau_argent,
'id'=>$result['id']
));
}
elseif($i == 2)
{
$req1 = $this->bdd->prepare('SELECT argent FROM users WHERE id=:id');
$req1->execute(array('id'=>$result['id']));
$argent_base = $req1->fetch();
$req1->closeCursor();
$nouveau_argent = $argent_base['argent'] + $gains['2'];
$req = $this->bdd->prepare('UPDATE users SET argent=:argent WHERE id=:id');
$req->execute(array(
'argent'=>$nouveau_argent,
'id'=>$result['id']
));
}
elseif($i ==3)
{
$req1 = $this->bdd->prepare('SELECT argent FROM users WHERE id=:id');
$req1->execute(array('id'=>$result['id']));
$argent_base = $req1->fetch();
$req1->closeCursor();
$nouveau_argent = $argent_base['argent'] + $gains['3'];
$req = $this->bdd->prepare('UPDATE users SET argent=:argent WHERE id=:id');
$req->execute(array(
'argent'=>$nouveau_argent,
'id'=>$result['id']
));
}
elseif($i > 3 AND $i <= 5)
{
$req1 = $this->bdd->prepare('SELECT argent FROM users WHERE id=:id');
$req1->execute(array('id'=>$result['id']));
$argent_base = $req1->fetch();
$req1->closeCursor();
$nouveau_argent = $argent_base['argent'] + $gains['4'];
$req = $this->bdd->prepare('UPDATE users SET argent=:argent WHERE id=:id');
$req->execute(array(
'argent'=>$nouveau_argent,
'id'=>$result['id']
));
}
elseif($i >= 6 AND $i <= 10)
{
$req1 = $this->bdd->prepare('SELECT argent FROM users WHERE id=:id');
$req1->execute(array('id'=>$result['id']));
$argent_base = $req1->fetch();
$req1->closeCursor();
$nouveau_argent = $argent_base['argent'] + $gains['5'];
$req = $this->bdd->prepare('UPDATE users SET argent=:argent WHERE id=:id');
$req->execute(array(
'argent'=>$nouveau_argent,
'id'=>$result['id']
));
}
elseif($i >= 11 AND $i <= 18)
{
$req1 = $this->bdd->prepare('SELECT argent FROM users WHERE id=:id');
$req1->execute(array('id'=>$result['id']));
$argent_base = $req1->fetch();
$req1->closeCursor();
$nouveau_argent = $argent_base['argent'] + $gains['6'];
$req = $this->bdd->prepare('UPDATE users SET argent=:argent WHERE id=:id');
$req->execute(array(
'argent'=>$nouveau_argent,
'id'=>$result['id']
));
}
elseif($i >= 19 AND $i <= 24)
{
$req1 = $this->bdd->prepare('SELECT argent FROM users WHERE id=:id');
$req1->execute(array('id'=>$result['id']));
$argent_base = $req1->fetch();
$req1->closeCursor();
$nouveau_argent = $argent_base['argent'] + $gains['7'];
$req = $this->bdd->prepare('UPDATE users SET argent=:argent WHERE id=:id');
$req->execute(array(
'argent'=>$nouveau_argent,
'id'=>$result['id']
));
}
elseif($i >= 25 AND $i <= 30)
{
$req1 = $this->bdd->prepare('SELECT argent FROM users WHERE id=:id');
$req1->execute(array('id'=>$result['id']));
$argent_base = $req1->fetch();
$req1->closeCursor();
$nouveau_argent = $argent_base['argent'] + $gains['8'];
$req = $this->bdd->prepare('UPDATE users SET argent=:argent WHERE id=:id');
$req->execute(array(
'argent'=>$nouveau_argent,
'id'=>$result['id']
));
}
$i++;
}
?>
Enfaite j'ai testé le code et tout marche (à par quand il me met General error à la ligne que j'ai commenté je ne sais pas pour quoi mais en remplacent l’intérieur des conditions par des echo quand j'ai testé le code sa me le faisais pas) le problème c'est que il me met la même somme d'argent à tous les membres de ma table et je ne sais pas vraiment d'ou sa viens.
Et je pense que ma methode n'est pas la meilleur personne n'aurais une methode plus propre à proposé pour distribué les lots qui sont dans une table gains vers le champ "argent" de ma table d'utilisateur qui ont fini dans les 30 premier du classement ?
Bonjour j'ai une table qui contient les utilisateurs avec leur nombre de points et une autre table qui contient les sommes gagné par chacun et je rencontre un problème avec mon script qui distribue les sommes
[php]<?php
$a = 1;
// je recupère la valeur de chaque gains
$req_gains = $this->bdd->query('SELECT * FROM gains ORDER BY places');
while($res_req = $req_gains->fetch())
{
$gains[$a] = $res_req['gains'];
$a++;
}
$req_gains->closeCursor();
$i = 1;
// je recupere les 30 premiers de mon classement
$req = $this->bdd->query('SELECT * FROM users ORDER BY points DESC LIMIT 0, 30');
while($result = $req->fetch()) // j'ai un General error à cette ligne mais tout marche comme même
{
if($i == 1)
{
$req1 = $this->bdd->prepare('SELECT argent FROM users WHERE id=:id');
$req1->execute(array('id'=>$result['id']));
$argent_base = $req1->fetch();
$req1->closeCursor();
$nouveau_argent = $argent_base['argent'] + $gains['1'];
$req = $this->bdd->prepare('UPDATE users SET argent=:argent WHERE id=:id');
$req->execute(array(
'argent'=>$nouveau_argent,
'id'=>$result['id']
));
}
elseif($i == 2)
{
$req1 = $this->bdd->prepare('SELECT argent FROM users WHERE id=:id');
$req1->execute(array('id'=>$result['id']));
$argent_base = $req1->fetch();
$req1->closeCursor();
$nouveau_argent = $argent_base['argent'] + $gains['2'];
$req = $this->bdd->prepare('UPDATE users SET argent=:argent WHERE id=:id');
$req->execute(array(
'argent'=>$nouveau_argent,
'id'=>$result['id']
));
}
elseif($i ==3)
{
$req1 = $this->bdd->prepare('SELECT argent FROM users WHERE id=:id');
$req1->execute(array('id'=>$result['id']));
$argent_base = $req1->fetch();
$req1->closeCursor();
$nouveau_argent = $argent_base['argent'] + $gains['3'];
$req = $this->bdd->prepare('UPDATE users SET argent=:argent WHERE id=:id');
$req->execute(array(
'argent'=>$nouveau_argent,
'id'=>$result['id']
));
}
elseif($i > 3 AND $i <= 5)
{
$req1 = $this->bdd->prepare('SELECT argent FROM users WHERE id=:id');
$req1->execute(array('id'=>$result['id']));
$argent_base = $req1->fetch();
$req1->closeCursor();
$nouveau_argent = $argent_base['argent'] + $gains['4'];
$req = $this->bdd->prepare('UPDATE users SET argent=:argent WHERE id=:id');
$req->execute(array(
'argent'=>$nouveau_argent,
'id'=>$result['id']
));
}
elseif($i >= 6 AND $i <= 10)
{
$req1 = $this->bdd->prepare('SELECT argent FROM users WHERE id=:id');
$req1->execute(array('id'=>$result['id']));
$argent_base = $req1->fetch();
$req1->closeCursor();
$nouveau_argent = $argent_base['argent'] + $gains['5'];
$req = $this->bdd->prepare('UPDATE users SET argent=:argent WHERE id=:id');
$req->execute(array(
'argent'=>$nouveau_argent,
'id'=>$result['id']
));
}
elseif($i >= 11 AND $i <= 18)
{
$req1 = $this->bdd->prepare('SELECT argent FROM users WHERE id=:id');
$req1->execute(array('id'=>$result['id']));
$argent_base = $req1->fetch();
$req1->closeCursor();
$nouveau_argent = $argent_base['argent'] + $gains['6'];
$req = $this->bdd->prepare('UPDATE users SET argent=:argent WHERE id=:id');
$req->execute(array(
'argent'=>$nouveau_argent,
'id'=>$result['id']
));
}
elseif($i >= 19 AND $i <= 24)
{
$req1 = $this->bdd->prepare('SELECT argent FROM users WHERE id=:id');
$req1->execute(array('id'=>$result['id']));
$argent_base = $req1->fetch();
$req1->closeCursor();
$nouveau_argent = $argent_base['argent'] + $gains['7'];
$req = $this->bdd->prepare('UPDATE users SET argent=:argent WHERE id=:id');
$req->execute(array(
'argent'=>$nouveau_argent,
'id'=>$result['id']
));
}
elseif($i >= 25 AND $i <= 30)
{
$req1 = $this->bdd->prepare('SELECT argent FROM users WHERE id=:id');
$req1->execute(array('id'=>$result['id']));
$argent_base = $req1->fetch();
$req1->closeCursor();
$nouveau_argent = $argent_base['argent'] + $gains['8'];
$req = $this->bdd->prepare('UPDATE users SET argent=:argent WHERE id=:id');
$req->execute(array(
'argent'=>$nouveau_argent,
'id'=>$result['id']
));
}
$i++;
}
?>[/php]
Enfaite j'ai testé le code et tout marche (à par quand il me met General error à la ligne que j'ai commenté je ne sais pas pour quoi mais en remplacent l’intérieur des conditions par des echo quand j'ai testé le code sa me le faisais pas) le problème c'est que il me met la même somme d'argent à tous les membres de ma table et je ne sais pas vraiment d'ou sa viens.
Et je pense que ma methode n'est pas la meilleur personne n'aurais une methode plus propre à proposé pour distribué les lots qui sont dans une table gains vers le champ "argent" de ma table d'utilisateur qui ont fini dans les 30 premier du classement ?