Skip to content
GitLab
Projets
Groupes
Sujets
Extraits de code
/
Aide
Aide
Support
Forum de la communauté
Raccourcis clavier
?
Proposer une rétroaction
Contribuer à GitLab
Connexion
Activer/désactiver la navigation
Menu
Khraimeche Salim
Cours
Comparer les révisions
b49c8dc1405e8293a7b9a6c37d0586cc44a4304d...fbc601a52317e5202d673501293bd6b74271298f
Tout étendre
Masquer les modifications d'espaces
En ligne
Côte à côte
md/php/exemple/formEtAffiche.php
Voir le fichier @
fbc601a5
...
@@ -11,6 +11,8 @@
...
@@ -11,6 +11,8 @@
echo
'<form action="formEtAffiche.php" method="get">
echo
'<form action="formEtAffiche.php" method="get">
<label for="nom">Saisir un commentaire</label>
<label for="nom">Saisir un commentaire</label>
<textarea name="commentaire" rows="5" cols="40"></textarea>
<textarea name="commentaire" rows="5" cols="40"></textarea>
<input type="text" required name="nom">
<input type="submit" value="Envoyer">
<input type="submit" value="Envoyer">
</form>'
;
</form>'
;
if
(
isset
(
$_REQUEST
[
'commentaire'
]))
{
if
(
isset
(
$_REQUEST
[
'commentaire'
]))
{
...
...
md/php/formulaire.md
Voir le fichier @
fbc601a5
...
@@ -40,7 +40,7 @@ echo "Hello, " . $name . "!";
...
@@ -40,7 +40,7 @@ echo "Hello, " . $name . "!";
<input
type=
"email"
name=
"input_email"
placeholder=
"email"
>
<input
type=
"email"
name=
"input_email"
placeholder=
"email"
>
<TextArea
name=
"input_longtext"
>
Lorem ipsum dolor sit amet
</TextArea>
<TextArea
name=
"input_longtext"
>
Lorem ipsum dolor sit amet
</TextArea>
---
+++
## Différant type d'input
## Différant type d'input
### Boutons
### Boutons
...
@@ -58,7 +58,7 @@ echo "Hello, " . $name . "!";
...
@@ -58,7 +58,7 @@ echo "Hello, " . $name . "!";
</form>
</form>
---
+++
## Différant type d'input
## Différant type d'input
### Séléction
### Séléction
...
@@ -74,7 +74,8 @@ echo "Hello, " . $name . "!";
...
@@ -74,7 +74,8 @@ echo "Hello, " . $name . "!";
<label
for=
"checkbox2"
>
Check me too
</label>
<label
for=
"checkbox2"
>
Check me too
</label>
<input
type=
"checkbox"
id=
"checkbox2"
/>
<input
type=
"checkbox"
id=
"checkbox2"
/>
---
+++
## Différant type d'input
## Différant type d'input
### Séléction
### Séléction
...
@@ -91,7 +92,8 @@ echo "Hello, " . $name . "!";
...
@@ -91,7 +92,8 @@ echo "Hello, " . $name . "!";
<label
for=
"radio2"
>
Option 2
</label>
<label
for=
"radio2"
>
Option 2
</label>
<input
type=
"radio"
id=
"radio2"
value=
"option2"
/>
<input
type=
"radio"
id=
"radio2"
value=
"option2"
/>
---
+++
## Différant type d'input
## Différant type d'input
### Séléction
### Séléction
...
@@ -119,7 +121,7 @@ echo "Hello, " . $name . "!";
...
@@ -119,7 +121,7 @@ echo "Hello, " . $name . "!";
</datalist>
</datalist>
</form>
</form>
---
+++
## Différant type d'input
## Différant type d'input
### Séléction
### Séléction
...
@@ -210,3 +212,81 @@ formEtAffiche.php
...
@@ -210,3 +212,81 @@ formEtAffiche.php
### DAMN VULNERABLE WEB APPLICATION
### DAMN VULNERABLE WEB APPLICATION
<small>
/!
\
Interdiction d'installer cet outil sur les postes ou le serveur Docker de l'IUT /!
\
</small>
<small>
/!
\
Interdiction d'installer cet outil sur les postes ou le serveur Docker de l'IUT /!
\
</small>
<img
src=
"../../img/dvwa.svg"
style=
"height: 30vh"
alt=
"accessibility text"
>
<img
src=
"../../img/dvwa.svg"
style=
"height: 30vh"
alt=
"accessibility text"
>
---
```
php[6-7|15|17-22|32-35|51-56|60-70]
<?php
// process.php
// Sécurisation des données du formulaire en utilisant htmlspecialchars() pour éviter les failles XSS
// htmlspecialchars convertit les caractères spéciaux en entités HTML afin de neutraliser le code malveillant
$name = htmlspecialchars($_REQUEST['name'] ?? ''); // Récupère et nettoie le champ "name"
$email = htmlspecialchars($_REQUEST['email'] ?? ''); // Récupère et nettoie le champ "email"
// Tableau qui va stocker les messages d'erreur
$errors = [];
// --- VALIDATION DES DONNÉES ---
// Validation de la présence des données (Vérification que les champs obligatoires ne sont pas vides)
if (!empty($_REQUEST)) {
// Validation du champ 'name'
if (empty($name)) {
$errors[] = "Le champ 'Nom' est requis."; // Champ vide : ajout d'un message d'erreur
} elseif (strlen($name) < 3) {
// Validation de la longueur du nom (minimum 3 caractères)
$errors[] = "Le nom doit contenir au moins 3 caractères.";
}
// Validation du format de l'adresse e-mail (assure que l'e-mail soumis est dans un format valide)
if (empty($email)) {
$errors[] = "Le champ 'Email' est requis."; // Champ vide : ajout d'un message d'erreur
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
// filter_var avec l'option FILTER_VALIDATE_EMAIL valide le format de l'email
$errors[] = "L'adresse e-mail est invalide."; // Si le format n'est pas correct, ajout d'une erreur
}
// Si aucune erreur n'est détectée, le traitement des données peut continuer (par exemple, stockage en base de données)
if (empty($errors)) {
echo "Bonjour, " . $name . "! Votre e-mail est " . $email . ".";
}
}
// --- AFFICHAGE DES ERREURS ET DU FORMULAIRE ---
// Le formulaire est affiché, soit initialement, soit après une soumission avec des erreurs
echo '<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Formulaire</title>
</head>
<body>';
// Affichage des erreurs s'il y en a
if (!empty($errors)) {
foreach ($errors as $error) {
// Affiche chaque message d'erreur en rouge
echo "<p style='color:red;'>Erreur : " . $error . "</p>";
}
}
// Affichage du formulaire
// Les valeurs saisies par l'utilisateur sont réinjectées dans les champs du formulaire grâce à l'attribut 'value'
echo '<form action="process.php" method="get">
<label for="name">Nom:</label>
<input type="text" name="name" id="name" value="' . $name . '" required>
<br>
<label for="email">Email:</label>
<input type="email" name="email" id="email" value="' . $email . '" required>
<br>
<button type="submit">Envoyer</button>
</form>';
echo '</body></html>';
```
md/php/mvc.md
0 → 100644
Voir le fichier @
fbc601a5
# MVC
## Modele Vue Controller
---
### Arborescence du projet
```
txt
project_root/
│
├── app/
│
├── config/
│ └── config.php
│
└── public/
```
---
### Arborescence du projet
#### /public
```
txt
public/
├── index.php
├── print_hello.php
└── css/
└── style.css
```
---
### Arborescence du projet
#### /public/print_hello.php
```
php
<?php
require_once
'../app/controllers/HelloWorldController.php'
;
(
new
HelloWorldController
())
->
index
();
?>
```
---
### Arborescence du projet
#### /app
```
txt[]
app/
│
├── controllers/
│
├── entities/
│
├── repositories/
│
├── services/
│
├── trait/
│
├── views/
│
└─ core/
```
---
### Arborescence du projet
#### /app/controllers
```
php[1-4|6-10|12-15|17-20|22-25]
require_once '../app/core/Controller.php';
require_once '../app/services/HelloService.php';
class HelloWorldController extends Controller
{
private HelloService $helloService;
public function __construct()
{
$this->helloService = new HelloService();
}
public function index():void
{
$this->view('hello_world', $this->helloService->hello(), ['name' => 'Salim']);
}
public function indexJson():void
{
$this->json(['title' => $this->helloService->hello(), 'name' => 'Salim']);
}
public function redirectToJson()
{
$this->redirectTo('/json.php');
}
}
```
---
### Arborescence du projet
#### /app/entities et /app/repositories
##### Entities
-
Classes représentant les tables de la base de données
##### Repositories
-
Gestion des connexions à la base de données et exécution des requêtes SQL
---
### Arborescence du projet
#### /app/services
```
php[]
<?php
class HelloService
{
public function hello()
{
return 'Hello World!';
}
}
```
---
### Arborescence du projet
#### /app/trait
-
Traits utilisés par les services ou les contrôleurs
---
### Arborescence du projet
#### /app/views
```
php
public
function
index
():
void
{
$this
->
view
(
'hello_world'
,
$this
->
helloService
->
hello
(),
[
'name'
=>
'Salim'
,
'errors'
=>
[
'Nom incorrect'
]]);
}
```
```
php[]
<?php require '../app/views/_template/header.php'; ?>
<h1>Hello <?php echo $name; ?></h1>
<?php if (!empty($errors)): ?>
<?php foreach($errors as $error): ?>
<div class="alert alert-danger text-center" role="alert">
<?= $error; ?> //echo $error;
</div>
<?php endforeach; ?>
<?php endif; ?>
<?php require '../app/views/_template/footer.php'; ?>
```
---
### Arborescence du projet
#### /app/core/
```
php[1|2|5-17|19-24|26-29]
abstract class Controller {
protected $viewPath = '../app/views/'; // Chemin vers les vues
protected function view(string $viewName, string $title = 'Titre de la page', array $data = [], $status = 200) {
$filePath = $this->viewPath . $viewName . '.php';
if (file_exists($filePath)) {
// Extraire les données pour qu'elles soient disponibles dans la vue comme des variables
extract($data);
http_response_code($status);
require $filePath;
} else {
throw new Exception("Vue non trouvée
:
"
.
$filePath);
}
}
protected
function
json($data,
$status
=
200)
{
header('Content-Type:
application/json');
http_response_code($status);
echo
json_encode($data);
exit();
}
protected
function
redirectTo($url)
{
header("
Location
:
$url");
exit();
}
}
```
---
### Arborescence complète du projet :
| Rôle | Dossier |
|------------|------------------------------------------------------------|
| Modéle | - app/entities
<br/>
- app/repositories
<br/>
- app/services |
| Vue | - app/views |
| Controller | - app/controllers |
| Routes | - public |
md/php/session.md
0 → 100644
Voir le fichier @
fbc601a5
## Les sessions
---
page1.php
```
php
<?php
session_start
();
$_SESSION
[
'username'
]
=
'Jean'
;
?>
```
page2.php
```
php
<?php
session_start
();
echo
$_SESSION
[
'username'
];
// Affiche "Jean"
?>
```
---
page1.php
```
php
// Sérialiser et stocker un objet utilisateur en session
session_start();
$user = new User("Jean", "Doe"); // Supposons que la classe User soit définie
$_SESSION['user'] = serialize($user);
?>
```
page2.php
```
php
<?php
session_start();
$user = unserialize($_SESSION['user']);
echo $user->getFirstName(); // Affiche "Jean"
?>
```
---
```
php[7-10|14-20|23-27]
<?php
class User {
// Ne pas stocker pour des raisons de sécurité
public function __construct(
private string $username;
private string $email;
private string $password;
) {}
// Contrôle des données à sérialiser
public function __serialize(): array {
return [
'username' => $this->username,
'email' => $this->email
]; // Exclut le mot de passe
}
// Restaure les données de l'objet lors de la désérialisation
public function __unserialize(array $data): void {
$this->username = $data['username'];
$this->email = $data['email'];
$this->password = ''; // Par sécurité, on ne restaure pas le mot de passe
}
}
```
yarn.lock
0 → 100644
Voir le fichier @
fbc601a5
Ce diff est replié.
Cliquez pour l’agrandir.
yarn.lock7
0 → 100644
Voir le fichier @
fbc601a5
Précédent
1
2
Suivant