From 14dca87d5545dbee9b814d1f5e2e0b813d56fe9b Mon Sep 17 00:00:00 2001 From: Table <romain.drouin@ensiie.fr> Date: Thu, 5 May 2016 13:46:50 +0200 Subject: [PATCH] Creation du fichier Image.php + utilisation dans l'inscription + modifiction de la table r_joueur pour ajouter une colonne pour savoir si le joueur a un avatar --- Image.php | 36 +++++++++++++++++++++++++++ app/controller/RegisterController.php | 25 ++++++------------- app/model/Register.php | 5 ++-- app/view/Register/displayForm.html | 2 ++ 4 files changed, 49 insertions(+), 19 deletions(-) create mode 100644 Image.php diff --git a/Image.php b/Image.php new file mode 100644 index 0000000..276aaec --- /dev/null +++ b/Image.php @@ -0,0 +1,36 @@ +<?php +/** + * Created by PhpStorm. + * User: table + * Date: 05/05/16 + * Time: 11:34 + */ + +/** + * Creer un objet image a partir du fichier envoyé par l'utilisateur. + * @param array $file + * + * @return une image ou false si erreur. + */ +function getImage($file, $max_hauteur, $max_largeur) { + if ($file['error'] > 0) { + return array(5, null); + } + if (!($taille = getimagesize($file['tmp_name']))) { + return array(6, null); + } + if ($taille[0] > $max_largeur OR $taille[1] > $max_hauteur) { + return array(7, null); // mais on pourait la réduire + } + if ($avatar = imagecreatefromjpeg($file['tmp_name'])) { + return array(0, $avatar); + } elseif ($avatar = imagecreatefrompng($file['tmp_name'])) { + return array(0, $avatar); + } else { + return array(6, null); + } +} + +function saveImage($image, $path) { + imagejpeg($image, $path); +} \ No newline at end of file diff --git a/app/controller/RegisterController.php b/app/controller/RegisterController.php index e8672e8..2085479 100644 --- a/app/controller/RegisterController.php +++ b/app/controller/RegisterController.php @@ -1,5 +1,5 @@ <?php - +include(ROOT."/Image.php"); class RegisterController extends Controller { // classe de contrôleur pour l'inscription au site public function displayValid() { // la fonction d'affichage de réussite @@ -21,28 +21,19 @@ class RegisterController extends Controller { // classe de contrôleur pour l'in if($data['password'] == $data['password_bis']) { $data['password'] = password_hash($data['password'], PASSWORD_DEFAULT); $data['slug_joueur'] = self::slugify($_POST['pseudo']); - + $data['avatar'] = 0; $result = Register::check($data['slug_joueur'], $_POST['email']); // vérifie si le pseudo est libre et que l'adresse email n'est pas déjà utilisée if ($result == 1) { // connexion valide if(isset($_FILES['avatar'])) { - if ($_FILES['avatar']['error'] > 0) { + list($err, $avatar) = getImage($_FILES['avatar'], 512, 512); + if ($err == 0) { + saveImage($avatar, ROOT."/www/images/avatar/".$data['slug_joueur'].".jpg"); + $data['avatar'] = 1; + } else { session_start(); // on démarre une session pour avoir accès aux variables superglobales de session - $_SESSION["registerErrCode"] = 5; // on stocke le code d'erreur + $_SESSION["registerErrCode"] = $err; // on stocke le code d'erreur header('Location:../inscription'); // on redirige vers la page de formulaire (il faut faire un retour dans le dossier parent pour que ça fonctionne) die(); - } else { - mkdir(ROOT . "/www/images/avatar/", $recursive = true); - if ($avatar = imagecreatefromjpeg($_FILES['avatar']['tmp_name'])) { - imagejpeg($avatar, ROOT . "/www/images/avatar/" . $data['slug_joueur'] . ".jpg"); - } elseif ($avatar = imagecreatefrompng($_FILES['avatar']['tmp_name'])) { - imagejpeg($avatar, ROOT . "/www/images/avatar/" . $data['slug_joueur'] . ".jpg"); - } else { - session_start(); // on démarre une session pour avoir accès aux variables superglobales de session - $_SESSION["registerErrCode"] = 6; // on stocke le code d'erreur - header('Location:../inscription'); // on redirige vers la page de formulaire (il faut faire un retour dans le dossier parent pour que ça fonctionne) - die(); - - } } } $success = Register::writedb($data);// on réalise l'inscription à l'aide d'une méthode de la classe Register diff --git a/app/model/Register.php b/app/model/Register.php index 146b069..8c4dd30 100644 --- a/app/model/Register.php +++ b/app/model/Register.php @@ -28,7 +28,7 @@ class Register extends Model { // classe de modèle pour l'inscription public static function writedb($data) { // méthode réalisant l'inscription dans la BDD à partir d'un tableau de données $db = Database::getInstance(); // on récupère la connexion à la BDD - $sql = "INSERT INTO R_joueur (slug, pseudo, password, nom, prenom, email, description) VALUES (:slug, :pseudo, :password, :nom, :prenom, :email, :description)"; + $sql = "INSERT INTO R_joueur (slug, pseudo, password, nom, prenom, email, description, avatar) VALUES (:slug, :pseudo, :password, :nom, :prenom, :email, :description, :avatar)"; $req = $db->prepare($sql); // on prépare la requête $result = $req->execute(array(":slug" => $data['slug_joueur'], ":pseudo" => $data['pseudo'], @@ -36,7 +36,8 @@ class Register extends Model { // classe de modèle pour l'inscription ":nom" => $data['nom'], ":prenom" => $data['prenom'], ":email" => $data['email'], - ":description" => $data['description'])); // on remplace les variables dans la requête + ":description" => $data['description'], + ":avatar" => $data['avatar'])); // on remplace les variables dans la requête return $result; // on aurait pu mettre deux return (un dans le if et un ici), mais bon... } diff --git a/app/view/Register/displayForm.html b/app/view/Register/displayForm.html index 5a6a250..1003656 100644 --- a/app/view/Register/displayForm.html +++ b/app/view/Register/displayForm.html @@ -19,6 +19,8 @@ $errMsg = '<h3>Problème sur l\'avatar</h3>'; } elseif($errCode == 6) { $errMsg = '<h3>Le fichier n\'est pas une image</h3>'; + } elseif($errCode == 7) { + $errMsg = '<h3>L\'image est trop grande</h3>'; } echo '<article class="msg-erreur">'.$errMsg.'</article>'; // on affiche le message unset($_SESSION['registerErrCode']); // on retire la variable de session -- GitLab