Projet PHP/javascript E1

A la suite du cours de PHP/javascript, les étudiants devront remettre un projet reprenant un ensemble de techniques de développements vues durant le cours. Le projet sera écrit avec les langages HTML/CSS, Javascript, PHP et SQL.

Les étudiants développeront le projet en local sur leurs machines configurées avec les outils XAMP/LAMP /MAMP/WAMP et l'éditeur de texte Visual Studio Code.

Présentation du projet (cahier des charges).

Voir le fonctionnement du l'application web à remettre

Vous trouverez sur ce lien, le fonctionnement demandé pour réaliser votre application web.
Vous pouvez vous en inspirer et récupérer le code html/css. La partie PHP n'est pas vaisible car c'est à vous de l'écrire en lisant les étapes ci-dessous.

Visualisation du Projet PHP

Détails du projet (spécifications techniques et fonctionnelles)

Vous allez créer 4 fichiers PHP :

1ere étape : créer votre formulaire html

Créer un formulaire de saisie d'informations à l'aide des langages HTML et de CSS (mise en forme).

Le formulaire devra comporter les champs suivants :

Les champs obligatoires devront être testés avant la validation et l'envoi du formulaire.

L'action de votre formulaire devra pointer sur le fichier creat.php

Vous utiliserez la méthode POST pour envoyer vos données de formulaire au serveur.

Récupérer les données du formulaire.

BUT : Récupérer des informations saisies par un utilisateur et les enregistrer.

Une fois le formulaire créé et remplit vous aller pouvoir le validé.
Si vous validez le formulaire à l'aide du bouton type "submit", la page va se recharger et rien ne va se passer. En fait il se passe que votre formulaire a été validé et envoyé au serveur web avec toute les informations qu'il contient.
Sauf que le serveur web n'a aucune instruction à transmettre à votre serveur PHP alors il renvoi la page HTML avec un formulaire vide et l'ensemble de vos données ont été supprimé car personne ne les a récupéré pour les traiter.

Dans la balise HTML <form>, vous pouvez choisir sur quelle page envoyer les données du formulaire lors de la validation de celui-ci (attribut action=''). Vous allez donc utiliser votre page creat.php qui va contenir les instructions pour récupérer les données du formulaire.

Transmettre les données à PHP

Dans votre formulaire, dans la balise <form>, vous allez ajouter l'attribut action='/creat.php' qui indique que lors de la validation du formulaire, il faut appeler le fichier 'creat.php' et lui transmettre les informations.

PHP va donc pouvoir récupérer les valeurs des champs dans les variables globales « $_POST » (voir le cours en ligne sur les variables globales en PHP).
Il vous faudra stocker les données dans des variables PHP pour pouvoir les utiliser par la suite. Pour des raisons pratiques, vos variables PHP devraient porter le même nom que le nom du champ du formulaire qui va lui transmettre sa valeur (Voir le cours sur la déclaration de variables en PHP).

Vous allez donc ouvir votre fichier creat.php pour ajouter le code PHP qui va permettre de récupérer les données du formulaire et les stocker dans des variables

<?php
    $nom = $_POST['nom'];
    $prenom = $_POST['prenom'];
?>

Stocker vos données

Pour préparer l'enregistrement des données dans une variable de session vous allez créer un tableau associatif contenant l'ensemble des données de vos variables initialisées plus haut.

<?php
    $user = array(
            'nom'=>$nom,
            'prenom'=>$prenom
            );
?>

Stocker les données dans une variable de session.

Une fois que vous avez traité l'ensemble des informations du formulaire, vous pouvez alors les stocker dans des variables de Session.

<?php
    $_SESSION['user'] = $user //Enregistrement du tableau $user dans la session. 
?>

