Formulaires HTML. Méthodes d'envoi de données au serveur à l'aide d'un formulaire. La forme la plus simple d'envoi de données par e-mail en utilisant HTML et PHP

L'une des fonctions les plus appréciées du site est le formulaire de candidature ou de commande, dont les données sont envoyées par e-mail au propriétaire du site. En règle générale, ces formulaires sont simples et se composent de deux ou trois champs de saisie des données. Comment créer un tel bon de commande ? Cela nécessite l'utilisation du langage de balisage HTML et du langage de programmation PHP.

Le langage de balisage HTML lui-même est simple : il vous suffit de comprendre comment et où placer certaines balises. Avec le langage de programmation PHP, les choses sont un peu plus compliquées.

Pour un programmeur, créer un tel formulaire n'est pas difficile, mais pour un concepteur de mise en page HTML, certaines actions peuvent sembler difficiles.

Créer un formulaire de soumission de données en HTML

La première ligne sera la suivante

C'est un élément très important du formulaire. Nous y indiquons comment les données seront transférées et vers quel fichier. Dans ce cas, tout est transféré via la méthode POST vers le fichier send.php. Le programme de ce fichier doit donc recevoir les données, elles seront contenues dans le tableau post, et les envoyer à l'adresse e-mail spécifiée.

Revenons à la forme. La deuxième ligne contiendra un champ pour saisir votre nom complet. A le code suivant :

Le type de formulaire est texte, c'est-à-dire que l'utilisateur pourra saisir ou copier du texte ici à partir du clavier. Le paramètre name contient le nom du formulaire. Dans ce cas, c'est fio ; c'est sous ce nom que sera transmis tout ce que l'utilisateur a saisi dans ce champ. Le paramètre placeholder précise ce qui sera écrit dans ce champ comme explication.

Ligne suivante :

Ici, presque tout est pareil, mais le nom du champ est email, et l'explication est que l'utilisateur saisit son adresse email dans ce formulaire.

La ligne suivante sera le bouton "envoyer":

Et la dernière ligne du formulaire sera la balise

Maintenant, rassemblons tout.





Rendons maintenant les champs du formulaire obligatoires. Nous avons le code suivant :





Créez un fichier qui accepte les données du formulaire HTML

Ce sera un fichier appelé send.php

Dans le fichier, dans un premier temps, vous devez accepter les données du tableau post. Pour ce faire, nous créons deux variables :

$fio = $_POST["fio"];
$email = $_POST["email"];

Les noms de variables en PHP sont précédés du signe $ et un point-virgule est placé à la fin de chaque ligne. $_POST est un tableau dans lequel les données du formulaire sont envoyées. Dans le formulaire HTML, la méthode d'envoi est spécifiée comme method="post". Ainsi, deux variables du formulaire HTML sont acceptées. Pour protéger votre site, vous devez faire passer ces variables à travers plusieurs filtres – fonctions php.

La première fonction convertira tous les caractères que l'utilisateur tentera d'ajouter au formulaire :

Dans ce cas, de nouvelles variables ne sont pas créées en php, mais celles existantes sont utilisées. Ce que le filtre va faire, c'est transformer le caractère "<" в "<". Также он поступить с другими символами, встречающимися в html коде.

La deuxième fonction décode l'URL si l'utilisateur tente de l'ajouter au formulaire.

$fio = urldecode($fio);
$email = urldecode($email);

Avec la troisième fonction, nous supprimerons les espaces du début et de la fin de la ligne, le cas échéant :

$fio = trim($fio);
$email = trim($email);

Il existe d'autres fonctions qui vous permettent de filtrer les variables php. Leur utilisation dépend de votre crainte qu'un attaquant tente d'ajouter du code de programme à ce formulaire de soumission par courrier électronique HTML.

Validation des données transférées du formulaire HTML vers le fichier PHP

Afin de vérifier si ce code fonctionne et si des données sont en cours de transfert, vous pouvez simplement l'afficher à l'écran grâce à la fonction écho :

écho $fio;
écho "
";
écho $fio;

La deuxième ligne ici est nécessaire pour séparer la sortie des variables php en différentes lignes.

Envoi des données reçues d'un formulaire HTML vers un e-mail en utilisant PHP

Pour envoyer des données par email, vous devez utiliser la fonction mail de PHP.

mail("à quelle adresse envoyer", "sujet de la lettre", "Message (corps de la lettre)","De : à partir de quel email la lettre est envoyée \r\n");

