Compare commits

..

14 Commits

Author SHA1 Message Date
JARNOUEN DE VILLARTAY Ulysse (SAFRAN AIRCRAFT ENGINES) 1dcd20de85 use constants for rock paper scissors 2026-04-08 17:13:19 +02:00
JARNOUEN DE VILLARTAY Ulysse (SAFRAN AIRCRAFT ENGINES) 43b5ee3521 fix: remove useless code 2026-04-08 17:01:41 +02:00
JARNOUEN DE VILLARTAY Ulysse (SAFRAN AIRCRAFT ENGINES) bdc3e430b6 get db host url from env 2026-04-08 16:46:46 +02:00
JARNOUEN DE VILLARTAY Ulysse (SAFRAN AIRCRAFT ENGINES) 5dad311827 use include_once 2026-04-08 16:36:35 +02:00
JARNOUEN DE VILLARTAY Ulysse (SAFRAN AIRCRAFT ENGINES) 09e55a2b28 correction ex2 2026-04-08 16:10:49 +02:00
JARNOUEN DE VILLARTAY Ulysse (SAFRAN AIRCRAFT ENGINES) cf7a51459c correction ex1 2026-04-08 16:10:35 +02:00
JARNOUEN DE VILLARTAY Ulysse (SAFRAN AIRCRAFT ENGINES) 6451778bb8 Merge remote-tracking branch 'origin/main' into correction-ulysse 2026-04-08 15:18:46 +02:00
JARNOUEN DE VILLARTAY Ulysse (SAFRAN AIRCRAFT ENGINES) 11386eed58 ex5 2026-04-02 14:42:35 +02:00
JARNOUEN DE VILLARTAY Ulysse (SAFRAN AIRCRAFT ENGINES) a8f617fa83 ex4 2026-04-02 14:42:16 +02:00
JARNOUEN DE VILLARTAY Ulysse (SAFRAN AIRCRAFT ENGINES) ca49c90ffa ex3 2026-04-02 14:42:06 +02:00
JARNOUEN DE VILLARTAY Ulysse (SAFRAN AIRCRAFT ENGINES) d82343a051 ex2 2026-04-02 14:41:53 +02:00
JARNOUEN DE VILLARTAY Ulysse (SAFRAN AIRCRAFT ENGINES) d5c03b6d86 ex1 2026-04-02 13:57:47 +02:00
JARNOUEN DE VILLARTAY Ulysse (SAFRAN AIRCRAFT ENGINES) 43e09b46ec Merge branch 'main' into correction-ulysse 2026-04-02 13:49:18 +02:00
JARNOUEN DE VILLARTAY Ulysse (SAFRAN AIRCRAFT ENGINES) 6dd596e7b3 add correction 2026-04-02 13:48:28 +02:00
34 changed files with 696 additions and 481 deletions
+4 -19
View File
@@ -30,11 +30,10 @@ Les notions suivantes seront abordées :
| Semaine | Cours | TD/TP |
| ------------------ | -------------------------------------------------------- | ------------------ |
| 1 | [Bases du langages](./cours/cm_bases_php.pdf) | |
| 2 | | [tp1](./tp/tp1) |
| 3 | [Intéractions avec le client](./cours/cm_interaction_client_serveur.pdf) | [tp2](./tp/tp2) |
| 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) |
| 1 : 16/03 - 20/03| [Bases du langages](./cours/cm_bases_php.pdf) | |
| 2 : 23/03 - 27/03 | | [tp1](./tp/tp1) |
| 3 : 30/03 - 03/04 | [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) |
@@ -52,18 +51,4 @@ aborde la récupération des données de formulaires avec PHP.
À chaque exercice correspond un sous répertoire avec
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.
+6 -6
View File
@@ -1,9 +1,9 @@
<!DOCTYPE html>
<html>
<body>
<?php
echo "<h1>hello world !!!</h1>";
//phpinfo();
?>
</body>
<body>
<?php
echo "<h1>hello world !!!</h1>";
phpinfo();
?>
</body>
</html>
+35 -10
View File
@@ -1,17 +1,19 @@
<?php
$clients = [
"Luc",
7 => "Paul",
2 =>"Martin",
"Arnaud"
$clients = [
"Luc",
7 => "Paul",
2 =>"Martin",
"Arnaud"
];
var_dump($clients);
$produits = [
20 => "Chemise",
3 => "Pantalon",
10 => "Jupe",
"Veste",
"Blouson"
20 => "Chemise",
3 => "Pantalon",
10 => "Jupe",
"Veste",
"Blouson"
];
$array = ["a","b","c"];
$array[] = "d";
@@ -23,4 +25,27 @@ print_r($clients);
print_r($produits);
print_r($array);
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>";
}
?>
+49 -32
View File
@@ -1,38 +1,55 @@
<?php
include './include/data.inc.php';
include_once './include/data.inc.php';
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>tp1 - ex3</title>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.classless.min.css"
>
<link rel="stylesheet" href="./css/style.css">
</head>
<body>
<main>
<h2>Exercice 3 : IMC </h2>
<table>
<thead>
<tr>
<th>Nom</th>
<th>Prénom</th>
<th>Email</th>
<th>Taille</th>
<th>Poids</th>
<th>IMC</th>
</tr>
</thead>
<tbody>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>tp1 - ex3</title>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.classless.min.css"
>
<link rel="stylesheet" href="./css/style.css">
</head>
<body>
<main>
<h2>Exercice 3 : IMC </h2>
<table>
<thead>
<tr>
<th>Nom</th>
<th>Prénom</th>
<th>Email</th>
<th>Taille</th>
<th>Poids</th>
<th>IMC</th>
</tr>
</thead>
<tbody>
<?php include_once './include/data.inc.php'; ?>
<?php foreach ($data as $person) : ?>
<?php
$poids = (float) $person['Poids'];
$tailleM = (float) $person['Taille'] / 100;
<!-- À compléter -->
</tbody>
</table>
</main>
</body>
$imc = null;
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>
</table>
</main>
</body>
</html>
+20 -4
View File
@@ -1,3 +1,19 @@
<?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>
<html lang="fr">
<head>
@@ -13,12 +29,12 @@
</head>
<body>
<main>
<h5><a href=""> Tirage aléatoire</a></h5>
<h5><a href="./">Tirage aléatoire</a></h5>
<article class="is-center">
<img src='./img/dice-six-faces-five.svg'>
<img src='./img/dice-six-faces-one.svg'>
<img src="./img/<?= $diceImages[$die1] ?>" alt="Dé 1 : <?= $die1 ?>">
<img src="./img/<?= $diceImages[$die2] ?>" alt="Dé 2 : <?= $die2 ?>">
</article>
<h5>Somme = </h5>
<h5>Somme = <?= $sum ?></h5>
</main>
</body>
</html>
+2 -2
View File
@@ -1,5 +1,5 @@
<?php
include './include/favoris.inc.php';
include_once './include/favoris.inc.php';
?>
<!DOCTYPE html>
<html lang="fr">
@@ -17,7 +17,7 @@ include './include/favoris.inc.php';
<body>
<main>
<h2>
Exercice 4 : Favoris
Exercice 4 : Favoris
</h2>
<!-- À compléter -->
+4 -4
View File
@@ -1,7 +1,7 @@
<?php
function createPassword($n,$alphabet){
$length = strlen($alphabet);
$password = "";
return $password;
function createPassword($n,$alphabet) {
$length = strlen($alphabet);
$password = "";
return $password;
}
?>
+1 -1
View File
@@ -1,5 +1,5 @@
<?php
include './include/fonction.php';
include_once './include/fonction.php';
$alphabet = "@#!*^&azertyuiopqsdfghjkklmwxcvbnAZERTYUIOPLMKJHGFDSQWXCVBN1234567890";
?>
<!DOCTYPE html>
+18 -17
View File
@@ -1,26 +1,27 @@
<?php
include 'include/controller.php';
include_once 'include/controller.php';
?>
<!DOCTYPE html>
<html lang="en">
<head>
<html lang="fr">
<head>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.classless.min.css"
/>
<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">
<meta charset="UTF-8" />
<title></title>
</head>
<body>
<main>
<ul>
<?php
echo "<li>$prenom $nom</li>";
echo "<li><i class='fa-brands $icon fa-2x'></i></li>";
?>
</ul>
</main>
</body>
<link rel="stylesheet" href="./css/style.css">
<meta charset="UTF-8" />
<title>Exercice 1</title>
</head>
<body>
<main>
<ul>
<?php
echo '<li>' . htmlspecialchars($prenom . ' ' . $nom, ENT_QUOTES, 'UTF-8') . '</li>';
echo '<li>' . htmlspecialchars($systeme, ENT_QUOTES, 'UTF-8') . " <i class='fa-brands $icon fa-2x'></i></li>";
?>
</ul>
</main>
</body>
</html>
+26 -1
View File
@@ -1,2 +1,27 @@
<?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'];
}
}
+17 -1
View File
@@ -1,2 +1,18 @@
<?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,
];
}
}
+43 -19
View File
@@ -1,23 +1,47 @@
<?php
include 'include/controller.php';
include_once 'include/controller.php';
?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.classless.min.css"
/>
<link rel="stylesheet" href="./css/style.css">
</head>
<body>
<main>
<h4>Table de multiplication</h4>
<form method="GET">
<input type=number name="table" placeholder="table">
<button type="submit">ENVOYER</button>
</form>
</main>
</body>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.classless.min.css"
/>
<link rel="stylesheet" href="./css/style.css">
<title>Exercice 2</title>
</head>
<body>
<main>
<h4>Table de multiplication</h4>
<form method="GET">
<input
type="number"
name="table"
placeholder="table"
value="<?php echo htmlspecialchars($table, ENT_QUOTES, 'UTF-8'); ?>"
>
<button type="submit">ENVOYER</button>
</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>
</body>
</html>
+53 -28
View File
@@ -1,34 +1,59 @@
<?php
include 'include/controller.php';
include_once 'include/controller.php';
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<title></title>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css"
/>
<link rel="stylesheet" href="./css/style.css">
</head>
<body>
<main class="container">
<h3>Calculatrice</h3>
<form method="POST">
<div class="grid">
<input placeholder="un nombre" type="number" step="any" name="op1" value ="" required>
<select name="operation" required>
<option value="+">+</option>
<option value="-">-</option>
<option value="x">x</option>
<option value="/">/</option>
</select>
<input placeholder="un nombre" type="number" step="any" name="op2" required>
<button type="submit" name="soumis"> Calculer</button>
</grid>
</form>
</main>
</body>
<head>
<meta charset="UTF-8" />
<title>Exercice 3</title>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@picocss/pico.min.css"
/>
<link rel="stylesheet" href="./css/style.css">
</head>
<body>
<main class="container">
<h3>Calculatrice</h3>
<form method="POST">
<div class="grid">
<input
placeholder="un nombre"
type="number"
step="any"
name="op1"
value="<?php echo htmlspecialchars($valeurOp1, ENT_QUOTES, 'UTF-8'); ?>"
required
>
<select name="operation" required>
<option value="+" <?php echo $operation === '+' ? 'selected' : ''; ?>>+</option>
<option value="-" <?php echo $operation === '-' ? 'selected' : ''; ?>>-</option>
<option value="x" <?php echo $operation === 'x' ? 'selected' : ''; ?>>x</option>
<option value="/" <?php echo $operation === '/' ? 'selected' : ''; ?>>/</option>
</select>
<input
placeholder="un nombre"
type="number"
step="any"
name="op2"
value="<?php echo htmlspecialchars($valeurOp2, ENT_QUOTES, 'UTF-8'); ?>"
required
>
<button type="submit" name="soumis">Calculer</button>
</div>
</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>
</body>
</html>
+55 -1
View File
@@ -1,2 +1,56 @@
<?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;
+10
View File
@@ -2,3 +2,13 @@ button{
float:right;
}
.bonne-reponse {
color: #1b7f3a;
font-weight: 700;
}
.mauvaise-reponse {
color: #c62828;
font-weight: 700;
}
+79 -15
View File
@@ -1,17 +1,81 @@
<?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>
<html lang="en">
<head>
<link rel="stylesheet" href="./css/style.css">
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.classless.min.css"
/>
<title></title>
</head>
<body>
<main>
<h4>Réponses</h4>
</div>
</main>
</body>
<html lang="fr">
<head>
<link rel="stylesheet" href="./css/style.css">
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.classless.min.css"
/>
<meta charset="UTF-8" />
<title>Exercice 4</title>
</head>
<body>
<main>
<h4>Resultat du quizz</h4>
<?php if ($message !== '') : ?>
<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>
</body>
</html>
+37 -15
View File
@@ -1,23 +1,45 @@
<?php
include 'include/controller.php';
include_once 'include/controller.php';
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.classless.min.css"
/>
<link rel="stylesheet" href="./css/style.css">
<html lang="fr">
<head>
<meta charset="UTF-8" />
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.classless.min.css"
/>
<link rel="stylesheet" href="./css/style.css">
<title>Exercice 5</title>
</head>
<body>
<main>
<h3>Conjugaison</h3>
<title></title>
</head>
<body>
<main>
<?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>
</main>
</body>
<?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>
</body>
</html>
+58 -6
View File
@@ -1,12 +1,64 @@
<?php
$terminaisons = array(
"present"=>array("e","es","e","ons","ez","ent"),
"futur"=>array("erai","eras","era","erons","erez","eront"),
"imparfait"=>array("ais","ais","ait","ions","iez","aient")
'present' => array('e', 'es', 'e', 'ons', 'ez', 'ent'),
'futur' => array('erai', 'eras', 'era', 'erons', 'erez', 'eront'),
'imparfait' => array('ais', 'ais', 'ait', 'ions', 'iez', 'aient')
);
$pronoms=array("je","tu","il","nous","vous","ils");
$libellesTemps = array(
'present' => 'Present',
'futur' => 'Futur',
'imparfait' => 'Imparfait'
);
$verbe = filter_input(INPUT_POST,"verbe",FILTER_SANITIZE_STRING);
$radical = substr($verbe,0,strlen($verbe)-2);
$pronoms = array('je', 'tu', 'il', 'nous', 'vous', 'ils');
$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.';
}
}
}
+3
View File
@@ -8,3 +8,6 @@ color:#2E8B57;
.Loss{
color:#FF6347;
}
.Draw{
color:#DAA520;
}
+29 -14
View File
@@ -1,20 +1,35 @@
<?php
$images = ["rock.png","paper.png","scissors.png"];
$isPlaying = true;
$ROCK = 0;
$PAPER = 1;
$SCISSORS = 2;
$playerChoice = 0;
$computerChoice = 1;
$images = ["rock.png", "paper.png", "scissors.png"];
$rules = [
$ROCK => [$ROCK => "Draw", $PAPER => "Loss", $SCISSORS => "Win"],
$PAPER => [$ROCK => "Win", $PAPER => "Draw", $SCISSORS => "Loss"],
$SCISSORS => [$ROCK => "Loss", $PAPER => "Win", $SCISSORS => "Draw"],
];
$message = "Win";
$class = "Win";
$playerChoice = filter_input(
INPUT_GET,
'choice',
FILTER_VALIDATE_INT,
['options' => ['min_range' => 0, 'max_range' => 2]]
);
$imagePlayer = $images[$playerChoice];
$imageComputer = $images[$computerChoice];
$isPlaying = ($playerChoice !== null && $playerChoice !== false);
include './views/header.php';
if ($isPlaying){
include './views/game.php';
include './views/message.php';
if ($isPlaying) {
$computerChoice = mt_rand(0, 2);
$message = $rules[$playerChoice][$computerChoice];
$class = $message;
$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';
+30 -7
View File
@@ -1,14 +1,37 @@
<?php
include './modeles/modeleFilms.php';
include_once './modeles/modeleFilms.php';
$films = getFilms();
$currentPage = filter_input(
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 './vues/header.php';
include './vues/vueFilms.php';
include './vues/footer.php';
?>
include_once './vues/header.php';
include_once './vues/vueFilms.php';
include_once './vues/footer.php';
+63 -10
View File
@@ -1,16 +1,69 @@
<?php
function _getConnection()
function getConnection()
{
static $_conn = NULL;
if ($_conn === NULL){
$_conn = mysqli_connect("localhost","","","");
}
return $_conn;
static $conn = null;
if ($conn === null) {
$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;
}
function getFilms()
function getFilms($page = 1, $perPage = 10)
{
// A completer
$conn = getConnection();
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,
];
}
?>
+54 -22
View File
@@ -1,32 +1,64 @@
<!--
Variables de la vue
$films : les films de la page
<!--
Variables de la vue
$films : les films de la page
-->
<h2>Films</h2>
<?php if (!empty($errorMessage)) { ?>
<article><?php echo htmlspecialchars($errorMessage, ENT_QUOTES, 'UTF-8'); ?></article>
<?php } ?>
<table>
<thead>
<tr>
<th>Titre</th>
<th>Année</th>
<th>Genre</th>
<th>Réalisateur</th>
</tr>
</thead>
<tbody>
<thead>
<tr>
<th>Titre</th>
<th>Année</th>
<th>Genre</th>
<th>Réalisateur</th>
</tr>
</thead>
<tbody>
<?php
foreach($films as $film){
echo "
<tr>
<td><a href='#'>{$film['titre']}</a></td>
<td>{$film['annee']}</td>
<td>{$film['genre']}</td>
<td>{$film['prenom']} {$film['nom']}</td>
</tr>";
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 "
<tr>
<td><a href='#'>{$titre}</a></td>
<td>{$annee}</td>
<td>{$genre}</td>
<td>{$realisateur}</td>
</tr>";
}
?>
</tbody>
</tbody>
</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 } ?>
-76
View File
@@ -1,76 +0,0 @@
# 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.
![](./img/cookie.png)
### Ex2.
Le but est de créer un min-jeu de morpion.
![](./img/ttt.png)
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
View File
@@ -1,6 +0,0 @@
<?php
$osSet = ['linux','apple','windows'];
$os = "linux";
include './views/main.php';
?>
-44
View File
@@ -1,44 +0,0 @@
<!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
View File
@@ -1,32 +0,0 @@
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
View File
@@ -1,54 +0,0 @@
<?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
View File
@@ -1,11 +0,0 @@
<?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
View File
@@ -1,24 +0,0 @@
<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.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.