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 ...