Bonjour
(Je ne sais pas si je suis sur le bon sous-forum ou pas donc désolé d'avance si je me suis trompé)
Voila, je commence la réfactorisation en MVC de mon script d'espace membre communautaire et je souhaite avoir vos avis sur mes débuts en MVC car c'est la première fois que j'utilise le MVC. J'ai bien-sur déjà lu le cours MVC et d'autres cours sur le net.
Mais je voulais avoir vos avis également. Est-ce sécurisé ? etc
Je poste uniquement le MVC d'une page seulement car sinon trop long.. voici le MVC de la page send.php qui sert à deux choses : envoyer un message a un autre membre et afficher la conversation. J'attends vos suggestions
Model :
View :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 <?php // Renvoie les informations sur un membre function getProfile($idmbr) { global $pdo; $profile = $pdo->prepare('SELECT id, nom, prenom, confirmed_at FROM users WHERE id = ? AND confirmed_at IS NOT NULL'); $profile->execute(array($idmbr)); if ($profile->rowCount() == 1) return $profile->fetch(); // Accès à la première ligne de résultat else $_SESSION['flash']['danger'] = "Aucun membre ne correspond à l'identifiant '$idmbr'"; header('Location: index.php?p=inbox'); exit(); } // Renvoie les messages de la conversation function getMessages($idmbr, $user_id) { global $pdo; $messages = $pdo->prepare('SELECT id, id_expediteur, id_destinataire, message, date_envoi, date_lecture FROM messages WHERE (id_destinataire = '.$user_id.' AND id_expediteur = ?) OR (id_destinataire = ? AND id_expediteur = '.$user_id.') ORDER BY date_envoi DESC LIMIT 0, 20'); $messages->execute(array($idmbr, $idmbr)); return $messages; } // Remplace null par une date de lecture en cas de messages non lus. function getRead($idmbr, $user_id) { global $pdo; $pdo->prepare('UPDATE messages SET date_lecture = NOW() WHERE id_expediteur = ? AND id_destinataire = ? AND date_lecture IS NULL')->execute([$idmbr, $user_id]); }
Controller :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 <div class="page-header"> <h2>Ecrire à <?php echo htmlspecialchars($profile->prenom); ?> <?php echo htmlspecialchars($profile->nom{0}); ?></h2> </div> <form action="" method="post"> <textarea name="message" id="inputHelpBlock" class="form-control" rows="3"></textarea> <button type="submit" class="btn btn-primary btn-lg btn-block">Envoyer</button> </form> <h2>Historique</h2> <?php // Boucle pour l'affichage de la conversation while ($donnees = $messages->fetch()) { switch ($donnees->id_expediteur) { case $user_id : $couleur_fond = "info"; break; case $idmbr : $couleur_fond = "warning"; break; } switch ($donnees->date_lecture) { case null : $lecture_msg = "non lu"; break; case !null : $lecture_msg = 'lu '.period($donnees->date_lecture).''; break; } ?> <div style="padding: 5px;" class="row bg-<?php echo "$couleur_fond" ?>"> <div class="col-xs-6"><p class="text-left"><small>envoyé <?php echo period($donnees->date_envoi); ?></small></p></div> <div class="col-xs-6"><p class="text-right"><small><?php echo "$lecture_msg" ?></small></p></div> <div class="col-xs-12"><p class="text-left"><?php echo nl2br(htmlspecialchars($donnees->message)); ?></p></div> </div> <br> <?php } ?>
J'attends avec impatience vos suggestions et surtout savoir si pour le moment j'ai bien bossé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 <?php logged_only(); // contrôle si le membre est connecté. $titre = 'Envoyer un message'; // Titre de la page pour la balise meta title. $idmbr = (int) $_GET['idmbr']; // Sécurise la variable idmbr passée par l'url. $user_id = $_SESSION['auth']->id; // Récupère l'id du membre connecté. require 'model/send.php'; // le model... $profile = getProfile($idmbr); // Récupère les informations du membre. getRead($idmbr, $user_id); // Update la date de lecture en cas de messages non lus. // On sécurise le message avant de l'enregistrer dans la table messages. if(!empty($_POST)){ if(empty($_POST['message'])){ $_SESSION['flash']['danger'] = "Vous devez écrire un message"; } else { $message = trim(htmlspecialchars(stripslashes($_POST['message']))); $req = $pdo->prepare('INSERT INTO messages (id_expediteur, id_destinataire, message, date_envoi) VALUES('.$user_id.', '.$idmbr.', ?, NOW())'); $req->execute(array($message)); $_SESSION['flash']['success'] = 'Message envoyé !'; } } // Affiche la conversation. $messages = getMessages($idmbr, $user_id); // La vue... require 'view/send.php';
(Je ne souhaite pas passer a la POO, encore trop tôt pour moi..)
Partager