forked from monnerat/web_2025
Compare commits
2 Commits
1dcd20de85
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 045ec81ae2 | |||
| 3c100c0200 |
+19
-4
@@ -30,10 +30,11 @@ Les notions suivantes seront abordées :
|
|||||||
|
|
||||||
| Semaine | Cours | TD/TP |
|
| Semaine | Cours | TD/TP |
|
||||||
| ------------------ | -------------------------------------------------------- | ------------------ |
|
| ------------------ | -------------------------------------------------------- | ------------------ |
|
||||||
| 1 : 16/03 - 20/03| [Bases du langages](./cours/cm_bases_php.pdf) | |
|
| 1 | [Bases du langages](./cours/cm_bases_php.pdf) | |
|
||||||
| 2 : 23/03 - 27/03 | | [tp1](./tp/tp1) |
|
| 2 | | [tp1](./tp/tp1) |
|
||||||
| 3 : 30/03 - 03/04 | [Intéractions avec le client](./cours/cm_interaction_client_serveur.pdf) | [tp2](./tp/tp2) |
|
| 3 | [Intéractions avec le client](./cours/cm_interaction_client_serveur.pdf) | [tp2](./tp/tp2) |
|
||||||
| 4 : 07/04 - 10/04 | [PHP/MySQL](./cours/cm_extension_mysqli.pdf) | [tp3](./tp/tp3) |
|
| 4 | [PHP/MySQL](./cours/cm_extension_mysqli.pdf) | [tp3](./tp/tp3) |
|
||||||
|
| 5 | [Cookies et sessions](./cours/cm_cookies_sessions.pdf) | [tp3](./tp/tp3) , [tp4](./tp/tp4) |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -51,4 +52,18 @@ aborde la récupération des données de formulaires avec PHP.
|
|||||||
À chaque exercice correspond un sous répertoire avec
|
À chaque exercice correspond un sous répertoire avec
|
||||||
des fichiers à compléter.
|
des fichiers à compléter.
|
||||||
|
|
||||||
|
#### TP3 : PHP/Mysql
|
||||||
|
Le [tp3](./tp/tp3)
|
||||||
|
aborde l'interfaçage de php avec mysql, au moyen de l'extention
|
||||||
|
[mysqli](http://php.net/manual/fr/book.mysqli.php) de php.
|
||||||
|
À chaque exercice correspond un sous répertoire avec
|
||||||
|
des fichiers à compléter.
|
||||||
|
|
||||||
|
#### TP4 : Cookies et sessions
|
||||||
|
Le [tp4](./tp/tp4)
|
||||||
|
aborde la notion de cookies et de sessions,et
|
||||||
|
les fonctions php dédiées.
|
||||||
|
À chaque exercice correspond un sous répertoire avec
|
||||||
|
des fichiers à compléter.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -3,7 +3,7 @@
|
|||||||
<body>
|
<body>
|
||||||
<?php
|
<?php
|
||||||
echo "<h1>hello world !!!</h1>";
|
echo "<h1>hello world !!!</h1>";
|
||||||
phpinfo();
|
//phpinfo();
|
||||||
?>
|
?>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -6,8 +6,6 @@ $clients = [
|
|||||||
"Arnaud"
|
"Arnaud"
|
||||||
];
|
];
|
||||||
|
|
||||||
var_dump($clients);
|
|
||||||
|
|
||||||
$produits = [
|
$produits = [
|
||||||
20 => "Chemise",
|
20 => "Chemise",
|
||||||
3 => "Pantalon",
|
3 => "Pantalon",
|
||||||
@@ -25,27 +23,4 @@ print_r($clients);
|
|||||||
print_r($produits);
|
print_r($produits);
|
||||||
print_r($array);
|
print_r($array);
|
||||||
echo "</pre>";
|
echo "</pre>";
|
||||||
|
|
||||||
// Exercice 2.1
|
|
||||||
$tab = [];
|
|
||||||
$somme = 0;
|
|
||||||
for ($i = 0; $i < 10; $i++) {
|
|
||||||
$somme += $i; // somme des entiers de 0 à i
|
|
||||||
$tab[$i] = $somme; // la clé i contient cette somme
|
|
||||||
}
|
|
||||||
print_r($tab);
|
|
||||||
|
|
||||||
|
|
||||||
// Exercice 2.2
|
|
||||||
for ($debut = 1; $debut <= 50; $debut += 10) {
|
|
||||||
echo "<p>";
|
|
||||||
for ($i = $debut; $i < $debut + 10; $i++) {
|
|
||||||
if ($i % 2 === 0) {
|
|
||||||
echo "<strong>$i</strong> ";
|
|
||||||
} else {
|
|
||||||
echo "<em>$i</em> ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
echo "</p>";
|
|
||||||
}
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
include_once './include/data.inc.php';
|
include './include/data.inc.php';
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
@@ -28,26 +28,9 @@ include_once './include/data.inc.php';
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<?php include_once './include/data.inc.php'; ?>
|
|
||||||
<?php foreach ($data as $person) : ?>
|
|
||||||
<?php
|
|
||||||
$poids = (float) $person['Poids'];
|
|
||||||
$tailleM = (float) $person['Taille'] / 100;
|
|
||||||
|
|
||||||
$imc = null;
|
<!-- À compléter -->
|
||||||
if ($tailleM > 0) {
|
|
||||||
$imc = $poids / ($tailleM * $tailleM);
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
<tr class="<?= $imc < 18.5 ? 'underweight' : ($imc < 25 ? 'normal' : 'warning') ?>">
|
|
||||||
<td><?= $person['Nom'] ?></td>
|
|
||||||
<td><?= $person['Prenom'] ?></td>
|
|
||||||
<td><?= $person['Email'] ?></td>
|
|
||||||
<td><?= $person['Taille'] ?></td>
|
|
||||||
<td><?= $person['Poids'] ?></td>
|
|
||||||
<td><?= round($imc, 2) ?></td>
|
|
||||||
</tr>
|
|
||||||
<?php endforeach; ?>
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</main>
|
</main>
|
||||||
|
|||||||
@@ -1,19 +1,3 @@
|
|||||||
<?php
|
|
||||||
// Generate random values for two six-sided dice.
|
|
||||||
$die1 = mt_rand(1, 6);
|
|
||||||
$die2 = mt_rand(1, 6);
|
|
||||||
$sum = $die1 + $die2;
|
|
||||||
|
|
||||||
// Map dice values to matching SVG filenames.
|
|
||||||
$diceImages = [
|
|
||||||
1 => 'dice-six-faces-one.svg',
|
|
||||||
2 => 'dice-six-faces-two.svg',
|
|
||||||
3 => 'dice-six-faces-three.svg',
|
|
||||||
4 => 'dice-six-faces-four.svg',
|
|
||||||
5 => 'dice-six-faces-five.svg',
|
|
||||||
6 => 'dice-six-faces-six.svg',
|
|
||||||
];
|
|
||||||
?>
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
<head>
|
<head>
|
||||||
@@ -29,12 +13,12 @@ $diceImages = [
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<main>
|
<main>
|
||||||
<h5><a href="./">Tirage aléatoire</a></h5>
|
<h5><a href=""> Tirage aléatoire</a></h5>
|
||||||
<article class="is-center">
|
<article class="is-center">
|
||||||
<img src="./img/<?= $diceImages[$die1] ?>" alt="Dé 1 : <?= $die1 ?>">
|
<img src='./img/dice-six-faces-five.svg'>
|
||||||
<img src="./img/<?= $diceImages[$die2] ?>" alt="Dé 2 : <?= $die2 ?>">
|
<img src='./img/dice-six-faces-one.svg'>
|
||||||
</article>
|
</article>
|
||||||
<h5>Somme = <?= $sum ?></h5>
|
<h5>Somme = </h5>
|
||||||
</main>
|
</main>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
include_once './include/favoris.inc.php';
|
include './include/favoris.inc.php';
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
function createPassword($n,$alphabet) {
|
function createPassword($n,$alphabet){
|
||||||
$length = strlen($alphabet);
|
$length = strlen($alphabet);
|
||||||
$password = "";
|
$password = "";
|
||||||
return $password;
|
return $password;
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
include_once './include/fonction.php';
|
include './include/fonction.php';
|
||||||
$alphabet = "@#!*^&azertyuiopqsdfghjkklmwxcvbnAZERTYUIOPLMKJHGFDSQWXCVBN1234567890";
|
$alphabet = "@#!*^&azertyuiopqsdfghjkklmwxcvbnAZERTYUIOPLMKJHGFDSQWXCVBN1234567890";
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
include_once 'include/controller.php';
|
include 'include/controller.php';
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
<html lang="fr">
|
|
||||||
<head>
|
<head>
|
||||||
<link
|
<link
|
||||||
rel="stylesheet"
|
rel="stylesheet"
|
||||||
@@ -12,14 +11,14 @@ include_once 'include/controller.php';
|
|||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css" integrity="sha512-SnH5WK+bZxgPHs44uWIX+LLJAJ9/2PkPKZ5QiAj6Ta86w+fsb2TkcmfRyVX3pBnMFcV7oQPJkl9QevSCWr3W6A==" crossorigin="anonymous" referrerpolicy="no-referrer" />
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css" integrity="sha512-SnH5WK+bZxgPHs44uWIX+LLJAJ9/2PkPKZ5QiAj6Ta86w+fsb2TkcmfRyVX3pBnMFcV7oQPJkl9QevSCWr3W6A==" crossorigin="anonymous" referrerpolicy="no-referrer" />
|
||||||
<link rel="stylesheet" href="./css/style.css">
|
<link rel="stylesheet" href="./css/style.css">
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<title>Exercice 1</title>
|
<title></title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<main>
|
<main>
|
||||||
<ul>
|
<ul>
|
||||||
<?php
|
<?php
|
||||||
echo '<li>' . htmlspecialchars($prenom . ' ' . $nom, ENT_QUOTES, 'UTF-8') . '</li>';
|
echo "<li>$prenom $nom</li>";
|
||||||
echo '<li>' . htmlspecialchars($systeme, ENT_QUOTES, 'UTF-8') . " <i class='fa-brands $icon fa-2x'></i></li>";
|
echo "<li><i class='fa-brands $icon fa-2x'></i></li>";
|
||||||
?>
|
?>
|
||||||
</ul>
|
</ul>
|
||||||
</main>
|
</main>
|
||||||
|
|||||||
@@ -1,27 +1,2 @@
|
|||||||
<?php
|
<?php
|
||||||
|
// TODO
|
||||||
$nom = '';
|
|
||||||
$prenom = '';
|
|
||||||
$systeme = '';
|
|
||||||
$icon = 'fa-circle-question';
|
|
||||||
|
|
||||||
$systemes = [
|
|
||||||
1 => ['nom' => 'Linux', 'icon' => 'fa-linux'],
|
|
||||||
2 => ['nom' => 'Windows', 'icon' => 'fa-windows'],
|
|
||||||
3 => ['nom' => 'macOS', 'icon' => 'fa-apple'],
|
|
||||||
4 => ['nom' => 'Android', 'icon' => 'fa-android'],
|
|
||||||
];
|
|
||||||
|
|
||||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
||||||
$nomSaisi = trim((string) filter_input(INPUT_POST, 'nom', FILTER_UNSAFE_RAW));
|
|
||||||
$prenomSaisi = trim((string) filter_input(INPUT_POST, 'prenom', FILTER_UNSAFE_RAW));
|
|
||||||
$os = filter_input(INPUT_POST, 'os', FILTER_VALIDATE_INT);
|
|
||||||
|
|
||||||
$nom = ucfirst(strtolower($nomSaisi));
|
|
||||||
$prenom = ucfirst(strtolower($prenomSaisi));
|
|
||||||
|
|
||||||
if (isset($systemes[$os])) {
|
|
||||||
$systeme = $systemes[$os]['nom'];
|
|
||||||
$icon = $systemes[$os]['icon'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,18 +1,2 @@
|
|||||||
<?php
|
<?php
|
||||||
|
// TODO
|
||||||
$table = filter_input(INPUT_GET, 'table', FILTER_VALIDATE_INT);
|
|
||||||
|
|
||||||
$lignes = [];
|
|
||||||
$messageErreur = '';
|
|
||||||
|
|
||||||
if ($table === false || $table === null) {
|
|
||||||
$messageErreur = 'Veuillez saisir un entier valide.';
|
|
||||||
} else {
|
|
||||||
for ($multiplicateur = 1; $multiplicateur <= 10; $multiplicateur++) {
|
|
||||||
$lignes[] = [
|
|
||||||
'multiplicateur' => $multiplicateur,
|
|
||||||
'resultat' => $table * $multiplicateur,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
include_once 'include/controller.php';
|
include 'include/controller.php';
|
||||||
?>
|
?>
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="fr">
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link
|
<link
|
||||||
@@ -10,38 +10,14 @@ include_once 'include/controller.php';
|
|||||||
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.classless.min.css"
|
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.classless.min.css"
|
||||||
/>
|
/>
|
||||||
<link rel="stylesheet" href="./css/style.css">
|
<link rel="stylesheet" href="./css/style.css">
|
||||||
<title>Exercice 2</title>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<main>
|
<main>
|
||||||
<h4>Table de multiplication</h4>
|
<h4>Table de multiplication</h4>
|
||||||
<form method="GET">
|
<form method="GET">
|
||||||
<input
|
<input type=number name="table" placeholder="table">
|
||||||
type="number"
|
|
||||||
name="table"
|
|
||||||
placeholder="table"
|
|
||||||
value="<?php echo htmlspecialchars($table, ENT_QUOTES, 'UTF-8'); ?>"
|
|
||||||
>
|
|
||||||
<button type="submit">ENVOYER</button>
|
<button type="submit">ENVOYER</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<?php if ($messageErreur !== '') : ?>
|
|
||||||
<p><?php echo htmlspecialchars($messageErreur, ENT_QUOTES, 'UTF-8'); ?></p>
|
|
||||||
<?php endif; ?>
|
|
||||||
|
|
||||||
<?php if ($table !== false && $table !== null) : ?>
|
|
||||||
<ul>
|
|
||||||
<?php foreach ($lignes as $ligne) : ?>
|
|
||||||
<li>
|
|
||||||
<?php echo htmlspecialchars((string) $table, ENT_QUOTES, 'UTF-8'); ?>
|
|
||||||
x
|
|
||||||
<?php echo htmlspecialchars((string) $ligne['multiplicateur'], ENT_QUOTES, 'UTF-8'); ?>
|
|
||||||
=
|
|
||||||
<?php echo htmlspecialchars((string) $ligne['resultat'], ENT_QUOTES, 'UTF-8'); ?>
|
|
||||||
</li>
|
|
||||||
<?php endforeach; ?>
|
|
||||||
</ul>
|
|
||||||
<?php endif; ?>
|
|
||||||
</main>
|
</main>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
<?php
|
<?php
|
||||||
include_once 'include/controller.php';
|
include 'include/controller.php';
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<title>Exercice 3</title>
|
<title></title>
|
||||||
<link
|
<link
|
||||||
rel="stylesheet"
|
rel="stylesheet"
|
||||||
href="https://cdn.jsdelivr.net/npm/@picocss/pico.min.css"
|
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css"
|
||||||
/>
|
/>
|
||||||
<link rel="stylesheet" href="./css/style.css">
|
<link rel="stylesheet" href="./css/style.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@@ -18,42 +18,17 @@ include_once 'include/controller.php';
|
|||||||
<h3>Calculatrice</h3>
|
<h3>Calculatrice</h3>
|
||||||
<form method="POST">
|
<form method="POST">
|
||||||
<div class="grid">
|
<div class="grid">
|
||||||
<input
|
<input placeholder="un nombre" type="number" step="any" name="op1" value ="" required>
|
||||||
placeholder="un nombre"
|
|
||||||
type="number"
|
|
||||||
step="any"
|
|
||||||
name="op1"
|
|
||||||
value="<?php echo htmlspecialchars($valeurOp1, ENT_QUOTES, 'UTF-8'); ?>"
|
|
||||||
required
|
|
||||||
>
|
|
||||||
<select name="operation" required>
|
<select name="operation" required>
|
||||||
<option value="+" <?php echo $operation === '+' ? 'selected' : ''; ?>>+</option>
|
<option value="+">+</option>
|
||||||
<option value="-" <?php echo $operation === '-' ? 'selected' : ''; ?>>-</option>
|
<option value="-">-</option>
|
||||||
<option value="x" <?php echo $operation === 'x' ? 'selected' : ''; ?>>x</option>
|
<option value="x">x</option>
|
||||||
<option value="/" <?php echo $operation === '/' ? 'selected' : ''; ?>>/</option>
|
<option value="/">/</option>
|
||||||
</select>
|
</select>
|
||||||
<input
|
<input placeholder="un nombre" type="number" step="any" name="op2" required>
|
||||||
placeholder="un nombre"
|
<button type="submit" name="soumis"> Calculer</button>
|
||||||
type="number"
|
</grid>
|
||||||
step="any"
|
|
||||||
name="op2"
|
|
||||||
value="<?php echo htmlspecialchars($valeurOp2, ENT_QUOTES, 'UTF-8'); ?>"
|
|
||||||
required
|
|
||||||
>
|
|
||||||
<button type="submit" name="soumis">Calculer</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<?php if ($messageErreur !== '') : ?>
|
|
||||||
<p><?php echo htmlspecialchars($messageErreur, ENT_QUOTES, 'UTF-8'); ?></p>
|
|
||||||
<?php endif; ?>
|
|
||||||
|
|
||||||
<?php if ($aCalcule) : ?>
|
|
||||||
<p>
|
|
||||||
Résultat :
|
|
||||||
<?php echo htmlspecialchars($valeurOp1, ENT_QUOTES, 'UTF-8'); ?>
|
|
||||||
</p>
|
|
||||||
<?php endif; ?>
|
|
||||||
</main>
|
</main>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,56 +1,2 @@
|
|||||||
<?php
|
<?php
|
||||||
|
//TODO
|
||||||
$op1Saisi = filter_input(INPUT_POST, 'op1', FILTER_UNSAFE_RAW);
|
|
||||||
$op2Saisi = filter_input(INPUT_POST, 'op2', FILTER_UNSAFE_RAW);
|
|
||||||
$operationSaisie = filter_input(INPUT_POST, 'operation', FILTER_UNSAFE_RAW);
|
|
||||||
|
|
||||||
$op1Saisi = is_string($op1Saisi) ? trim($op1Saisi) : '';
|
|
||||||
$op2Saisi = is_string($op2Saisi) ? trim($op2Saisi) : '';
|
|
||||||
$operationSaisie = is_string($operationSaisie) ? trim($operationSaisie) : '+';
|
|
||||||
|
|
||||||
$operationsAutorisees = ['+', '-', 'x', '/'];
|
|
||||||
$operation = in_array($operationSaisie, $operationsAutorisees, true) ? $operationSaisie : '+';
|
|
||||||
|
|
||||||
$resultat = null;
|
|
||||||
$messageErreur = '';
|
|
||||||
$aCalcule = false;
|
|
||||||
|
|
||||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
||||||
$op1 = filter_var($op1Saisi, FILTER_VALIDATE_FLOAT);
|
|
||||||
$op2 = filter_var($op2Saisi, FILTER_VALIDATE_FLOAT);
|
|
||||||
|
|
||||||
if ($op1 === false || $op2 === false) {
|
|
||||||
$messageErreur = 'Veuillez saisir deux nombres valides.';
|
|
||||||
} elseif (!in_array($operation, $operationsAutorisees, true)) {
|
|
||||||
$messageErreur = 'Veuillez choisir une opération valide.';
|
|
||||||
} elseif ($operation === '/' && (float) $op2 == 0.0) {
|
|
||||||
$messageErreur = 'La division par zéro est impossible.';
|
|
||||||
} else {
|
|
||||||
$aCalcule = true;
|
|
||||||
|
|
||||||
switch ($operation) {
|
|
||||||
case '+':
|
|
||||||
$resultat = $op1 + $op2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '-':
|
|
||||||
$resultat = $op1 - $op2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'x':
|
|
||||||
$resultat = $op1 * $op2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '/':
|
|
||||||
$resultat = $op1 / $op2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
$messageErreur = 'Veuillez choisir une opération valide.';
|
|
||||||
$aCalcule = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$valeurOp1 = $aCalcule ? (string) $resultat : $op1Saisi;
|
|
||||||
$valeurOp2 = $op2Saisi;
|
|
||||||
|
|||||||
@@ -2,13 +2,3 @@ button{
|
|||||||
|
|
||||||
float:right;
|
float:right;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bonne-reponse {
|
|
||||||
color: #1b7f3a;
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mauvaise-reponse {
|
|
||||||
color: #c62828;
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,81 +1,17 @@
|
|||||||
<?php
|
|
||||||
$nombreQuestions = 0;
|
|
||||||
$score = 0;
|
|
||||||
$questionsTraitees = 0;
|
|
||||||
$message = 'Aucun resultat a afficher.';
|
|
||||||
$resultatsParQuestion = [];
|
|
||||||
|
|
||||||
$nombreQuestionsSaisi = filter_input(INPUT_POST, 'nbq', FILTER_VALIDATE_INT);
|
|
||||||
|
|
||||||
if ($_SERVER['REQUEST_METHOD'] === 'POST' && $nombreQuestionsSaisi !== false && $nombreQuestionsSaisi !== null) {
|
|
||||||
$nombreQuestions = $nombreQuestionsSaisi;
|
|
||||||
$message = '';
|
|
||||||
|
|
||||||
for ($index = 1; $index <= $nombreQuestions; $index++) {
|
|
||||||
$reponse = filter_input(INPUT_POST, 'question' . $index, FILTER_UNSAFE_RAW);
|
|
||||||
|
|
||||||
if ($reponse !== null) {
|
|
||||||
$questionsTraitees++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($reponse === 'vrai') {
|
|
||||||
$score++;
|
|
||||||
$resultatsParQuestion[] = [
|
|
||||||
'numero' => $index,
|
|
||||||
'classe' => 'bonne-reponse',
|
|
||||||
'message' => 'Bonne reponse',
|
|
||||||
];
|
|
||||||
} else {
|
|
||||||
$resultatsParQuestion[] = [
|
|
||||||
'numero' => $index,
|
|
||||||
'classe' => 'mauvaise-reponse',
|
|
||||||
'message' => 'Mauvaise reponse',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<link rel="stylesheet" href="./css/style.css">
|
<link rel="stylesheet" href="./css/style.css">
|
||||||
<link
|
<link
|
||||||
rel="stylesheet"
|
rel="stylesheet"
|
||||||
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.classless.min.css"
|
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.classless.min.css"
|
||||||
/>
|
/>
|
||||||
<meta charset="UTF-8" />
|
<title></title>
|
||||||
<title>Exercice 4</title>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<main>
|
<main>
|
||||||
<h4>Resultat du quizz</h4>
|
<h4>Réponses</h4>
|
||||||
<?php if ($message !== '') : ?>
|
</div>
|
||||||
<p><?php echo htmlspecialchars($message, ENT_QUOTES, 'UTF-8'); ?></p>
|
|
||||||
<?php else : ?>
|
|
||||||
<p>
|
|
||||||
Vous avez obtenu
|
|
||||||
<?php echo htmlspecialchars((string) $score, ENT_QUOTES, 'UTF-8'); ?>
|
|
||||||
bonne(s) reponse(s) sur
|
|
||||||
<?php echo htmlspecialchars((string) $nombreQuestions, ENT_QUOTES, 'UTF-8'); ?>.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Questions repondues :
|
|
||||||
<?php echo htmlspecialchars((string) $questionsTraitees, ENT_QUOTES, 'UTF-8'); ?>.
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<?php foreach ($resultatsParQuestion as $resultatQuestion) : ?>
|
|
||||||
<li>
|
|
||||||
Question <?php echo htmlspecialchars((string) $resultatQuestion['numero'], ENT_QUOTES, 'UTF-8'); ?> :
|
|
||||||
<span class="<?php echo htmlspecialchars($resultatQuestion['classe'], ENT_QUOTES, 'UTF-8'); ?>">
|
|
||||||
<?php echo htmlspecialchars($resultatQuestion['message'], ENT_QUOTES, 'UTF-8'); ?>
|
|
||||||
</span>
|
|
||||||
</li>
|
|
||||||
<?php endforeach; ?>
|
|
||||||
</ul>
|
|
||||||
<?php endif; ?>
|
|
||||||
<p>
|
|
||||||
<a href="quizz.html">Revenir au quizz</a>
|
|
||||||
</p>
|
|
||||||
</main>
|
</main>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,45 +1,23 @@
|
|||||||
<?php
|
<?php
|
||||||
include_once 'include/controller.php';
|
include 'include/controller.php';
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link
|
<link
|
||||||
rel="stylesheet"
|
rel="stylesheet"
|
||||||
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.classless.min.css"
|
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.classless.min.css"
|
||||||
/>
|
/>
|
||||||
<link rel="stylesheet" href="./css/style.css">
|
<link rel="stylesheet" href="./css/style.css">
|
||||||
<title>Exercice 5</title>
|
|
||||||
|
<title></title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<main>
|
<main>
|
||||||
<h3>Conjugaison</h3>
|
|
||||||
|
|
||||||
<?php if ($messageErreur !== '') : ?>
|
|
||||||
<p><?php echo htmlspecialchars($messageErreur, ENT_QUOTES, 'UTF-8'); ?></p>
|
|
||||||
<?php else : ?>
|
|
||||||
<p>
|
|
||||||
Verbe :
|
|
||||||
<?php echo htmlspecialchars($verbe, ENT_QUOTES, 'UTF-8'); ?>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<?php foreach ($conjugaisons as $conjugaison) : ?>
|
|
||||||
<section>
|
|
||||||
<h4><?php echo htmlspecialchars($conjugaison['temps'], ENT_QUOTES, 'UTF-8'); ?></h4>
|
|
||||||
<ul>
|
|
||||||
<?php foreach ($conjugaison['formes'] as $forme) : ?>
|
|
||||||
<li><?php echo htmlspecialchars($forme, ENT_QUOTES, 'UTF-8'); ?></li>
|
|
||||||
<?php endforeach; ?>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<?php endforeach; ?>
|
|
||||||
<?php endif; ?>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<a href="ex5.html">Retour au formulaire</a>
|
|
||||||
</p>
|
|
||||||
</main>
|
</main>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,64 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
$terminaisons = array(
|
$terminaisons = array(
|
||||||
'present' => array('e', 'es', 'e', 'ons', 'ez', 'ent'),
|
"present"=>array("e","es","e","ons","ez","ent"),
|
||||||
'futur' => array('erai', 'eras', 'era', 'erons', 'erez', 'eront'),
|
"futur"=>array("erai","eras","era","erons","erez","eront"),
|
||||||
'imparfait' => array('ais', 'ais', 'ait', 'ions', 'iez', 'aient')
|
"imparfait"=>array("ais","ais","ait","ions","iez","aient")
|
||||||
);
|
);
|
||||||
|
|
||||||
$libellesTemps = array(
|
$pronoms=array("je","tu","il","nous","vous","ils");
|
||||||
'present' => 'Present',
|
|
||||||
'futur' => 'Futur',
|
|
||||||
'imparfait' => 'Imparfait'
|
|
||||||
);
|
|
||||||
|
|
||||||
$pronoms = array('je', 'tu', 'il', 'nous', 'vous', 'ils');
|
$verbe = filter_input(INPUT_POST,"verbe",FILTER_SANITIZE_STRING);
|
||||||
|
$radical = substr($verbe,0,strlen($verbe)-2);
|
||||||
$verbeSaisi = filter_input(INPUT_POST, 'verbe', FILTER_UNSAFE_RAW);
|
|
||||||
$verbeSaisi = is_string($verbeSaisi) ? trim($verbeSaisi) : '';
|
|
||||||
$verbe = strtolower($verbeSaisi);
|
|
||||||
|
|
||||||
$tempsChoisis = filter_input(INPUT_POST, 'temps', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
|
|
||||||
$tempsChoisis = is_array($tempsChoisis) ? $tempsChoisis : array();
|
|
||||||
|
|
||||||
$messageErreur = '';
|
|
||||||
$conjugaisons = array();
|
|
||||||
|
|
||||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
||||||
if ($verbe === '') {
|
|
||||||
$messageErreur = 'Veuillez saisir un verbe.';
|
|
||||||
} elseif (strlen($verbe) < 3 || substr($verbe, -2) !== 'er') {
|
|
||||||
$messageErreur = 'Veuillez saisir un verbe du premier groupe.';
|
|
||||||
} elseif ($tempsChoisis === array()) {
|
|
||||||
$messageErreur = 'Veuillez choisir au moins un temps.';
|
|
||||||
} else {
|
|
||||||
$radical = substr($verbe, 0, strlen($verbe) - 2);
|
|
||||||
|
|
||||||
foreach ($tempsChoisis as $temps) {
|
|
||||||
if (!isset($terminaisons[$temps], $libellesTemps[$temps])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$formes = array();
|
|
||||||
|
|
||||||
foreach ($pronoms as $index => $pronom) {
|
|
||||||
$forme = $radical . $terminaisons[$temps][$index];
|
|
||||||
|
|
||||||
if ($pronom === 'je' && preg_match('/^[aeiouh]/', $forme) === 1) {
|
|
||||||
$formes[] = "j'" . $forme;
|
|
||||||
} else {
|
|
||||||
$formes[] = $pronom . ' ' . $forme;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$conjugaisons[] = array(
|
|
||||||
'temps' => $libellesTemps[$temps],
|
|
||||||
'formes' => $formes
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($conjugaisons === array()) {
|
|
||||||
$messageErreur = 'Aucun temps valide n a ete transmis.';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,3 @@ color:#2E8B57;
|
|||||||
.Loss{
|
.Loss{
|
||||||
color:#FF6347;
|
color:#FF6347;
|
||||||
}
|
}
|
||||||
.Draw{
|
|
||||||
color:#DAA520;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,35 +1,20 @@
|
|||||||
<?php
|
<?php
|
||||||
$ROCK = 0;
|
$images = ["rock.png","paper.png","scissors.png"];
|
||||||
$PAPER = 1;
|
$isPlaying = true;
|
||||||
$SCISSORS = 2;
|
|
||||||
|
|
||||||
$images = ["rock.png", "paper.png", "scissors.png"];
|
$playerChoice = 0;
|
||||||
$rules = [
|
$computerChoice = 1;
|
||||||
$ROCK => [$ROCK => "Draw", $PAPER => "Loss", $SCISSORS => "Win"],
|
|
||||||
$PAPER => [$ROCK => "Win", $PAPER => "Draw", $SCISSORS => "Loss"],
|
|
||||||
$SCISSORS => [$ROCK => "Loss", $PAPER => "Win", $SCISSORS => "Draw"],
|
|
||||||
];
|
|
||||||
|
|
||||||
$playerChoice = filter_input(
|
$message = "Win";
|
||||||
INPUT_GET,
|
$class = "Win";
|
||||||
'choice',
|
|
||||||
FILTER_VALIDATE_INT,
|
|
||||||
['options' => ['min_range' => 0, 'max_range' => 2]]
|
|
||||||
);
|
|
||||||
|
|
||||||
$isPlaying = ($playerChoice !== null && $playerChoice !== false);
|
$imagePlayer = $images[$playerChoice];
|
||||||
|
$imageComputer = $images[$computerChoice];
|
||||||
|
|
||||||
if ($isPlaying) {
|
include './views/header.php';
|
||||||
$computerChoice = mt_rand(0, 2);
|
if ($isPlaying){
|
||||||
$message = $rules[$playerChoice][$computerChoice];
|
include './views/game.php';
|
||||||
$class = $message;
|
include './views/message.php';
|
||||||
$imagePlayer = $images[$playerChoice];
|
|
||||||
$imageComputer = $images[$computerChoice];
|
|
||||||
}
|
}
|
||||||
|
include './views/footer.php';
|
||||||
include_once './views/header.php';
|
?>
|
||||||
if ($isPlaying) {
|
|
||||||
include_once './views/game.php';
|
|
||||||
include_once './views/message.php';
|
|
||||||
}
|
|
||||||
include_once './views/footer.php';
|
|
||||||
|
|||||||
@@ -1,37 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
include_once './modeles/modeleFilms.php';
|
include './modeles/modeleFilms.php';
|
||||||
|
|
||||||
$currentPage = filter_input(
|
$films = getFilms();
|
||||||
INPUT_GET,
|
|
||||||
'page',
|
|
||||||
FILTER_VALIDATE_INT,
|
|
||||||
['options' => ['min_range' => 1]]
|
|
||||||
);
|
|
||||||
|
|
||||||
if ($currentPage === null || $currentPage === false) {
|
|
||||||
$currentPage = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
$perPage = 10;
|
|
||||||
$data = getFilms($currentPage, $perPage);
|
|
||||||
$films = $data['films'];
|
|
||||||
$errorMessage = $data['error'];
|
|
||||||
$totalFilms = $data['total'];
|
|
||||||
$totalPages = max(1, (int) ceil($totalFilms / $perPage));
|
|
||||||
|
|
||||||
if ($currentPage > $totalPages && $totalFilms > 0) {
|
|
||||||
$currentPage = $totalPages;
|
|
||||||
$data = getFilms($currentPage, $perPage);
|
|
||||||
$films = $data['films'];
|
|
||||||
$errorMessage = $data['error'];
|
|
||||||
$totalFilms = $data['total'];
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// on "charge" la vue
|
// on "charge" la vue
|
||||||
//
|
//
|
||||||
|
|
||||||
include_once './vues/header.php';
|
include './vues/header.php';
|
||||||
include_once './vues/vueFilms.php';
|
include './vues/vueFilms.php';
|
||||||
include_once './vues/footer.php';
|
include './vues/footer.php';
|
||||||
|
?>
|
||||||
|
|
||||||
|
|||||||
@@ -1,69 +1,16 @@
|
|||||||
<?php
|
<?php
|
||||||
function getConnection()
|
function _getConnection()
|
||||||
{
|
{
|
||||||
static $conn = null;
|
static $_conn = NULL;
|
||||||
|
if ($_conn === NULL){
|
||||||
if ($conn === null) {
|
$_conn = mysqli_connect("localhost","","","");
|
||||||
$host = getenv('DB_HOST') ?: 'https://dwarves.iut-fbleau.fr';
|
|
||||||
$login = getenv('DB_USER') ?: getenv('USER') ?: getenv('USERNAME') ?: 'root';
|
|
||||||
$password = getenv('DB_PASSWORD') ?: $login;
|
|
||||||
$database = getenv('DB_NAME') ?: $login;
|
|
||||||
$conn = mysqli_connect($host, $login, $password, $database);
|
|
||||||
|
|
||||||
if ($conn !== false) {
|
|
||||||
mysqli_set_charset($conn, 'utf8mb4');
|
|
||||||
}
|
}
|
||||||
}
|
return $_conn;
|
||||||
|
|
||||||
return $conn;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getFilms($page = 1, $perPage = 10)
|
|
||||||
|
function getFilms()
|
||||||
{
|
{
|
||||||
$conn = getConnection();
|
// A completer
|
||||||
if ($conn === false) {
|
|
||||||
return [
|
|
||||||
'films' => [],
|
|
||||||
'total' => 0,
|
|
||||||
'error' => 'Connexion MySQL impossible.',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
$page = max(1, (int) $page);
|
|
||||||
$perPage = max(1, (int) $perPage);
|
|
||||||
$offset = ($page - 1) * $perPage;
|
|
||||||
|
|
||||||
$sql = "SELECT SQL_CALC_FOUND_ROWS
|
|
||||||
F.idFilm,
|
|
||||||
F.titre,
|
|
||||||
F.annee,
|
|
||||||
G.code AS genre,
|
|
||||||
A.prenom,
|
|
||||||
A.nom
|
|
||||||
FROM Film AS F
|
|
||||||
INNER JOIN Artiste AS A ON F.idMes = A.idArtiste
|
|
||||||
INNER JOIN Genre AS G ON F.genre = G.code
|
|
||||||
ORDER BY F.titre ASC
|
|
||||||
LIMIT {$offset}, {$perPage}";
|
|
||||||
|
|
||||||
$result = mysqli_query($conn, $sql);
|
|
||||||
if ($result === false) {
|
|
||||||
return [
|
|
||||||
'films' => [],
|
|
||||||
'total' => 0,
|
|
||||||
'error' => 'Exécution de la requête impossible.',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
$films = mysqli_fetch_all($result, MYSQLI_ASSOC);
|
|
||||||
|
|
||||||
$totalResult = mysqli_query($conn, 'SELECT FOUND_ROWS() AS total');
|
|
||||||
$totalRow = $totalResult ? mysqli_fetch_assoc($totalResult) : ['total' => 0];
|
|
||||||
$total = isset($totalRow['total']) ? (int) $totalRow['total'] : 0;
|
|
||||||
|
|
||||||
return [
|
|
||||||
'films' => $films,
|
|
||||||
'total' => $total,
|
|
||||||
'error' => null,
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
?>
|
||||||
|
|||||||
@@ -4,9 +4,6 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<h2>Films</h2>
|
<h2>Films</h2>
|
||||||
<?php if (!empty($errorMessage)) { ?>
|
|
||||||
<article><?php echo htmlspecialchars($errorMessage, ENT_QUOTES, 'UTF-8'); ?></article>
|
|
||||||
<?php } ?>
|
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -18,47 +15,18 @@
|
|||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<?php
|
<?php
|
||||||
foreach ($films as $film) {
|
foreach($films as $film){
|
||||||
$titre = htmlspecialchars($film['titre'], ENT_QUOTES, 'UTF-8');
|
|
||||||
$annee = htmlspecialchars((string) $film['annee'], ENT_QUOTES, 'UTF-8');
|
|
||||||
$genre = htmlspecialchars($film['genre'], ENT_QUOTES, 'UTF-8');
|
|
||||||
$realisateur = htmlspecialchars($film['prenom'] . ' ' . $film['nom'], ENT_QUOTES, 'UTF-8');
|
|
||||||
|
|
||||||
echo "
|
echo "
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href='#'>{$titre}</a></td>
|
<td><a href='#'>{$film['titre']}</a></td>
|
||||||
<td>{$annee}</td>
|
<td>{$film['annee']}</td>
|
||||||
<td>{$genre}</td>
|
<td>{$film['genre']}</td>
|
||||||
<td>{$realisateur}</td>
|
<td>{$film['prenom']} {$film['nom']}</td>
|
||||||
</tr>";
|
</tr>";
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<?php if ($totalPages > 1) { ?>
|
|
||||||
<nav>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<?php if ($currentPage > 1) { ?>
|
|
||||||
<a href="?page=<?php echo $currentPage - 1; ?>">Précédent</a>
|
|
||||||
<?php } else { ?>
|
|
||||||
<span>Précédent</span>
|
|
||||||
<?php } ?>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<ul>
|
|
||||||
<li>Page <?php echo $currentPage; ?> / <?php echo $totalPages; ?></li>
|
|
||||||
</ul>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<?php if ($currentPage < $totalPages) { ?>
|
|
||||||
<a href="?page=<?php echo $currentPage + 1; ?>">Suivant</a>
|
|
||||||
<?php } else { ?>
|
|
||||||
<span>Suivant</span>
|
|
||||||
<?php } ?>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
<?php } ?>
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,76 @@
|
|||||||
|
|
||||||
|
# TP4 : Cookies et sessions en PHP.
|
||||||
|
|
||||||
|
### Ex1.
|
||||||
|
Complétez le script `index.php` de l'exercice 1 de manière à
|
||||||
|
mémoriser grâce à un cookie votre os préféré (parmi Linux, Windows et
|
||||||
|
MacOS). Le cookie est valable pendant une minute, et l'os par
|
||||||
|
défaut est Linux.
|
||||||
|
|
||||||
|

|
||||||
|
### Ex2.
|
||||||
|
Le but est de créer un min-jeu de morpion.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Les variables de session :
|
||||||
|
- `grid` : le plateau du jeu. tableau de 9 cases, prennant les valeurs 0 (libre), 1 (joueur 1), 2 (joueur 2).
|
||||||
|
- `playerTurn` : le joueur qui joue.
|
||||||
|
|
||||||
|
Le script prend en paramètre la variable `pos` : la position du coup joué par le joueur.
|
||||||
|
|
||||||
|
### Ex3.
|
||||||
|
On désire rendre les pages du [tp3](./../tp3) (cinema) accessibles
|
||||||
|
uniquement à des utilisateur **inscrits au préalable**.
|
||||||
|
|
||||||
|
1. Rajouter à la base une table `user` qui comprend un **login**,
|
||||||
|
**email** et un **password**. (login est la clé)
|
||||||
|
2. Ecrire un formulaire d'inscription au site qui comprend les
|
||||||
|
champs correspondants. Vous enregistrerez dans la base la mot de
|
||||||
|
passe hashé avec la fonction
|
||||||
|
[password\_hash](http://php.net/manual/fr/function.password-hash.php)
|
||||||
|
de php.
|
||||||
|
3. Faire en sorte que toutes les pages de l'application soient
|
||||||
|
accessibles **uniquement** si l'utilisateur s'est authentifié.
|
||||||
|
(utiliser une session)
|
||||||
|
|
||||||
|
Ecrire les scripts ou pages suivants
|
||||||
|
<dl>
|
||||||
|
<dt><code>inscription.php</code></dt>
|
||||||
|
<dd>formulaire d'inscription, et qui traite les données du formulaire.
|
||||||
|
Si le formulaire n'est pas correctement rempli, Il est réaffiché.
|
||||||
|
(les champs correctes sont conservés !)</dd>
|
||||||
|
<dt><code>authentification.html</code></dt>
|
||||||
|
<dd>formulaire d'authentification.</dd>
|
||||||
|
<dt><code>verification.php</code></dt>
|
||||||
|
<dd>traite le formulaire précédent et vérifie si l'utilisateur est
|
||||||
|
enregistré. En cas de succés, renvoie vers la page d'accueil du
|
||||||
|
site. Pour éviter des attaques force brute, ajoutez une
|
||||||
|
temporisation qui ralentira de telles attaques.</dd>
|
||||||
|
<dt><code>securite.php</code></dt>
|
||||||
|
<dd>morceau de code que vous inclurez systématiquement dans vos pages
|
||||||
|
que vous voulez rendre accessible uniquement aux utilisateurs dûment
|
||||||
|
authentifiés. Ce script vérifiera l'existence d'une variable de
|
||||||
|
session créée lors de la connexion.</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
Pour permettre l'authentification d'un utilisateur, il faut que
|
||||||
|
login et le mot de passe conviennent. On compare le hash de
|
||||||
|
l'utilisateur stocké dans la base avec le hashage calculé du
|
||||||
|
password soumis lors de l'authentification :
|
||||||
|
|
||||||
|
|
||||||
|
```php
|
||||||
|
<?php
|
||||||
|
// Voir l'exemple fourni sur la page de la fonction password_hash()
|
||||||
|
// pour savoir d'où cela provient.
|
||||||
|
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';
|
||||||
|
|
||||||
|
if (password_verify('rasmuslerdorf', $hash)) {
|
||||||
|
echo 'Le mot de passe est valide !';
|
||||||
|
} else {
|
||||||
|
echo 'Le mot de passe est invalide.';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?php
|
||||||
|
$osSet = ['linux','apple','windows'];
|
||||||
|
$os = "linux";
|
||||||
|
|
||||||
|
include './views/main.php';
|
||||||
|
?>
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css"
|
||||||
|
/>
|
||||||
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<main class="container">
|
||||||
|
<form method="POST">
|
||||||
|
<fieldset class="grid">
|
||||||
|
<legend>Changez votre os</legend>
|
||||||
|
<label>
|
||||||
|
<input type="radio" name="os" value="linux">
|
||||||
|
<i class="fa fa-linux fa-2x" aria-hidden="true"></i>
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
<input type="radio" name="os" value="windows">
|
||||||
|
<i class="fa fa-windows fa-2x" aria-hidden="true"></i>
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
<input type="radio" name="os" value="apple">
|
||||||
|
<i class="fa fa-apple fa-2x" aria-hidden="true"></i>
|
||||||
|
</label>
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
<button type="submit">Envoyer</button>
|
||||||
|
</form>
|
||||||
|
<article>
|
||||||
|
<header>Votre os</header>
|
||||||
|
<?php echo "<i class='fa fa-$os fa-5x'></i>";?>
|
||||||
|
<footer>
|
||||||
|
Rafraîchir la page <a href=""><i class="fa fa-refresh" aria-hidden="true"></i></a>
|
||||||
|
</footer>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
table.morpion{
|
||||||
|
border-collapse: collapse;
|
||||||
|
table-layout:fixed;
|
||||||
|
margin-left:auto;
|
||||||
|
margin-right:auto;
|
||||||
|
display:inline-block;
|
||||||
|
width:auto;
|
||||||
|
}
|
||||||
|
table.morpion td {
|
||||||
|
border : 1px solid #aaaaaa;
|
||||||
|
width:10rem;
|
||||||
|
height:10rem;
|
||||||
|
padding : 0px;
|
||||||
|
margin:0px;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-align:center;
|
||||||
|
vertical-align:middle;
|
||||||
|
}
|
||||||
|
table.morpion i {
|
||||||
|
font-size:8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.morpion a {
|
||||||
|
display : inline-block;
|
||||||
|
width : 8rem;
|
||||||
|
height: 8rem;
|
||||||
|
|
||||||
|
}
|
||||||
|
.center{
|
||||||
|
text-align:center;
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
<?php
|
||||||
|
function isWinner($grid, $player)
|
||||||
|
{
|
||||||
|
$winStates = array
|
||||||
|
(
|
||||||
|
array(0, 1, 2), array(3, 4, 5), array(6, 7, 8), // Horizontal
|
||||||
|
array(0, 3, 6), array(1, 4, 7), array(2, 5, 8), // Vertical
|
||||||
|
array(0, 4, 8), array(2, 4, 6) // Diagonal
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($winStates as $winState)
|
||||||
|
{
|
||||||
|
if ($grid[$winState[0]] == $player &&
|
||||||
|
$grid[$winState[1]] == $player &&
|
||||||
|
$grid[$winState[2]] == $player)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function noWinner($grid)
|
||||||
|
{
|
||||||
|
for($i = 0; $i < 9; $i++)
|
||||||
|
if ($grid[$i] == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function displayGrid($grid)
|
||||||
|
{
|
||||||
|
echo '<table class="morpion">';
|
||||||
|
for ($i = 0; $i < 3; $i ++){
|
||||||
|
echo "<tr>";
|
||||||
|
for ($j = 0; $j < 3; $j ++){
|
||||||
|
|
||||||
|
echo "<td>";
|
||||||
|
|
||||||
|
$pos = 3*$i + $j;
|
||||||
|
if ($grid[$pos] == 0)
|
||||||
|
echo "<a href='?pos=$pos'></a>";
|
||||||
|
if ($grid[$pos] == 1)
|
||||||
|
echo '<i class="fa fa-times" aria-hidden="true"></i>';
|
||||||
|
if ($grid[$pos] == 2)
|
||||||
|
echo '<i class="fa fa-circle-o" aria-hidden="true"></i>';
|
||||||
|
|
||||||
|
echo "</td>";
|
||||||
|
}
|
||||||
|
echo "</tr>";
|
||||||
|
}
|
||||||
|
echo "</table>";
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
include 'helpers.php';
|
||||||
|
|
||||||
|
// view variables
|
||||||
|
$message = "";
|
||||||
|
$grid = [0,1,0,1,0,2,2,0,0];
|
||||||
|
$playerTurn = 1; // 1 or 2
|
||||||
|
|
||||||
|
|
||||||
|
include './views/tictactoe.php';
|
||||||
|
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css"
|
||||||
|
/>
|
||||||
|
<link rel="stylesheet" href="./css/style.css">
|
||||||
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<main class="container center">
|
||||||
|
<h4>Tic Tac Toe : <?php echo "player $playerTurn turn";?></h4>
|
||||||
|
<?php
|
||||||
|
displayGrid($grid);
|
||||||
|
|
||||||
|
if ($message != "")
|
||||||
|
echo "<h5>$message <a href='.'>new game</a></h5>";
|
||||||
|
?>
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
Binary file not shown.
Reference in New Issue
Block a user