Bonjour,

Je bloque sur un petit script qui permet de récupérer 3 gagnantes, aléatoirement d'une table dans la base de données. Je procèdes comme suit :

- Vérifier le nombre max d'id dans la table
- Création d'un tableau winner où seront stocké les gagnantes
- Une boucle tant que le nombre d'élément de winner[] est plus petit que 3
{
* On défini un nombre aléatoire avec rand_max du nombre max d'id récupéré au début
* Vérifier que l'id n'a pas déjà été prit, pour cela on les met dans un tableau
* Sinon tout est ok, on rajoute son email au tableau winner[]
}

Mon code se présente comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
function choiceWinnerRand()
{
    $bdd = dbConnect();
 
    $selectIdMax = $bdd -> query('SELECT * FROM concours'); 
    $result = $selectIdMax -> rowCount();
 
    $winner = array();
    $howMuchWinner = 3;
 
    while(count($winner) < 3)
    {
        $idRand = rand(1, $result);
        $idLastRand = array();
 
        if(!array_search($idRand, $idLastRand))
        {
            array_push($idLastRand, $idRand);
 
            $selectWinner = $bdd -> prepare('SELECT name, lastName, email FROM concours WHERE id=:idRand');
            $selectWinner -> bindValue(':idRand', $idRand, PDO::PARAM_INT);
            $selectWinner -> execute();
 
            $data = $selectWinner -> fetch();
 
            array_push($winner, $data['email']);
        }
    }
 
    print_r($winner);
 
    throw new Exception('
    <ol>
    Gagnante 1 : ' . $winner[0] . '<br>
    Gagnante 2 : ' . $winner[1] . '<br>
    Gagnante 3 : ' . $winner[2] . '<br>
    </ol>
    ', 101);
}
Ca me renvoi des valeur vide, genre par exemple tentative 1, j'ai :
array([0] => monemail@example.com [1] => [2] =>)
ou
array([0] => monemail@example.com [1] => [2] => monemail2@example.com)

Et parfois ça remplit les 3, je penses que c'est à cause du fait que dans le tableau est stocké des valeurs null, si 'est le cas, comment faire pour ne pas les stocker ?

Et j'ai aussi le problème du fait que si l'id est déjà dans le tableau des id choisie, il m'affiche quand même dexu fois la même adresse mail parfois. Pourquoi ? Ne devrait-il pas l'éviter puisqu'elle se trouve dans le tableau des id qui ont déjà été utilisés ?


Voilà merci à ceux qui prendront le temps de m'aider !