cm et tp pour M. Pot
This commit is contained in:
parent
c984310cc2
commit
a233d3b719
R3.01
@ -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) |
|
| 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) |
|
| 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) |
|
| 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
|
## 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
|
À chaque exercice correspond un sous répertoire avec
|
||||||
des fichiers à compléter.
|
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.
|
||||||
|
|
||||||
|
|
||||||
|
BIN
R3.01/cours/cm_cookies_sessions.pdf
Normal file
BIN
R3.01/cours/cm_cookies_sessions.pdf
Normal file
Binary file not shown.
76
R3.01/tp/tp4/README.md
Normal file
76
R3.01/tp/tp4/README.md
Normal file
@ -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.';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
```
|
||||||
|
|
6
R3.01/tp/tp4/ex1/index.php
Normal file
6
R3.01/tp/tp4/ex1/index.php
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?php
|
||||||
|
$osSet = ['linux','apple','windows'];
|
||||||
|
$os = "linux";
|
||||||
|
|
||||||
|
include './views/main.php';
|
||||||
|
?>
|
44
R3.01/tp/tp4/ex1/views/main.php
Normal file
44
R3.01/tp/tp4/ex1/views/main.php
Normal file
@ -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>
|
||||||
|
|
32
R3.01/tp/tp4/ex2/css/style.css
Normal file
32
R3.01/tp/tp4/ex2/css/style.css
Normal file
@ -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;
|
||||||
|
}
|
54
R3.01/tp/tp4/ex2/helpers.php
Normal file
54
R3.01/tp/tp4/ex2/helpers.php
Normal file
@ -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>";
|
||||||
|
}
|
11
R3.01/tp/tp4/ex2/index.php
Normal file
11
R3.01/tp/tp4/ex2/index.php
Normal file
@ -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';
|
||||||
|
|
24
R3.01/tp/tp4/ex2/views/tictactoe.php
Normal file
24
R3.01/tp/tp4/ex2/views/tictactoe.php
Normal file
@ -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>
|
||||||
|
|
BIN
R3.01/tp/tp4/img/cookie.png
Normal file
BIN
R3.01/tp/tp4/img/cookie.png
Normal file
Binary file not shown.
After ![]() (image error) Size: 18 KiB |
BIN
R3.01/tp/tp4/img/ttt.png
Normal file
BIN
R3.01/tp/tp4/img/ttt.png
Normal file
Binary file not shown.
After ![]() (image error) Size: 22 KiB |
BIN
R3.01/tp/tp4/tp4.tar.gz
Normal file
BIN
R3.01/tp/tp4/tp4.tar.gz
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user