Par exemple, vous devez envoyer des données à l'adresse e-mail du propriétaire ou du gestionnaire du site [email protégé].

Le sujet de la lettre doit être clair et le message de la lettre doit contenir ce que l'utilisateur a spécifié dans le formulaire HTML.

mail(" [email protégé]", "Application du site", "Nom complet :".$fio.". E-mail : ".$email ,"De : [email protégé]\r\n");

Il est nécessaire d'ajouter une condition qui vérifiera si le formulaire a été envoyé en PHP à l'adresse email indiquée.

si (mail(" [email protégé]", "Commander sur le site", "Nom complet :".$fio.". E-mail : ".$email ,"De : [email protégé]\r\n"))
{
echo "message envoyé avec succès" ;
) autre (
}

Ainsi, le code du programme du fichier send.php, qui enverra les données du formulaire HTML par courrier électronique, ressemblera à ceci :

$fio = $_POST["fio"];
$email = $_POST["email"];
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
$fio = urldecode($fio);
$email = urldecode($email);
$fio = trim($fio);
$email = trim($email);
//écho $fio;
//écho "
";
//écho $email;
si (mail(" [email protégé]", "Application du site", "Nom complet :".$fio.". E-mail : ".$email ,"De : [email protégé]\r\n"))
( echo "message envoyé avec succès";
) autre (
echo "des erreurs se sont produites lors de l'envoi du message";
}?>

Trois lignes permettant de vérifier si les données sont en cours de transfert vers le fichier sont commentées. Si nécessaire, ils peuvent être supprimés, car ils n'étaient nécessaires que pour le débogage.

Nous plaçons le code HTML et PHP pour soumettre le formulaire dans un seul fichier

Dans les commentaires de cet article, de nombreuses personnes se demandent comment s'assurer que le formulaire HTML et le code PHP pour l'envoi de données par courrier électronique se trouvent dans un seul fichier, et non deux.

Pour mettre en œuvre ce travail, vous devez placer le code HTML du formulaire dans le fichier send.php et ajouter une condition qui vérifiera la présence de variables dans le tableau POST (ce tableau est envoyé depuis le formulaire). Autrement dit, si les variables du tableau n'existent pas, vous devez alors montrer le formulaire à l'utilisateur. Sinon, vous devez recevoir les données du tableau et les envoyer au destinataire.

Voyons comment changer le code PHP dans le fichier send.php :



Formulaire de candidature depuis le site


// vérifie si des variables existent dans le tableau POST
if(!isset($_POST["fio"]) et !isset($_POST["email"]))(
?>





) autre (
//afficher le formulaire
$fio = $_POST["fio"];
$email = $_POST["email"];
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
$fio = urldecode($fio);
$email = urldecode($email);
$fio = trim($fio);
$email = trim($email);
si (courrier(" [email protégé]", "Application du site", "Nom complet :".$fio.". E-mail : ".$email ,"De : [email protégé]\r\n"))(
echo "Message envoyé avec succès" ;
) autre (
echo "Des erreurs se sont produites lors de l'envoi du message";
}
}
?>



On vérifie l'existence d'une variable dans le tableau POST avec la fonction PHP isset(). Un point d'exclamation devant cette fonction dans une condition signifie négation. Autrement dit, si la variable n'existe pas, nous devons alors afficher notre formulaire. Si je n’avais pas mis de point d’exclamation, la condition signifierait littéralement « si elle existe, alors affichez le formulaire ». Et c'est faux dans notre cas. Naturellement, vous pouvez le renommer index.php. Si vous renommez le fichier, n'oubliez pas de renommer le nom du fichier dans la ligne

. Le formulaire doit créer un lien vers la même page, par exemple index.php. J'ai ajouté le titre de la page au code.

Erreurs courantes qui se produisent lors de la soumission d'un formulaire PHP à partir d'un site Web

La première erreur, probablement la plus courante, consiste à voir une page blanche vierge sans message. Cela signifie que vous avez fait une erreur dans le code de la page. Vous devez activer l'affichage de toutes les erreurs en PHP et vous verrez alors où l'erreur a été commise. Ajoutez au code :

ini_set("display_errors","Activé");
rapport d'erreur("E_ALL");

Le fichier send.php doit être exécuté uniquement sur le serveur, sinon le code ne fonctionnera tout simplement pas. Il est conseillé qu'il ne s'agisse pas d'un serveur local, car il n'est pas toujours configuré pour envoyer des données à un serveur de messagerie externe. Si vous exécutez le code hors du serveur, alors le code PHP sera affiché directement sur la page.

