Live Coding : PHP Orienté Objet - Gestion des formulaires - Episode 2

Par Nouvelle-Techno.fr le 30 mai 2020 - Catégories : PHP Tutoriel Live-Coding

Lire l'article sur le site d'origine

Dans cet épisode 2 nous allons continuer à gérer nos formulaire en mettant en place la gestion des annonces par les utilisateurs.

Nous allons créer les pages qui permettront d'ajouter et modifier les annonces.

Modification de la base de données

Avant toute chose, modification de la base de données et du modèle "AnnoncesModel" qui lui est lié.

Nous allons mettre en place une relation entre la table "users" et la table "annonces" (voir la vidéo si vous ne savez pas comment faire)

Une fois la base de données modifiée, nous allons modifier notre modèle "AnnoncesModel" en y ajoutant les informations suivantes

protected $users_id;

/**
 * Get the value of users_id
 */ 
public function getUsers_id():int
{
    return $this->users_id;
}

/**
 * Set the value of users_id
 *
 * @return  self
 */ 
public function setUsers_id(int $users_id):self
{
    $this->users_id = $users_id;

    return $this;
}

Page d'ajout d'annonce

Nous allons créer une page permettant d'ajouter une annonce en vérifiant que l'utilisateur a le droit d'y accéder (il doit être connecté), puis mettre en place le traitement correspondant.

Dans notre exemple, l'annonce reste très simple, vous pourrez ajouter tous les champs nécessaires.

Créer le formulaire

Nous nous rendons dans le contrôleur "AnnoncesController" et ajoutons une méthode "ajouter" ce qui nous permettra d'avoir une route "/annonces/ajouter"

public function ajouter(){

}

Dans cette méthode, la 1ère chose que nous ferons est d'ajouter une condition vérifiant si l'utilisateur est connecté, dans le cas contraire il sera redirigé vers la page de connexion.

// On vérifie si la session contient les informations d'un utilisateur
if(isset($_SESSION['user']) && !empty($_SESSION['user']['id'])){

}else{
    $_SESSION['erreur'] = "Vous devez vous connecter pour ajouter une annonce";
    header('Location: /users/login');
    exit;
}

Nous allons ensuite créer notre formulaire au moyen de la classe "Form" et l'envoyer à notre vue

$form = new Form;

$form->debutForm()
    ->ajoutLabelFor('titre', 'Titre de l\'annonce :')
    ->ajoutInput('text', 'titre', ['class' => 'form-control'])
    ->ajoutLabelFor('description', 'Description')
    ->ajoutTextarea('description', '', ['class' => 'form-control'])
    ->ajoutBouton('Valider', ['class' => 'btn btn-primary'])
;

$this->render('annonces/ajouter', ['form' => $form->create()]);

Enfin, nous afficherons le formulaire dans la vue "annonces/ajouter.php"

<h1>Ajouter une annonce</h1>
<?= $form ?>

Traiter le formulaire

Une fois le formulaire rempli par l'utilisateur, nous allons donc devoir le traiter.

Pour enregistrer une annonce il faut :

Nous allons donc tout d'abord vérifier que le formulaire est rempli

if(Form::validate($_POST, ['titre', 'description'])){

}

Ensuite, nous allons récupérer et "nettoyer" les données. Pour nous protéger contre les failles XSS, nous allons retirer toutes les balises HTML éventuelles. Vous choisirez le cas qui vous convient le mieux.

$titre = strip_tags($_POST['titre']);
$description = strip_tags($_POST['description']);

Enfin, nous hydratons notre objet avec les informations reçues, sans oublier d'ajouter l'utilisateur, puis on crée l'annonce.

// On instancie le modèle
$annonce = new AnnoncesModel;

// On hydrate
$annonce->setTitre($titre)
    ->setDescription($description)
    ->setUsers_id($_SESSION['user']['id'])
;

// On enregistre
$annonce->create();

Vous n'oublierez pas de rediriger l'utilisateur vers la page de votre choix

Page de modification d'annonce

Nous allons maintenant créer la page permettant de modifier une annonce en vérifiant que l'utilisateur a le droit d'y accéder (il doit être connecté), en est le propriétaire, puis mettre en place le traitement correspondant.

Créer le formulaire

Nous nous rendons dans le contrôleur "AnnoncesController" et ajoutons une méthode "modifier" qui prendra un paramètre "id" ce qui nous permettra d'avoir une route "/annonces/modifier/2"

public function modifier(){

}

Dans cette méthode, la 1ère chose que nous ferons est d'ajouter une condition vérifiant si l'utilisateur est connecté, dans le cas contraire il sera redirigé vers la page de connexion.

// On vérifie si la session contient les informations d'un utilisateur
if(isset($_SESSION['user']) && !empty($_SESSION['user']['id'])){

}else{
    $_SESSION['erreur'] = "Vous devez vous connecter pour ajouter une annonce";
    header('Location: /users/login');
    exit;
}

Ensuite, nous vérifierons si l'annonce demandée existe

// On instancie le modèle
$annonceModel = new AnnoncesModel;

// On cherche l'annonce avec cet id
$annonce = $annonceModel->find($id);

// Si l'annonce n'existe pas, retour à l'accueil
if (!$annonce) {
    http_response_code(404);
    header('Location: /');
    exit;
}

Nous vérifions ensuite si l'utilisateur est propriétaire de l'annonce

if($annonce->users_id !== $_SESSION['user']['id']){
    http_response_code(404);
    header('Location: /');
    exit;
}

Nous allons ensuite créer notre formulaire au moyen de la classe "Form", y insérer les valeurs et l'envoyer à notre vue

$form = new Form;

$form->debutForm()
    ->ajoutLabelFor('titre', 'Titre de l\'annonce :')
    ->ajoutInput('text', 'titre', ['class' => 'form-control', 'value' => $annonce->titre])
    ->ajoutLabelFor('description', 'Description')
    ->ajoutTextarea('description', $annonce->description, ['class' => 'form-control'])
    ->ajoutBouton('Valider', ['class' => 'btn btn-primary']);

$this->render('annonces/modifier', ['form' => $form->create()]);

Enfin, nous afficherons le formulaire dans la vue "annonces/modifier.php"

<h1>Modifier une annonce</h1>
<?= $form ?>

Traiter le formulaire

Une fois le formulaire rempli par l'utilisateur, nous allons le traiter de la même façon que pour l'ajout, à la différence que nous devrons lui passer l'id de l'annonce mais pas l'utilisateur.

Nous allons donc tout d'abord vérifier que le formulaire est rempli

if(Form::validate($_POST, ['titre', 'description'])){

}

Ensuite, nous allons récupérer et "nettoyer" les données. Pour nous protéger contre les failles XSS, nous allons retirer toutes les balises HTML éventuelles. Vous choisirez le cas qui vous convient le mieux.

$titre = strip_tags($_POST['titre']);
$description = strip_tags($_POST['description']);

Enfin, nous hydratons notre objet avec les informations reçues, sans oublier d'ajouter l'utilisateur, puis on crée l'annonce.

// On instancie le modèle
$annonceModif = new AnnoncesModel;

// On hydrate
$annonceModif->setId($annonce->id)
    ->setTitre($titre)
    ->setDescription($description);

// On enregistre
$annonceModif->update();

Vous n'oublierez pas de rediriger l'utilisateur vers la page de votre choix

Et voilà la gestion des annonces qui est terminée.

Obtenir de l'aide

Pour obtenir de l'aide, vous pouvez accéder au serveur Discord pour une entraide par chat

#Tutoriel #MVC #PHP #Live-Coding