diff --git a/R3.01/README.md b/R3.01/README.md index f336a95..0615a48 100644 --- a/R3.01/README.md +++ b/R3.01/README.md @@ -33,6 +33,8 @@ Les notions suivantes seront abordées : | 1 : 24/03 - 28/03| [Bases du langages](./cours/cm_bases_php.pdf) | [tp1](./tp/tp1) | | 2 : 03/04 - 07/04 | [Intéractions avec le client](./cours/cm_interaction_client_serveur.pdf) | [tp2](./tp/tp2) | | 3 : 10/04 - 14/04 | [PHP/MySQL](./cours/cm_extension_mysqli.pdf) | [tp3](./tp/tp3) | +| 4 : 28/04 - 02/05 | [Cookies et sessions](./cours/cm_cookies_sessions.pdf) | [tp3](./tp/tp3) | +| 5 : 05/05 - 09/05 | | [tp4](./tp/tp4) | ## Les TPS @@ -55,4 +57,11 @@ aborde l'interfaçage de php avec mysql, au moyen de l'extention À 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. + diff --git a/R3.01/cours/cm_cookies_sessions.pdf b/R3.01/cours/cm_cookies_sessions.pdf new file mode 100644 index 0000000..b270f21 Binary files /dev/null and b/R3.01/cours/cm_cookies_sessions.pdf differ diff --git a/R3.01/tp/tp4/README.md b/R3.01/tp/tp4/README.md new file mode 100644 index 0000000..8c22000 --- /dev/null +++ b/R3.01/tp/tp4/README.md @@ -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.'; +} +?> +``` + diff --git a/R3.01/tp/tp4/ex1/index.php b/R3.01/tp/tp4/ex1/index.php new file mode 100644 index 0000000..b1873cc --- /dev/null +++ b/R3.01/tp/tp4/ex1/index.php @@ -0,0 +1,6 @@ +<?php +$osSet = ['linux','apple','windows']; +$os = "linux"; + +include './views/main.php'; +?> diff --git a/R3.01/tp/tp4/ex1/views/main.php b/R3.01/tp/tp4/ex1/views/main.php new file mode 100644 index 0000000..2aedb2d --- /dev/null +++ b/R3.01/tp/tp4/ex1/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> + diff --git a/R3.01/tp/tp4/ex2/css/style.css b/R3.01/tp/tp4/ex2/css/style.css new file mode 100644 index 0000000..3a5f75c --- /dev/null +++ b/R3.01/tp/tp4/ex2/css/style.css @@ -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; +} diff --git a/R3.01/tp/tp4/ex2/helpers.php b/R3.01/tp/tp4/ex2/helpers.php new file mode 100644 index 0000000..211e12c --- /dev/null +++ b/R3.01/tp/tp4/ex2/helpers.php @@ -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>"; +} diff --git a/R3.01/tp/tp4/ex2/index.php b/R3.01/tp/tp4/ex2/index.php new file mode 100644 index 0000000..2c1717b --- /dev/null +++ b/R3.01/tp/tp4/ex2/index.php @@ -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'; + diff --git a/R3.01/tp/tp4/ex2/views/tictactoe.php b/R3.01/tp/tp4/ex2/views/tictactoe.php new file mode 100644 index 0000000..130bf00 --- /dev/null +++ b/R3.01/tp/tp4/ex2/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> + diff --git a/R3.01/tp/tp4/img/cookie.png b/R3.01/tp/tp4/img/cookie.png new file mode 100644 index 0000000..f54392b Binary files /dev/null and b/R3.01/tp/tp4/img/cookie.png differ diff --git a/R3.01/tp/tp4/img/ttt.png b/R3.01/tp/tp4/img/ttt.png new file mode 100644 index 0000000..daf90ff Binary files /dev/null and b/R3.01/tp/tp4/img/ttt.png differ diff --git a/R3.01/tp/tp4/tp4.tar.gz b/R3.01/tp/tp4/tp4.tar.gz new file mode 100644 index 0000000..4f5995c Binary files /dev/null and b/R3.01/tp/tp4/tp4.tar.gz differ