Iinclusion dans une base de données
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:
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:
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:
1 2 3 4
|
$eleves = $manager->getList();
echo '<pre>';
var_dump($eleves); |
Merci d'avance pour vos pistes et bonne journée à tous.