Ainsi, pour un fonctionnement correct, je recommande de placer le fichier send.php sur l'hébergement du site. En règle générale, tout y est déjà configuré.

Une autre erreur courante est lorsque la notification « Message envoyé avec succès » apparaît, mais que la lettre n'arrive pas par la poste. Dans ce cas, vous devez vérifier soigneusement la ligne :

si (mail(" [email protégé]", "Commander sur le site", "Nom complet :".$fio.". E-mail : ".$email ,"De : [email protégé]\r\n"))

Au lieu de [email protégé] il doit y avoir une adresse e-mail à laquelle la lettre doit être envoyée, mais à la place[email protégé] doit être une adresse e-mail existante pour ce site. Par exemple, pour un site Web, ce sera . Seulement dans ce cas, une lettre contenant les données du formulaire sera envoyée.

L'utilisation des méthodes GET et POST en PHP est difficile à surestimer, car ces méthodes se retrouvent sur presque tous les sites Web. Avant d'étudier le matériel décrit ci-dessous, je vous conseille de vous familiariser avec la balise html . Examinons chacune de ces méthodes en détail.

Méthode OBTENIR

La méthode GET utilise une chaîne URL pour transférer des données. Vous avez peut-être remarqué des URL longues et peu claires. Par exemple: function.php?login=Alex&email=dezyakin. Dans ce cas, les données sont traitées dans function.php. Après le point d'interrogation "?", il y a une liste de paramètres passés (les paramètres sont séparés par "&") avec des valeurs : le paramètre de connexion reçoit la valeur Alex et la variable email reçoit la valeur dezyakin. Les données seront stockées dans le tableau superglobal $_GET. Un exemple d'utilisation de la méthode GET est présenté ci-dessous :

Se connecter: E-mail: En utilisant le tableau superglobal $_GET, nous affichons les valeurs acceptées :*/ écho "
connexion = ". $_GET["connexion"] ; echo "
email = ". $_GET["email"] ; ?>

Remarquez comment nous lisons les valeurs du tableau superglobal $_GET : $_GET["nom_variable"]. Dans notre exemple, les noms de variables ont été déclarés sous la forme (name=login et name=email).

Conseil:
Avant de traiter les valeurs reçues, je vous conseille de vérifier leur existence via les fonctions isset(nom_variable) ou vide (nom_variable)- ces fonctions ont été abordées dans la leçon 2 précédente : les variables en PHP. Par exemple:

vérifier l'existence à l'aide d'isset : si isset ($_GET["login"] ) ( opérateurs pour le traitement de la connexion ... } //ou vérifiez l'existence en utilisant vide : si vide ($_GET["email"] ) ( opérateurs pour le traitement des emails ... } ?>

Dans le formulaire, vous pouvez préciser le nom du fichier qui traitera les valeurs transférées. Cela se fait à l'aide de l'attribut action du formulaire, auquel peut être attribuée l'adresse de ce fichier. Par défaut, ce fichier est affecté au fichier courant (c'est-à-dire qu'il est traité dans le fichier où se trouve le formulaire). Voici un exemple dans lequel les données d'un formulaire sont transférées vers le fichier srcipt.php pour traitement :

Se connecter: E-mail:

Le fichier script.php doit contenir une sorte de gestionnaire d'informations, sinon les informations seront transmises vides.

La méthode GET présente de nombreux inconvénients :

  • L'utilisateur voit les valeurs des paramètres transmis ;
  • L'utilisateur peut facilement falsifier les paramètres transmis ;
  • Transmission peu pratique d'informations binaires (vous devez les encoder au format texte) ;
  • Le volume de données transférées est limité - 8 Ko ;

En raison des inconvénients ci-dessus, la méthode GET n'est utilisée que dans les cas où une petite quantité de données doit être transférée, et ces données ne sont en aucun cas classées.

Méthode POST

La méthode POST diffère de GET en ce sens que les données sont transférées sous une forme privée. Il existe un tableau superglobal $_POST à ​​partir duquel les données peuvent être lues comme ceci : $_POST["nom_variable"]. Par exemple:

Se connecter: "> E-mail : ">
En utilisant le tableau superglobal $_POST, nous affichons les valeurs acceptées :*/ écho "
connexion = ". $_POST["connexion"] ; echo "
email = ". $_POST["email"] ; ?>

Le résultat de l'exécution du code ci-dessus est présenté dans la figure ci-dessous :

Comme vous pouvez le constater, l'URL ne comporte aucun post-scriptum, mais les données ont néanmoins été reçues et affichées.

