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 :
Ca me renvoi des valeur vide, genre par exemple tentative 1, j'ai :
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); }
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 !
Partager