Ce TP a pour but de permettre :
savoir récupérer des données d'un formulaire
créer des classes et objets simples
Connaître les règles de base du développement PHP (magic quotes, html_enitities, gestion d'upload).
Ce tp aura pour résultat final, une page internet permettant grâce à un formulaire d'afficher les données saisies et de donner un lien vers un fichier uploadé.
Exercice : Créez dans un fichier ObjectUser.php une classe utilisateur (User) comprenant les propriétés (attributs) :
nom,
prénom,
login,
password,
informations complémentaires,
CV.
Contenu de la classe ObjectUser.php :
<?php class User { public function __construct() {} public function getName() { return $this->mName; } public function getSurname() { return $this->mSurname; } public function getLogin() { return $this->mLogin; } public function getPassword() { return $this->mPassword; } public function getAnotherInformations() { return $this->mAnotherInformations; } public function getCV() { return $this->mCV; } public function setName($mName) { $this->mName = $mName; } public function setSurname($mSurname) { $this->mSurname = $mSurname; } public function setLogin($mLogin) { $this->mLogin = $mLogin; } public function setPassword($mPassword) { $this->mPassword = $mPassword; } public function setAnotherInformations($mAnotherInformations) { $this->mAnotherInformations = $mAnotherInformations; } public function setCV($mCV) { $this->mCV = $mCV; } private $mName; private $mSurname; private $mLogin; private $mPassword; private $mAnotherInformations; private $mCV; } ?>
Exercice : Créez une page Formulaire.php, dans laquelle vous inclurez votre fichier ObjectUser.php. Ajoutez une méthode printForm() à votre objet User, permettant d'afficher l'ensemble des champs dont vous avez besoin pour la saisie d'un utilisateur (penser au champ de type password pour le mot de passe et file pour le CV). Utilisez enfin dans votre page formulaire.php cette méthode pour afficher votre formulaire.
n.b : la méthode printForm() peut ne contenir que votre formulaire (<form etc. </form>), mais la page html doit être valide. Ce formulaire doit poster vers la page affichage.php.
n.b : Pour uploader un fichier, vous aurez besoin dans votre balise formulaire de l'attribut enctype="multipart/form-data", et vous passerez obligatoirement par la méthode post. Le champs caché MAX_FILE_SIZE est obligatoire en html, même si les navigateurs ne le prennent pas en compte.
<form enctype="multipart/form-data" action="_URL_" method="post"> <!-- MAX_FILE_SIZE doit précéder le champs input de type file --> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> <!-- Le nom de l'élément input détermine le nom dans le tableau $_FILES --> Envoyez ce fichier : <input name="userfile" type="file" /> <input type="submit" value="Envoyer le fichier" /> </form>
Nouvelle version de la classe User :
<?php class User { public function __construct() {} public function getName() { return $this->mName; } public function getSurname() { return $this->mSurname; } public function getLogin() { return $this->mLogin; } public function getPassword() { return $this->mPassword; } public function getAnotherInformations() { return $this->mAnotherInformations; } public function getCV() { return $this->mCV; } public function setName($mName) { $this->mName = $mName; } public function setSurname($mSurname) { $this->mSurname = $mSurname; } public function setLogin($mLogin) { $this->mLogin = $mLogin; } public function setPassword($mPassword) { $this->mPassword = $mPassword; } public function setAnotherInformations($mAnotherInformations) { $this->mAnotherInformations = $mAnotherInformations; } public function setCV($mCV) { $this->mCV = $mCV; } public static function printForm() { $output = "<form name=\"form\" enctype=\"multipart/form-data\" method=\"POST\" action=\"". $_SERVER['PHP_SELF'] ."\">\n"; $output .= "<table>\n"; $output .= "<tr>\n"; $output .= "<td>Nom : </td>\n"; $output .= "<td><input type=\"text\" name=\"surname\" /></td>\n"; $output .= "</tr>\n"; $output .= "<tr>\n"; $output .= "<td>Prénom : </td>\n"; $output .= "<td><input type=\"text\" name=\"name\" /></td>\n"; $output .= "</tr>\n"; $output .= "<tr>\n"; $output .= "<td>Identifiant : </td>\n"; $output .= "<td><input type=\"text\" name=\"login\" /></td>\n"; $output .= "</tr>\n"; $output .= "<tr>\n"; $output .= "<td>Mot de passe : </td>\n"; $output .= "<td><input type=\"password\" name=\"password\" /></td>\n"; $output .= "</tr>\n"; $output .= "<tr>\n"; $output .= "<td>Informations complémentaires : </td>\n"; $output .= "<td><textarea name=\"anotherInformations\" rows=\"5\" cols=\"30\"></textarea></td>\n"; $output .= "</tr>\n"; $output .= "<tr>\n"; $output .= "<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"30000\" />\n"; $output .= "<td>Curriculum Vitae : </td>\n"; $output .= "<td><input type=\"file\" name=\"cv\" /></td>\n"; $output .= "</tr>\n"; $output .= "<tr>\n"; $output .= "<td colspan=\"2\"><input type=\"submit\" value=\"Valider\" /></td>"; $output .= "</tr>\n"; $output .= "</table>\n"; $output .= "</form>\n"; echo $output; } private $mName; private $mSurname; private $mLogin; private $mPassword; private $mAnotherInformations; private $mCV; } ?>
Contenu du fichier Formulaire.php :
<?php include_once("./ObjectUser.php"); echo "<html>"; echo "<head><title>Formulaire.php</title></head>"; echo "<body>"; User::printForm(); echo "</body>"; echo "</html>"; ?>
Ce qui nous donne pour l'instant :
Cette page va récupérer les données postées par le formulaire. Vous inclurez de la même manière votre fichier ObjectUser.php et lui ajouterez deux méthodes :
execForm : qui permettra de récupérer les valeurs postées et d'alimenter les attributs de votre objet avec ces valeurs, de stocker votre fichier uploadé s'il existe.
printData : qui permettra d'afficher les données de votre objet, et un lien vers le fichier uplodé (affichez juste un tableau html, avec le nom de l'attribut et sa valeur).
Pour rendre accessible le fichier uploadé depuis votre navigateur, vous utiliserez la fonction move_uploaded_file.
Nouveau contenu du fichier ObjectUser.php :
<?php class User { public function __construct() {} public function getName() { return $this->mName; } public function getSurname() { return $this->mSurname; } public function getLogin() { return $this->mLogin; } public function getPassword() { return $this->mPassword; } public function getAnotherInformations() { return $this->mAnotherInformations; } public function getCV() { return $this->mCV; } public function setName($mName) { $this->mName = $mName; } public function setSurname($mSurname) { $this->mSurname = $mSurname; } public function setLogin($mLogin) { $this->mLogin = $mLogin; } public function setPassword($mPassword) { $this->mPassword = $mPassword; } public function setAnotherInformations($mAnotherInformations) { $this->mAnotherInformations = $mAnotherInformations; } public function setCV($mCV) { $this->mCV = $mCV; } public static function printForm() { $output = "<form name=\"form\" enctype=\"multipart/form-data\" method=\"POST\" action=\"". $_SERVER['PHP_SELF'] ."\">\n"; $output .= "<table>\n"; $output .= "<tr>\n"; $output .= "<td>Nom : </td>\n"; $output .= "<td><input type=\"text\" name=\"surname\" /></td>\n"; $output .= "</tr>\n"; $output .= "<tr>\n"; $output .= "<td>Prénom : </td>\n"; $output .= "<td><input type=\"text\" name=\"name\" /></td>\n"; $output .= "</tr>\n"; $output .= "<tr>\n"; $output .= "<td>Identifiant : </td>\n"; $output .= "<td><input type=\"text\" name=\"login\" /></td>\n"; $output .= "</tr>\n"; $output .= "<tr>\n"; $output .= "<td>Mot de passe : </td>\n"; $output .= "<td><input type=\"password\" name=\"password\" /></td>\n"; $output .= "</tr>\n"; $output .= "<tr>\n"; $output .= "<td>Informations complémentaires : </td>\n"; $output .= "<td><textarea name=\"anotherInformations\" rows=\"5\" cols=\"30\"></textarea></td>\n"; $output .= "</tr>\n"; $output .= "<tr>\n"; $output .= "<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"30000\" />\n"; $output .= "<td>Curriculum Vitae : </td>\n"; $output .= "<td><input type=\"file\" name=\"cv\" /></td>\n"; $output .= "</tr>\n"; $output .= "<tr>\n"; $output .= "<td colspan=\"2\"><input type=\"submit\" value=\"Valider\" /></td>"; $output .= "</tr>\n"; $output .= "</table>\n"; $output .= "</form>\n"; echo $output; } public function execForm() { if (!empty($_POST['name'])) $this->mName = $_POST['name']; if (!empty($_POST['surname'])) $this->mSurname = $_POST['surname']; if (!empty($_POST['login'])) $this->mLogin = $_POST['login']; if (!empty($_POST['password'])) $this->mPassword = $_POST['password']; if (!empty($_POST['anotherInformations'])) $this->mAnotherInformations = $_POST['anotherInformations']; if (!empty($_FILES['cv'])) { $uploads_dir = '/uploads'; if ($_FILES['cv']['error'] == UPLOAD_ERR_OK) { $tmp_name = $_FILES['cv']['tmp_name']; $name = $_FILES['cv']['name']; move_uploaded_file($tmp_name, ".$uploads_dir/$name"); $this->mCv = $uploads_dir . "/" . $name; } } } public function printData() { echo "Prénom :" . $this->mName . "<br/>\n"; echo "Nom :" . $this->mSurname . "<br/>\n"; echo "Identifiant :" . $this->mLogin . "<br/>\n"; echo "Mot de passe :" . $this->mPassword . "<br/>\n"; echo "Informations complémentaires :" . $this->mAnotherInformations . "<br/>\n"; echo "Fichier uploadé : <a href=\"".$this->mCv."\">lien</a>."; } private $mName; private $mSurname; private $mLogin; private $mPassword; private $mAnotherInformations; private $mCV; } ?>
Nouveau contenu du fichier Formulaire.php :
<?php include_once("./ObjectUser.php"); echo "<html>"; echo "<head><title>Formulaire.php</title></head>"; echo "<body>"; if (empty($_POST) && empty($_FILES)) { User::printForm(); } else { $monUtilisateur = new User(); $monUtilisateur->execForm(); $monUtilisateur->printData(); } echo "</body>"; echo "</html>"; ?>
Exemple de rendu :
Le fichier ObjectUser.php.
Le fichier Formulaire.php.