Note:
1) Le volume des valeurs transférées par la méthode POST est limité par défaut et est égal à 8 Mo. Pour augmenter cette valeur, vous devez modifier la directive post_max_size dans php.ini.

2) Dans les versions antérieures de PHP, au lieu des noms courts de tableaux superglobaux $_GET et $_POST, des noms plus longs étaient utilisés : $HTTP_GET_VARS et $HTTP_POST_VARS . Par défaut, ils sont désactivés dans PHP 5, mais vous pouvez les activer dans le fichier de configuration php.ini à l'aide du paramètre register_long_arrays. Dans la version PHP 6, ces noms longs ne seront pas disponibles.

3) Avant de traiter les variables de $_POST, je vous conseille de vérifier leur présence, comme cela a été fait avec la méthode GET.

Formulaires HTML. Tableaux $_POST et $_GET

Formulaires HTML. Méthodes d'envoi de données au serveur

Vous avez probablement déjà rencontré des formulaires HTML :

Entrez votre nom :

En enregistrant ce code dans un fichier HTML et en l'affichant à l'aide de votre navigateur préféré, vous verrez un formulaire HTML familier :

Entrez votre nom :

Étiqueter

, ayant une balise de fin appariée
, définit en fait le formulaire. Ses attributs sont tous deux facultatifs :

  • action - spécifie l'URL (complète ou relative) à laquelle le formulaire sera envoyé.
  • Si cet attribut n'est pas spécifié, la plupart des navigateurs (plus précisément, tous les navigateurs que je connais) envoient le formulaire au document en cours, c'est-à-dire « à lui-même ». Il s'agit d'un raccourci pratique, mais selon la norme HTML, l'attribut action est requis.
    • méthode - méthode de soumission du formulaire. Il y en a deux.
      GET - envoi des données du formulaire dans la barre d'adresse. Vous avez peut-être remarqué sur différents sites Internet la présence d'un "?" à la fin de l'URL. et les données suivantes au format paramètre=valeur. Ici le « paramètre » correspond à la valeur de l’attribut name des éléments du formulaire (voir ci-dessous à propos de la balise ).
      ), et « valeur » est le contenu de l'attribut valeur (par exemple, il contient la saisie de l'utilisateur dans le champ de texte de la même balise
    • Par exemple, essayez de rechercher quelque chose dans Yandex et faites attention à la barre d'adresse de votre navigateur.
    Il s'agit de la méthode GET.

Étiqueter POST - les données du formulaire sont envoyées dans le corps de la demande. Si ce dont il s’agit n’est pas tout à fait clair (ou pas du tout clair), ne vous inquiétez pas, nous reviendrons bientôt sur ce problème.

  • Si l'attribut de méthode n'est pas spécifié, GET est supposé.
  • - spécifie un élément de formulaire défini par l'attribut type :

La valeur "texte" spécifie un champ de saisie de texte sur une seule ligne La valeur "submit" spécifie un bouton qui, lorsqu'on clique dessus, envoie le formulaire au serveur

D'autres valeurs sont possibles (et

  1. - pas la seule balise qui spécifie un élément de formulaire).
  2. Alors que se passe-t-il lorsque nous cliquons sur « OK » ?
    Le navigateur examine les éléments inclus dans le formulaire et construit les données du formulaire à partir de leurs attributs de nom et de valeur.
  3. Disons que le nom Vasya est entré. Dans ce cas, les données du formulaire sont name=Vasya&okbutton=OK
  4. Le navigateur établit une connexion avec le serveur, envoie au serveur une demande pour le document spécifié dans l'attribut action de la balise

, en utilisant la méthode d'envoi de données spécifiée dans l'attribut de méthode (dans ce cas - GET), en transmettant les données du formulaire dans la requête.

Le serveur analyse la requête reçue, génère une réponse, l'envoie au navigateur et ferme la connexion

Comme vous l'avez probablement déjà deviné, cliquer sur le bouton Soumettre d'un formulaire avec une méthode de soumission « GET » revient à taper l'URL correspondante (avec un point d'interrogation et les données du formulaire à la fin) dans la barre d'adresse du navigateur :

Http://www.example.com/cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK

En effet, la méthode GET est utilisée chaque fois que vous demandez un document au serveur en saisissant simplement son URL ou en cliquant sur un lien. Lors de l'utilisation , l'URL est simplement complétée par un point d'interrogation et des données de formulaire.

