Bonjour à toutes et à tous,

Dans le but de tirer 10 personnes au sort, j'ai crée 2 classes Eleve avec les attributs (nom, prénom et frequence) et EleveManager avec l'attribut (database) et deux méthodes (getList et updateFrequence).

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
 
<?php
 
class Eleve
{
	private $_nom;
	private $_prenom;
	private $_frequence;
 
	public function __construct(array $data)
	{
		foreach($data as $key =>$value)
		{
			$method = 'set'.ucfirst($key);
			if(method_exists($this, $method))
			{
				$this->$method($value);
			}
		}
	}
 
	/* SETTERS */
 
	public function setNom($nom)
	{
		if(is_string($nom))
		{
			$this->_nom = $nom;
		}
	}
 
	public function setPrenom($prenom)
	{
		if(is_string($prenom))
		{
			$this->_prenom = $prenom;
		}
	}
 
	public function setFrequence($frequence)
	{
		if(is_int($frequence) and $frequence >= 0)
		{
			$this->_frequence = $frequence;
		}
	}
 
	/* GETTERS */
 
	public function getNom()
	{
		return $this->_nom;
	}
 
	public function getPrenom()
	{
		return $this->_prenom;
	}
 
	public function getFrequence()
	{
		return $this->_frequence;
	}
 
	/* METHODES*/
 
	public function gagnerFrequence()
	{
		return $this->_frequence ++;
	}
}
 
class ElevesManager
{
	private $_db;
 
	public function __construct($db)
	{
		$this->setDb($db);
	}
 
	public function setDb($db)
	{
		$this->_db = $db;
	}
 
	public function getList()
	{
		$sql = 'SELECT nom, prenom, frequence FROM premiere_quatre ORDER BY nom';
		$stmt = $this->_db->prepare($sql);
		$stmt->execute();
		while($donnees = $stmt->fetch(PDO::FETCH_ASSOC))
		{
			$eleves[] = new Eleve($donnees);
		}
		return $eleves;
	}
 
	public function updateFrequence(Eleve $eleve)
	{
		$sql = 'UPDATE premiere_quatre SET frequence = :frequence WHERE nom = :nom';
		$stmt = $this->_db->prepare($sql);
		$stmt->bindParam(':frequence', $eleve->getFrequence(), PDO::PARAM_INT);
		$stmt->bindParam(':nom', $eleve->getNom(), PDO::PARAM_STR);
		$stmt->execute();
	}
 
}
?>
et la page tirage.php permettant de réaliser le tirage au sort en question :

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
 
<?php
ini_set('display_errors', 1);
require('Eleve_premiere_quatre.php');
?>
 
 
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="../../favicon.ico">
 
    <title>Exercices PHYSIQUE-CHIMIE</title>
 
    <!-- Bootstrap core CSS -->
    <link href="../css/bootstrap.min.css" rel="stylesheet">
 
    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
    <link href="../../assets/css/ie10-viewport-bug-workaround.css" rel="stylesheet">
 
    <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
    <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
    <script src="../../assets/js/ie-emulation-modes-warning.js"></script>
 
    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
 
    <!-- Custom styles for this template -->
    <link href="../css/carousel.css" rel="stylesheet">
  </head>
<!-- NAVBAR
================================================== -->
  <body>
      <div class="container">
 
<?php
$dbh = new PDO('mysql:host=localhost;dbname=lacroix' , 'root', 'root');
$manager = new ElevesManager($dbh);
$eleves = $manager->getList();
echo '<pre>';
var_dump($eleves);
$rand_keys = array_rand($eleves, 10);
?>
 
<h1 class="text-center"> Liste d'élèves concernés par les exercices</h1>
 
 
<div class="col-lg-6">
	<h2 class="text-center">Générer la liste d'élèves concernés</h2>
	<form method="post" class="form-group">
		<input class="form-control" name="envoyer" type="submit" />
	</form>
	<?php if(isset($_POST['envoyer'])) : ?>
			<table class="table table-striped">
				<thead>
					<tr>
						<th class="text-center">Nom</th>
						<th class="text-center">Prénom</th>
					</tr>
				</thead>
				<?php foreach($rand_keys as $id): ?>
				<tr>
					<td class="text-center"><?php echo strtoupper($eleves[$id]->getNom()); ?></td>
					<td class="text-center"><?php echo $eleves[$id]->getPrenom(); ?></td>
				</tr>
                <?php $eleves[$id]->gagnerFrequence(); ?>
                <?php $manager->updateFrequence($eleves[$id]); ?>
				<?php endforeach; ?>
			</table>
	<?php endif; ?>
</div>
 
 <div class="col-lg-6">
 	<h2 class="text-center"> BILAN</h2>
 	<table class="table table-striped">
 		<thead>
 			<tr>
 				<th class="text-center">Nom</th>
 				<th class="text-center">Prénom</th>
 				<th class="text-center">Fréquence</th>
 			</tr>
 		</thead>
 			<?php foreach($eleves as $id => $value): ?>
 				<tr>
 					<td class="text-center"><?php echo strtoupper($eleves[$id]->getNom()); ?></td>
 					<td class="text-center"><?php echo $eleves[$id]->getPrenom(); ?></td>
 					<td class="text-center"><?php echo $eleves[$id]->getFrequence(); ?></td>
 				</tr>
 			<?php endforeach; ?>
 	</table>
 </div>
 
 
 
 
 
    </div><!-- /.container -->
 
 
    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery.min.js"><\/script>')</script>
    <script src="../js/bootstrap.min.js"></script>
    <!-- Just to make our placeholder images work. Don't actually copy the next line! -->
    <script src="../js/vendor/holder.min.js"></script>
    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
    <script src="../js/ie10-viewport-bug-workaround.js"></script>
  </body>
</html>
J'ai actuellement 2 problèmes :

1- Je ne comprends pas pourquoi ma base de donnée ne se remplit pas dans le champ fréquence lors de l'appel de la méthode updateFrequence
2- De plus lorsque je génère ma liste d'élèves, pourquoi le champ fréquence est désespérément nul alors qu'il y a initialement des valeurs dans ma base de données :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
$eleves = $manager->getList();
echo '<pre>';
var_dump($eleves);
Merci d'avance pour vos pistes et bonne journée à tous.