PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 19-08-2009 17:13:21

morgan47
Membre
Inscription : 19-08-2009
Messages : 52

Loterie : Gains dégréssif

Rebonjour,
C'est encor emoi avec mon loto smile

J'ai réussi avec votre aide à créé la requète qui compte combien de numéro ont été trouvé pour chaque grille.

Maintenant il me reste à attribué les points au gagnant, mais j'ai décidé de faire un loto dégréssif modulable.
Modulable : Définir le nombre de boules dans la grille ainsi que le nombre de numéro à cocher.
Dégréssif : Pour un loto a 5 numéro, celui qui trouve les 5 bons numéro gagne 1000 points, 4 bon numéro gagne 500 points et 3 bon numéro gagne 200 points.
Mais tout ceci est configurable dans la table lorsque l'on créé le tirage, on choisi combien de rang son gagnant et tout.
Voici la scruture de tirage :

  `idtirage` int(5)
  `nbrboules` int(2)
  `nbrnumeros` int(2)
  `gains` varchar(128)
  `tirage` varchar(128)
  `effectue` enum('0','1')

Voila comment je stocke les gains dégréssif dans la colonne gains :
Nombre de boule:gains|
ex : 5:2000|4:1000|3:500

Et maintenant pour vérifier si les membres ont gagné quelque chose j'explode gains de cette façon :


$inter = explode("|",$gains_str);
foreach($inter as $i) {
    $test = explode(":",$i);
       $gains[$test[0]] = $test[1];
}
 

Et ensuite dans ma boucle while de ma requète je vérifie si le nombre de numéro trouvé correspond à une clé du tableau :

    if (array_key_exists($nbrnum, $gains))
    {
    echo "Gagnant : $gains[$nbrnum] points";
    // insertion ensuite dasn la table résultat......
    }
 

Cette solution marche aparament.
Mais qu'en pensez vous n'y a t'il pas des choses qui pourront poser problème?
Auriez vous fait d'une autre  manière?

Je vous remerci une nouvelle fois pour votre aide.

Hors ligne

#2 20-08-2009 08:07:46

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Loterie : Gains dégréssif

Même cause, même effets, la colonne gains n'est pas en formes normales.
Et en php, l'utilisation d'un tableau associatif (hash), prenant les nombres de numéros en index et les gains en valeurs est mieux adaptée.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 20-08-2009 09:59:36

morgan47
Membre
Inscription : 19-08-2009
Messages : 52

Re : Loterie : Gains dégréssif

C'est ce que j'ai fait, enfin j'espère
J'ai bien le nombre de numéro trouvé en index et les gains en valeurs
$gains[$test[0]] = $test[1];
$test[0], c'est le nombre de numéro à trouver. et $test[1] c'est les gains.

Hors ligne

#4 20-08-2009 11:56:26

morgan47
Membre
Inscription : 19-08-2009
Messages : 52

Re : Loterie : Gains dégréssif

J'ai encore modifier mon script.

Voila ma requète pour compter le nombre de gagnant par rang :


$sql95 = "SELECT *,count(grille) as nbrnum FROM loterie_parties WHERE grille IN ($tirage_str) AND idtirage = '$idtirage' GROUP BY idmembre, idpartie HAVING nbrnum >= '$min'";
$req95 = mysql_query($sql95) or die('Erreur SQL !'.$sql95.'<br>' . mysql_error());

while ($result = mysql_fetch_array ($req95))
{
    $idmembre  = $result['idmembre'];
    $nbrnum = $result['nbrnum'];
   
    if (array_key_exists($nbrnum, $gains))
    {
    //echo "Gagnant avec $gains[$nbrnum]";
    $resultat[$nbrnum] = $resultat[$nbrnum] + 1;// Combien de gagnant pour le rang nbrnum
    $id[$nbrnum] = $id[$nbrnum] . $idmembre . ',';// idmembre des gagnants pour le rang nbrnum
    $sql1 = "UPDATE loterie_parties SET gagnant = 'oui', nbrgagnant = '$nbrnum' where idpartie ='$idpartie'";
    //$req1 = mysql_query($sql1) or die('Erreur SQL !<br>'.$sql1.'<br>'.mysql_error());
    }
}
 

Et ensuite mon code pour ajouter les points au gagnant :


if (!empty($resultat))
{
    foreach($resultat as $nbrnum => $nbrgagnant)
    {
           $gainsfinal = $gains[$nbrnum] / $nbrgagnant;
           $gainsfinal = round($gainsfinal,2);
           $id[$nbrnum] = preg_replace('#,$#','',$id[$nbrnum]);
          echo "Nombre de numéro : $nbrnum | Nombre de gagnant : $nbrgagnant | Gains :$gainsfinal | Membres : $id[$nbrnum]<br />";
       
           $sql1 = "UPDATE membres SET points = points + $gainsfinal WHERE idmembre IN ($id[$nbrnum])";
        //$req1 = mysql_query($sql1) or die('Erreur SQL !<br>'.$sql1.'<br>'.mysql_error());
       
        $sql1 = "UPDATE loterie_parties SET gains = '$gainsfinal' WHERE idtirage ='$idtirage' AND idmembre IN ($id[$nbrnum]) AND nbrgagnant = '$nbrnum'";
        //$req1 = mysql_query($sql1) or die('Erreur SQL !<br>'.$sql1.'<br>'.mysql_error());
    }
}
 

Mais j'ai un soucis avec ma requ_te :

$sql1 = "UPDATE membres SET points = points + $gainsfinal WHERE idmembre IN ($id[$nbrnum])";

Si un membre à fait plusieurs grilles gagnante, la requète avec le IN (....) n'update qu'une fois le membre, même si son ID est répété plusieurs fois.
Y a t'il un moyen de forcer la répétition de l'update?

Je sais que je dois être assez chiant.
Mais je vous remercie beaucoup pour l'aide que vous m'avez déja apporté.

Hors ligne

Pied de page des forums