Peut-être que tous ces détails techniques et exercices avec telnet vous semblent incroyablement ennuyeux et même inutiles (« qu'est-ce que PHP a à voir avec ça ? »). Mais en vain. :) Ce sont les bases du travail avec le protocole HTTP, que tout programmeur Web doit connaître par cœur, et ce ne sont pas des connaissances théoriques - tout cela sera utile dans la pratique.

Remplaçons maintenant la première ligne de notre formulaire par ce qui suit :

Nous avons spécifié la méthode d'envoi comme "POST". Dans ce cas, les données sont envoyées au serveur d'une manière légèrement différente :

Telnet www.example.com 80 POST /cgi-bin/form_handler.cgi HTTP/1.0\r\n Hôte : www.example.com\r\n Type de contenu : application/x-www-form-urlencoded\r\ n Longueur du contenu : 41263\r\n \r\n name=Vasya&okbutton=OK

Lors de l'utilisation de la méthode POST, les données du formulaire sont envoyées après « deux entrées » - dans le corps de la demande. Tout ce qui précède est en fait l'en-tête de la requête (et lorsque nous avons utilisé la méthode GET, les données du formulaire ont été envoyées dans l'en-tête). Pour que le serveur sache à quel octet arrêter de lire le corps de la requête, l'en-tête contient la ligne Content-Length ; que les données du formulaire seront transmises sous la forme paramètre1=valeur1¶mètre2=valeur2... , et les valeurs seront transmises sous forme de code urlen - c'est-à-dire exactement la même chose qu'en utilisant la méthode GET, mais dans le corps du request - l'en-tête Content informe le serveur -Type: application/x-www-form-urlencoded .

L'avantage de la méthode POST est qu'il n'y a aucune limite sur la longueur de la ligne de données du formulaire.

Lorsque vous utilisez la méthode POST, il n'est pas possible de soumettre le formulaire en "suivant simplement un lien" comme vous le feriez avec GET .

Lors de l'utilisation d'un formulaire POST, dans son attribut action vous pouvez préciser après le point d'interrogation les paramètres du formulaire GET. Ainsi, la méthode POST inclut la méthode GET.

Tableaux $_GET et $_POST

Ainsi, les formulaires sont le principal moyen d'échange de données entre un serveur Web et un navigateur, c'est-à-dire qu'ils permettent une interaction avec l'utilisateur - en fait, à quoi sert la programmation Web.

Regardons un exemple simple :



si ($_SERVER [ "REQUEST_METHOD" ] == "POST" ) (
écho "

Bonjour, " . $_POST [ "nom" ] . "

!" ;
}
?>
">
Entrez votre nom :






Le formulaire affiché aux lignes 8 à 12 contient deux éléments : nom et bouton ok. L'attribut méthode spécifie la méthode de soumission du formulaire POST, tandis que l'attribut action spécifie l'URL à laquelle le formulaire est envoyé et est rempli avec la valeur de la variable serveur PHP_SELF - l'adresse du script en cours d'exécution.

- forme abrégée pour .

Supposons que nous ayons entré la valeur Vasya dans le champ du nom et cliqué sur le bouton OK. Dans ce cas, le navigateur envoie une requête POST au serveur. Corps de la requête : name=Vasya&okbutton=OK . PHP remplit automatiquement le tableau $_POST :

$_POST ["nom" ] = "Vasia"
$_POST ["okbouton" ] = "OK"

En réalité, la valeur « Vasya » est envoyée par le navigateur sous forme d'urlencode ; pour l'encodage Windows-1251, cette valeur ressemble à %C2%E0%F1%FF . Mais comme PHP gère automatiquement le décodage nécessaire, nous pouvons "oublier" cette fonctionnalité - jusqu'à ce que nous devions traiter manuellement les requêtes HTTP.

Étant donné que le corps de la requête spécifie uniquement les noms et les valeurs, mais pas les types d'éléments de formulaire, PHP ne sait pas si $_POST["name"] correspond à une chaîne d'entrée, un bouton ou une zone de liste. Mais nous, en général, n’avons pas du tout besoin de ces informations. :)

Puisque nous n'avons pas besoin de savoir ce que dit le bouton Soumettre, nous pouvons supprimer l'attribut name à la ligne 11, en raccourcissant la description du bouton à . Dans ce cas, le navigateur enverra une requête POST name=Vasya.

Et maintenant la même chose, mais pour le formulaire GET :



if (isset($_GET [ "nom" ])) (
écho "

Bonjour, " . $_GET [ "nom" ] . "

!" ;
}
?>
">
Entrez votre nom :







A la ligne 8, on pourrait tout aussi bien écrire

: GET est la méthode par défaut. Cette fois, le navigateur envoie une requête GET, ce qui équivaut à saisir l'adresse dans la barre d'adresse : http://site-address/script-name.php?name=Vasya.

PHP fait la même chose avec les formulaires GET qu'avec POST, à la différence que le tableau $_GET est rempli.

La différence cardinale se situe à la ligne 4. Puisque la simple saisie de l'adresse dans la ligne du navigateur est une requête GET, la vérification si ($_SERVER["REQUEST_METHOD"] == "GET") n'a aucun sens. Par conséquent, nous recourons à la construction isset(), qui renvoie vrai si la variable est définie (c'est-à-dire qu'une valeur lui a été attribuée) et faux si la variable n'est pas définie. Si le formulaire a été rempli - comme vous l'avez déjà compris, PHP attribue automatiquement à $_GET["name"] la valeur appropriée.

La méthode de vérification utilisant isset() est universelle ; elle pourrait également être utilisée pour un formulaire POST. De plus, c’est préférable car cela permet de savoir quels champs du formulaire sont remplis.

Un exemple un peu plus complexe.




echo "Veuillez entrer un nom !
" ;
< 1900 || $_POST [ "year" ] > 2004 ) {
écho
"
;
) autre (

" ;

echo "À toi " . $âge . " années
" ;
}
écho "