N'oubliez pas de déclarer l'utilisation des sessions au debut de votre fichier (Voir le chapitre sur l'utilisation des sessions PHP). Sans cette déclaration PHP ne va pas activer les sessions et donc rien ne serait gardé en mémoire.

Mais vous voyez que avec cette méthode, vous arrivez sur une page blanche sans aucune information pour l'utilisateur.
Il faudrait donc créer une page avec de l'information en plus du script PHP pour que l'utilisateur puisse continuer à naviguer sur le site.
Vous pouvez afficher une phrase qui presente le détail du nouvel enregistrement avec l'affichage des données qui vont être sauvegardées.

Exemple de code html PHP d'affichage lors de la création d'un enregistrement
<?php
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$email = $_POST['email'];
?>
<h1?>
Enregistrement d'un utilisateur</h1>

<p>Voici les informations enregistrées</p>

<ul>
<li>nom : <?=$nom?> </li>
<li>prenom : <?=$prenom?> </li>
<li>email : <?=$email?> </li>
</ul>

Afficher les données enregistrés

BUT : Récupérer toutes les données enregistrées dans votre session

Afficher les données avec PHP et html/css

Dans cette étape vous allez ouvrir le fichier read.php

Je vous invite à créer un lien sur les pages formulaire.php et creat.php qui pointe sur la page read.php

Dans la page read.php vous allez récupérer le tableau d'information que vous avez stocké dans la variable de session.

Il faudra ensuite parcourir le tableau que vous venez de recupérer pour afficher son contenu à l'aide de balises html pour la mise en forme.

<?php
session_start();//Activiation des sessions sur le serveur PHP
    $user = $_SESSION['user']; //Récupération de notre tableau stoké en session.
?>
<ul>
<?php 
//Affichage des clés du tableau avec ses valeurs 
foreach($user as $key => $value): ?>
<li> <?=$key?> : <?=$value?> </li>
<?php endforeach; ?>
</ul> 

?>

Dans cet exemple nous affichons les données d'un tableau contenant un seul enregistrement.
Pour le projet vous devrez sauvegarder plusieurs enregistrements. La technique est de créer un autre tableau qui contiendra l'ensemble des tableaux d'informations. Vous aurez donc besoin de créer un tableau de tableaux. C'est un tableau à 2 dimensions.

<?php
//Exemple de tableau à 2 dimensions
$users[0]['nom'];
$users[0]['prenom'];
$users[1]['nom'];
$users[1]['prenom'];

?>

C'est ce tableau à deux dimensions que vous allez stocker dans votre variable de sessions.

Supprimer un compte utilisateur

But : Supprimer un enregistrement contenu dans votre tableau à 2 dimenssions.

Pour supprimer un enregistrement, vous aller revenir sur la page read.php.
Vous allez ajouter un lien « Supprimer » qui va pointer vers une page PHP « delete.php » que vous allez créer.
Le lien (URL) va comporter une variable qui contiendra le numéro de clé de la ligne du tableau à supprimer.

Creation d'un lien dynamique avec une variable

On ajoute une variable 'id' dans l'url que l'on pourra récupérer dans la page 'delete.php'

<?php
<a href='delete.php?id=1'>Supprimer</a>
?>

Récupération d'une variable d'url avec PHP

Pour récupérer le contenu d'une variable passée en paramètre dans l'URL, il faut utiliser la variable globale $_GET qui contient toutes les varibale d'un URL.

<?php
$id = $_GET['id']; //recuperation de la variable id passée dans l_url
?>

Il vous faudra supprimer la ligne du tableau correspondant à l'id récupéré.

Supprimer une ligne d'un tableau

<?php
unset($users[$id]);//Suppression de la ligne contenue dans $id
?>

Dans votre projet, il faudra récupérer le tableau contenu dans la Session, puis supprimer la ligne indiquée par la variable $id et ensuite remettre le tableau modifier dans la Session.

<?php
$users = $_SESSION['users']; //Recuperation du tableau en session
$id = $_GET['id']; //Recupération de la ligne à supprimer contenue dans l_url
unset($users[$id]);//Suppression de la ligne du tableau indiquée dans $id
$_SESSION['users'] = $users; //Remise du nouveau tableau en Session.
?>

Modifier un compte utilisateur

BUT : Récupérer les informations d'un compte client avec PHP puis les afficher dans un formulaire html.

Faire une mise à jour d'un enregistrement dans la base de données.

Pour réaliser cette partie, il vous faudra utiliser le formulaire de la page 'formulaire.php'.
Sauf que pour accéder à cette page, il faut passer par la page read.php qui liste les informations contenues dans votre session.

Rendez-vous sur la page read.php et sur chaque ligne qui comporte les informations d'un client ou autre, ajoutez un lien HTML qui va pointer sur la page formulaire.php.
Votre lien html devra comporter une variable qui contiendra le numéro de ligne (la clé) du tableau qui contient les informations à afficher dans votre listing.

<?php
//Ce lien est situé à l'interieur du foreach qui parcours votre tableau à 2 dimensions
<a href='/formulaire.php?id=2'>Modifier</a>  //Le 2 indique la clé de la 1ere dimension de votre tableau (la ligne)
?>

Pour connaître le client à modifier et donc celui qu'il faut récupérer dans le tableau de votre session, vous passer un paramètre dans l'URL du lien de modification que vous avez créé juste avant.
Le paramètre sera tout simplement l'identifiant de la ligne du tableau qui contient les informations du client.

Vous allez donc transmettre cette valeur, à l'aide de l'URL, à la page qui va afficher le formulaire client.
Il faudra créer un nouveau script PHP qui va récupérer la valeur du paramètre transmit dans l'URL.

Une fois la valeur récupérée, il faudra la stocker dans une variable PHP. La valeur correspond à la ligne du tableau qui contient les informations du client à modifier.

<?php
if(isset($_GET['id'])): //On test si l'URL contient une variable id
$idUser = $_GET['id']; //On enregistre le chiffre contenu dans la variable 'id'
$users = $_SESSION['users'];//On recupère notre tableau de membres contenu dans la session
$user = $users[$idUser];//On récupère le client qui correpond à la ligne indiquée par 'id'
endif;
?>

Une fois les données récupérées, vous aller pouvoir les afficher dans les champs du formulaire HTML.
Le formulaire de saisi d'un utilisateur sera alors pré-remplit par les données provenant de la base de données.
Vous allez utiliser PHP pour remplire le champ value="" de chaque balise <input>

<form action="creat.php" method="post">
    Nom  :  <input type="text" name="username" value="<?=$user['nom'] ?>" /><br />
    Email: <input type="text" name="email" value="<?=$user['email'] ?>" /><br />
    <input type="submit" name="submit" value="Envoie!" />
</form>

Il faudra faire une modification au formulaire HTML en ajoutant un champ caché pour indiquer la ligne du tableau d'utilisateurs à modifier lors de sa validation. L'identifiant passera donc dans le formulaire avec l'ensemble des autres informations client lors de sa validation.

<form action="creat.php" method="post">
    Nom  :  <input type="text" name="username" value="<?=$user['nom'] ?>" /><br />
    Email: <input type="text" name="email" value="<?=$user['email'] ?>" /><br />
    <input type="hidden" name="idUser" value="<?=$idUser ?>" /> //Champ caché qui permet de transmettre l'id de la ligne du tableau à modifier
    <input type="submit" name="submit" value="Envoie!" />
</form>

Recupération des données à modifier

Après la validation du formulaire, la page creat.php va récupérer les informations du formulaire avec le champ caché en plus des autres.
Il faudra ajouter une ligne de code dans votre fichier creat.php pour récupérer la valeur du champ caché.
C'est le même code PHP que pour récupérer les autres valeurs des champs de formuaire.

<?php
if(isset($_POST['idUser'])){ //On test si la valeur idUser existe
    $idUser = $_POST['idUser']; //Si la valeur existe on la stock dans une variable PHP
}
?>

La suite du code PHP de votre fichier qui va créer un tableau contenant les informations de l'utilisateur ne changent pas.
Il n'y a que lors de l'enregistrement en Session que vous allez devoir choisir entre créer un nouvel enregistrement ou modifier un enregistrement.
Si on récupère un id en début de fichier alors il faudra écraser la ligne du tableau de membres avec le membre créé par la page.
Si il on ne récupère pas d'id en début de page alors il faudra créer une nouvelle ligne dans le tableau de membres.

<?php
if(isset($idUser)){ //On test si la page contient un id
    $users[$idUser] = $user; //On ecrase la ligne du tableau avec le membre créé
}
else{ //Si pas d'id récupéré en début de page
    $users[] = $user; //On va créer une nouvelle ligne dans le tableau de membres
}
$_SESSION['users'] = $users; //On enregistre le tableau en session
?>

Création de fonctions PHP

Maintenant que vous avez réalisé toutes les fonctionnalités du projet en PHP (Creation, Modification, Lecture, Suppression), nous allons ranger le code PHP dans des fonctions.

Pour cela, vous allez créer 1 fichier PHP appelé fonction.php.
Dans ce fichier vous allez créer 4 fonctions :

Dans la fonction creat(), vous allez mettre le code PHP qui se trouve au debut du fichier creat.php
Dans la fonction read(), vous allez mettre le code PHP qui se trouve au debut du fichier read.php
Dans la fonction update(), vous allez mettre le code PHP qui se trouve au debut du fichier formulaire.php
Dans la fonction delete(), vous allez mettre le code PHP qui se trouve au debut du fichier delete.php

Au début du fichier fonction.php, vous allez ajouter le nom des variables qui correspond à chaque champ de saisie de votre formulaire de la page formulaire.php.

ATTENTION ! En PHP, il n'est pas possibe pour le code contenu dans une fonciton d'acceder directement à une variable qui n'est pas créé dans la fonction.
C'est un mécanise de sécurité pour éviter les bugs et autres problèmes.
Pour qu'une fonction puisse avoir accès aux variables déclarées en dehors de la fonction, il faudra utiliser le mot clé global suivit de la liste des variables à récupérer.
Le mot clé global est à mettre en début de chaque fonction qui va utiliser les variables déclarées en haut du fichier.

<?php
session_start(); //Déclanchement des sessions

$idUser;//Identifiant d'un utilisateur qui nous servira pour le delete et update
$users;
$nom;
$prenom;
$email;
$tel;
$title;

function creat(){
global $user,$nom,$prenom,$email // permet d'avoir accès aux variables du fichier en lecture et ecriture
//Ajouter le code PHP situé au début de votre fichier creat.php
}

function read(){
//Ajouter le code PHP situé au début de votre fichier read.php
}

function update(){
//Ajouter le code PHP situé au début de votre fichier formulaire.php
}

function delete(){
//Ajouter le code PHP situé au début de votre fichier delete.php
}

?>

Pour pouvoir utiliser les fonctions de votre fichier functions.php dans vos autres fichiers, il faudra inclure le fichier à l'aide de la fonction PHP include 'functions.php'.

Ensuite vous pourrez utiliser vos fonctions en tapant simplement le nom de la fonction demandée ex : delete();

Exemple avec le fichier delete.php

<?php
include 'functions.php'; //recupère le code PHP du fichier indiqué
delete(); Execution de la fonction delete;

//Suite de votre page avec la partie Html

?>

Création de votre premier objet PHP

Le code que vous venez de créer dans le fichier functions.php est à 90% un objet PHP.
Pour que votre fichier functions.php se transforme en objet, il ne vous reste plus qu'à indiquer que votre liste de fonctions et de variables est contenue dans un classe qui comporte un nom.

Regarder comment créer une classe et vous verrez qu'il ne vous reste qu'à déclarer votre classe et ajouter le contenu de votre code entre accolades.

Vous allez obtenir quelque chose qui ressemble au code ci-dessous :

<?php
session_start(); //Déclanchement des sessions

class Utilisateur{

    public $idUser;//Identifiant d'un utilisateur qui nous servira pour le delete et update
    public $users;
    public $nom;
    public $prenom;
    public $email;
    public $tel;
    public $title;

    public function creat(){
    //Ajouter le code PHP situé au début de votre fichier creat.php
    }

}

?>

Recherche documentaire à presenter

Pour compléter votre formation sur la Programmation Orientée Objet, vous allez faire une recherche documentaire sur les fonctionnalités suivantes dédiées aux Objets en PHP

Vous allez répondre aux questions suivantes :

Ce travail sera à presenter vendredi en même temps que votre projet d'application web.