Globales et formulaires en php - pierre
Transcription
Globales et formulaires en php - pierre
Programmation orientée serveur : Globales et formulaires en php : Déclaration d’une variable dans le tableau « $GLOBALS » : $GLOBALS['x'] = 10; Le tableau $GLOBALS est un tableau associatif avec le nom des variables globales comme clef et les valeurs des éléments du tableau comme valeur des variables. Notez que $GLOBALS existe dans tous les contextes, car $GLOBALS est un superglobal (variables internes qui sont toujours disponibles, quel que soit le contexte, exemples : $GLOBALS, $_SERVER, $_GET, $_POST , $_FILES). Utilisations de superglobal : echo "Adresse serveur : " . $_SERVER['SERVER_ADDR'] . " Hôte : " . $_SERVER['HTTP_HOST'] . "</br>"; echo "Adresse IP : " . $_SERVER['REMOTE_ADDR'] . " Navigateur : " . $_SERVER['HTTP_USER_AGENT']. "</br>"; Résultat : Adresse serveur : 217.71.115.214 Hôte : iut.nice.netspace.fr Adresse IP : 83.201.8.177 Navigateur : Mozilla/5.0 (Windows NT 10.0; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0 Utilisation de la table « $_ENV » : contient les variables d’environnement de votre compte echo 'Mon nom d\'utilisateur est ' .$_ENV["USER"] . '!'; Résultat : Mon nom d’utilisateur est Pierre ! Formulaires : Fonction include() : L'instruction de langage include() inclut et exécute le fichier spécifié en argument. Si le fichier inclus comporte des erreurs de programmation, la fonction include() émet des warnings mais ne bloque pas l’exécution. Exemples : Permet d’inclure des éléments présent sur de nombreuses pages comme une entête <html> <body> <?php include("entete.php"); ?> <h1>Bienvenu à ma page d’accueil!</h1> <!-- Suite d’instructions HTML --> </body> </html> Permet d’inclure un élément déjà codé ailleurs comme un formulaire : Où « Exo13.php » est un formulaire Il existe une autre manière d’ajouter un contenu, cette fois html, via un autre fichier : include 'Exo13.php'; <?php $HTML = file_get_contents('Exo11.html'); ?> Formulaire : Exo13.php <html> <head> <meta charset="ISO-8859-1"> <title>Exo 1.3</title> </head> <body> Entête habituelle <p> <FORM action="Exo13.php" method="get" method="post"> Nom : <TEXTAREA name="nom" rows=1 cols=10></TEXTAREA> Création du formulaire (en html) Prenom : <TEXTAREA name="prenom" rows=1 cols=10></TEXTAREA> Email : <TEXTAREA name="email" rows=1 cols=10></TEXTAREA></br> Statut : <INPUT type= "radio" name="statut" value="M"> M <INPUT type= "radio" name="statut" value="Mme"> Mme <INPUT type= "radio" name="statut" value="Mlle"> Mlle Choix multiple <p> <label for="vin">Vins</label><br /> <select name=vin id="vin" multiple> <option value="St Emilion">St Emilion</option> <option value=" Château l’Hermitage"> Chateau l'Hermitage</option> <option value="Entre les Deux Mers">Entre les Deux Mers</option> <option value="Fitou">Fitou</option> <option value="Bandol">Bandol</option> <option value=" Côte de Provence"> Cote de Provence</option> </select></br> <INPUT type="submit" name="submit" value="Envoyer"> </FORM> <?php function formulaire(){ $cond = "^([a-zA-Z'àâéèêôùûçÀÂÉÈÔÙÛÇ -]{1,30})$"; $champ1= ereg($cond,$_GET["nom"] ); $champ2= ereg($cond,$_GET["prenom"] ); $email="^[a-zA-Z0-9\._-]{2,}@[a-zA-Z0-9\.-]{2,}[\.][a-zA-Z]{2,4}$"; $champ3= ereg($email,$_GET["email"] ); if ($champ2 == 1 && $champ1 == 1 && $champ3 == 1 && $_GET["nom"] != null && $_GET["prenom"] != null && $_GET["email"] != null) { echo "Bonjour ". htmlspecialchars($_GET["statut"]) . ". " . htmlspecialchars($_GET["prenom"]) . " " . htmlspecialchars($_GET["nom"]).", </br> Nous vous remercions d’avoir commandé le vin" . htmlspecialchars($_GET["vin"]) . "</br>Un mail de conformation vous a été envoyé à l’adresse : ".htmlspecialchars($_GET["email"]); ereg(string $pattern, string $string) permet } de rechercher par expression rationnelle standard else echo "Veuillez remplir le formulaire"; } if($_REQUEST) formulaire(); ?> </body> </html> Si le formulaire est envoyé appelle la fonction « formulaire() » Détails : Dans $cond on stock le pattern voulu, soit toute chaine de 1 à 30 caractères ne comprenant que des lettres de a à z ou de A à Z ou 'àâéèêôùûçÀÂÉÈÔÙÛÇ - . Dans champ1 et champ2 on match alors ce que le visiteur a rentré dans le formulaire (on récupère les infos grâce à $_GET["nomDeLaVariable"]) et le pattern. On procède exactement pareil pour l’email sauf qu’on modifie le pattern (on vérifie la présence d’un « @ » puis d’un « . », chacun encadré par du texte). Le « {2, } » vérifie la présence d’au moins 2 caractère avant le « @ ». htmlspecialchars() : Convertit les caractères spéciaux en entités HTML Si le match a réussi on a un retour true (1) sinon false (0). On vérifie alors si le visiteur a bien respecté le pattern if ($champ2 == 1 && $champ1 == 1 && $champ3 == 1 && $_GET["nom"] != null && $_GET["prenom"] != null && $_GET["email"] != null) Si on veut rendre des champs obligatoires on vérifie que les variables qui correspondent à ces champs ne sont pas vides else echo "Veuillez remplir le formulaire"; Au moins une des conditions du if est fausse, on demande donc au visiteur de bien respecter les conditions/champs obligatoires Résultat : Avec le choix multiple : Sans le choix multiple : Rempli correctement : Mal et (ou) incomplet : Méthode : GET ou POST GET : <form method="get" action="page.html"> POST : Avec cette méthode, les données du formulaire seront encodées dans une URL. Celle-ci est composée du nom de la page ou du script à charger avec les données de formulaire empaquetée dans une chaîne. Les données sont séparées de l'adresse de la page pas le code ? et entre elles par le code &. Envoi un en-tête et un corps de message au serveur. Le corps est généralement constitué des données entrées dans le champ de formulaire par l'utilisateur. Les données du formulaire n'apparaissent pas dans l'URL. Par conséquent il n'est pas possible de les récupérer directement, il faut ajouter du code PHP dans la page : <form method="post" action="page.php"> http://www.monsite.fr/page.html?couleur=bleu&forme=rectangle <?php Résumé : GET est la méthode par défaut, on utilisera par contre POST pour protéger des données sensibles (exemple : mot de passe, etc…) ou pour des données de taille importante (pas de limite de taille). $couleur = $_POST['couleur']; $forme = $_POST['forme']; ?> ... code HTML ...