" ;
}
?>
">
Entrez votre nom :


Entrez votre année de naissance :







Aucune nouvelle technique n’est utilisée ici. Comprenez-le, exécutez le code, essayez de modifier...

Modifions le dernier exemple pour que l'utilisateur n'ait pas à remplir à nouveau les champs. Pour ce faire, remplissez les attributs de valeur des éléments du formulaire avec les valeurs que nous venons de saisir.



$nom = isset($_POST [ "nom" ]) ? $_POST [ "nom" ] : "" ;
$année = isset($_POST [ "année" ]) ? $_POST [ "année" ] : "" ;

Si (isset($_POST [ "nom" ], $_POST [ "année" ])) (
if ($_POST [ "nom" ] == "" ) (
echo "Veuillez entrer un nom !
" ;
) sinon si ($_POST [ "année" ]< 1900 || $_POST [ "year" ] > 2004 ) {
écho "Veuillez préciser l'année de naissance ! Plage de valeurs valide : 1900..2004
"
;
) autre (
echo "Bonjour, " . $_POST [ "nom" ] . " !
" ;
$age = 2004 - $_POST [ "année" ];
echo "À toi " . $âge . " années
" ;
}
écho "


" ;
}
?>
">
Entrez votre nom :


Entrez votre année de naissance :







Les lignes 4 et 5 peuvent prêter à confusion. Tout est très simple : la ligne 4 pourrait s'écrire ainsi :

if (isset($_POST [ "nom" ]))
$nom = $_POST ["nom" ];
autre
$nom = "" ;

La question peut se poser : pourquoi ne pas supprimer les lignes 4 et 5 et écrire :

Entrez votre nom : ">

Entrez votre année de naissance : ">

Le fait est que si ces variables POST ne sont pas définies - et ce sera le cas si le formulaire n'a pas encore été rempli - PHP émettra des avertissements sur l'utilisation de variables non initialisées (et tout à fait raisonnablement : un tel message permet de rapidement trouver des fautes de frappe difficiles à détecter dans les noms de variables, et met également en garde contre d'éventuels « trous » sur le site). Vous pouvez bien sûr mettre le code isset directement dans le formulaire, mais cela sera trop fastidieux.

J'ai compris? Essayez maintenant de trouver l'erreur dans le code donné. Eh bien, ce n’est pas exactement une erreur, mais un défaut.

htmlspecialchars()

Vous ne l'avez pas trouvé ? Je vais vous donner un indice. Entrez, par exemple, dans le champ « nom » un guillemet double et du texte, par exemple « Va ». Envoyez le formulaire et jetez un œil au code source de la page résultante. La quatrième ligne aura quelque chose comme :

Entrez votre nom :

Autrement dit, rien de bon. Et si un utilisateur rusé saisissait du code JavaScript ?

Pour résoudre ce problème, vous devez utiliser la fonction htmlspecialchars(), qui remplacera les caractères spéciaux par leur représentation HTML (par exemple, un guillemet avec ") :



$nom = isset($_POST [ "nom" ]) ? htmlspecialchars ($_POST [ "nom" ]) : "" ;
$année = isset($_POST [ "année" ]) ? htmlspecialchars ($_POST [ "année" ]) : "" ;

Si (isset($_POST [ "nom" ], $_POST [ "année" ])) (
if ($_POST [ "nom" ] == "" ) (
echo "Veuillez entrer un nom !
" ;
) sinon si ($_POST [ "année" ]< 1900 || $_POST [ "year" ] > 2004 ) {
écho "Veuillez préciser l'année de naissance ! Plage de valeurs valide : 1900..2004
"
;
) autre (
echo "Bonjour, " . $nom . " !
" ;
$age = 2004 - $_POST [ "année" ];
echo "À toi " . $âge . " années
" ;
}
écho "


" ;
}
?>
">
Entrez votre nom :


Entrez votre année de naissance :







Répétez l'expérience et assurez-vous que le code HTML est désormais correct.

N'oubliez pas : la fonction htmlspecialchars() doit être utilisée lors de l'affichage du contenu d'une variable pouvant contenir des caractères spéciaux HTML.

phpinfo()

La fonction phpinfo() est l’une des plus importantes de PHP. Il affiche des informations sur les paramètres PHP, les valeurs de diverses variables de configuration...

Pourquoi est-ce que j'en parle dans un article sur les formulaires ? phpinfo() est un outil de débogage pratique. phpinfo(), entre autres, imprime les valeurs de toutes les variables $_GET, $_POST et $_SERVER. Ainsi, si une variable de formulaire est perdue, le moyen le plus simple de découvrir ce qui ne va pas est d'utiliser la fonction phpinfo(). Pour garantir que la fonction affiche uniquement les valeurs des variables (et sans que vous ayez à faire défiler des dizaines de pages), il convient de l'appeler ainsi : phpinfo(INFO_VARIABLES) ; , ou - ce qui est absolument la même chose - phpinfo(32) ;.



">
Entrez votre nom :


phpinfo(32);
?>



Ou, par exemple, cette situation : vous souhaitez connaître l'adresse IP d'un visiteur. Vous vous souvenez que la variable correspondante est stockée dans le tableau $_SERVER, mais - pas de chance - vous avez oublié comment s'appelle exactement la variable. Encore une fois, appelez phpinfo(32) ; , recherchez votre adresse IP dans le signe et trouvez-la dans la ligne $_SERVER["REMOTE_ADDR"] .

/php/php5ru.png HTTP/1.0

: www.php5.ru

Ce que vous verriez si vous voyiez ceci clignotera sur l'écran png-fichier dans un éditeur de texte.

Formulaires HTML. Méthodes d'envoi de données au serveur à l'aide d'un formulaire

L'une des applications les plus courantes de tout langage de script serveur est le traitement HTML- les formulaires. La programmation Web implique principalement le traitement de diverses entrées utilisateur.

RNR facilite la tâche de traitement et d'analyse des formulaires reçus du navigateur, puisque toutes les capacités nécessaires sont intégrées au langage au niveau le plus bas. Par conséquent, le programmeur n’a même pas besoin de penser aux fonctionnalités du protocole. HTTP et je me demande comment se produisent l'envoi et la réception

AVEC HTML-des formulaires que vous avez déjà rencontrés lors de l'étude du langage de balisage HTML.

Regardons un exemple d'envoi d'un message à partir d'un formulaire par e-mail.

Inscription e_mail.html. Envoi d'un message depuis un formulaire par e-mail

Envoi du formulaire par e-mail

Cliquez sur Réinitialiser et remplissez la commande.


Si vous traitez ce code HTML avec un navigateur, une page Web s'affichera, visible sur l'écran du moniteur :

L'utilisateur clique sur un bouton "Réinitialiser", et les champs prennent leurs valeurs par défaut. Le formulaire est rempli par l'utilisateur, et en un clic "Envoyer la commande" envoyé à Cette adresse e-mail est protégée contre les robots spammeurs. Pour le voir, vous devez activer JavaScript. Généralement, le navigateur n'envoie pas le formulaire lui-même, mais confie ce travail au programme de messagerie installé par défaut sur le système d'exploitation de l'ordinateur (par exemple, Outlook). La lettre est envoyée sous la forme :

sujet : Formulaire soumis à partir de Microsoft Internet Explorer

nom = Prokhorov Viktor Sergueïevitch

value= Cette adresse e-mail est protégée contre les robots spammeurs. Pour le visualiser, vous devez avoir activé JavaScript

obj = "Directives"

La lettre est composée de paires nom=valeur, qui sont sélectionnés dans l'ordre dans les champs du formulaire.

Examinons de plus près l'exemple suivant.

Inscription formulaire_1.html

Entrez votre nom :

Enregistrer ce code dans un fichier HTML formulaire_1.html et en le visualisant à l'aide d'un navigateur, vous pouvez voir le formulaire HTML :

Le formulaire est implémenté par une balise conteneur . La balise indique avec ses attributs :

Adresse du script auquel le formulaire sera envoyé ;

Mode d'envoi et caractéristiques des données contenues dans le formulaire. Élémentaire et finale les balises définissent les limites du formulaire. Leur indication est obligatoire.

Attributs des balises de conteneur
(
tous facultatifs) :

? action--un attribut dont la valeur est URL-adresse (complète ou relative) de la personne demandée Image de synthèse-programmes. Ce programme traitera les données contenues dans le formulaire. Il est acceptable d'utiliser l'entrée MAILTO:URL. Dans ce cas, le formulaire sera envoyé par email. Si attribut action ne le précisez pas, le contenu du formulaire sera envoyé à URL l'adresse à partir de laquelle cette page Web a été chargée, c'est-à-dire « vers elle-même ». C'est un raccourci pratique, mais selon le standard HTML, l'attribut action requis.

? méthode-- définit une méthode HTTP, utilisé pour envoyer les données du formulaire du navigateur au serveur. Attribut méthode peut prendre deux significations : obtenir ou poste:

¦ obtenir- envoi des données du formulaire dans la barre d'adresse. Vous avez peut-être remarqué sur différents sites Internet la présence d'un "?" à la fin de l'URL. et les données suivantes au format paramètre = valeur. Ici "paramètre" correspond à la valeur de l'attribut noméléments de formulaire (voir ci-dessous à propos de la balise ), UN "signification"- contenu d'attribut valeur(il contient, par exemple, la saisie de l'utilisateur dans un champ de texte de la même balise ).

Par exemple, essayez de rechercher quelque chose dans Yandex et faites attention à la barre d'adresse de votre navigateur. C'est ainsi obtenir.

¦ poste- les données du formulaire sont envoyées dans le corps de la demande. Si ce dont il s’agit n’est pas tout à fait clair (ou pas du tout clair), ne vous inquiétez pas, nous reviendrons bientôt sur ce problème.

Si attribut méthode non spécifié - implicite "obtenir".

? enctype-- attribut facultatif. Spécifie le type de contenu du formulaire utilisé pour déterminer le format d'encodage lors de sa soumission. DANS HTML deux valeurs possibles pour l'attribut sont définies enctype:

¦ APPLICATION/X-WWW-FORM-URLENCODED(défaut).

¦ MULTIPART/FORM-DONNÉES.

Étiqueter vous permet de créer des chaînes de texte, des noms de fichiers, des mots de passe, etc. dans les champs de saisie du formulaire. pas de balise de fin. Attributs et caractéristiques d'utilisation dépend de la façon dont il est utilisé.

Étiqueter - spécifie l'élément de formulaire défini par l'attribut taper:

¦ Signification "texte" spécifie un champ de saisie de texte sur une seule ligne.

¦ Signification "soumettre" spécifie un bouton qui, lorsque vous cliquez dessus, envoie le formulaire au serveur.

La valeur "texte" spécifie un champ de saisie de texte sur une seule ligne - ce n'est pas la seule balise qui définit un élément de formulaire), mais nous les examinerons dans les chapitres suivants.

Alors, que se passe-t-il lorsque l'on clique sur le bouton OK ?

1. Le navigateur regarde les éléments inclus dans le formulaire et crée à partir de leurs attributs nom Et valeur données du formulaire. Disons que le nom est entré Vassia. Dans ce cas, les données du formulaire : nom=Vasya&okbutton=OK.

2. Le navigateur établit une connexion avec le serveur, envoie une demande au serveur pour le document spécifié dans l'attribut actionétiqueter , en utilisant la méthode d'envoi de données spécifiée dans l'attribut méthode(dans ce cas - OBTENIR), en transmettant les données du formulaire dans la requête.

3. Le serveur analyse la requête reçue, génère une réponse, l'envoie au navigateur et ferme la connexion.

4. Le navigateur affiche le document reçu du serveur.

Envoi manuel de la même demande (à l'aide de telnet) ressemble à ceci (en supposant que le nom de domaine du site soit www.exemple.com).



Des questions ?

Signaler une faute de frappe

Texte qui sera envoyé à nos rédacteurs :



Votre nom : Votre adresse : Envoyer: