Scripts PHP pour le traitement des formulaires HTML

Souvent, sur les sites Web, vous pouvez trouver des pages sur lesquelles sont placés des formulaires HTML. Formulaires Web – moyen pratique obtenir des informations auprès des visiteurs de votre site. Un exemple de ceci est - , - qui fournit retour avec les visiteurs du site et les développeurs. Les formulaires sont également pratiques pour les développeurs de sites lors du développement d'un CMS, ce qui leur permet de conserver la propriété principale du site : la pertinence. Cet article est consacré aux bases de la création de formulaires HTML, à leur traitement et aux méthodes de transfert de données des formulaires écran vers les scripts PHP.

1) Créez un formulaire simple

Mots clés

Et
définir le début et la fin du formulaire. Balise de formulaire de départ
contient deux attributs : action Et méthode. L'attribut action contient l'URL du script qui doit être appelée pour traiter le script. Attribut méthode indique au navigateur quel type Requête HTTP doit être utilisé pour soumettre le formulaire ; valeurs possibles POSTE Et OBTENIR.

Commentaire

La principale différence entre les méthodes POST et GET réside dans la manière dont les informations sont transférées. DANS Méthode OBTENIR les paramètres sont transmis via la barre d'adresse, c'est-à-dire essentiellement dans l'en-tête de la requête HTTP, tandis que dans la méthode POST, les paramètres sont transmis via le corps de la requête HTTP et ne sont en aucun cas reflétés dans la barre d'adresse.

$text = nl2br($_POST["montexte"]);
?>

Tâche: Supposons que vous deviez créer une liste déroulante avec les années allant de 2000 à 2050.
Solution: Vous devez créer un formulaire HTML avec un élément SELECT et un script PHP pour traiter le formulaire.

Discussion:

Tout d'abord, créons deux fichiers : formulaire.html Et action.php. Dans le fichier formulaire.html contiendra un formulaire HTML avec une liste déroulante. De plus, les valeurs de la liste peuvent être spécifiées de deux manières :

I. Saisie manuelle des données :

II. Saisie de données via une boucle :

Comme vous pouvez le constater, le deuxième exemple avec une boucle est plus compact. Je pense qu'il n'est pas nécessaire de fournir le script du gestionnaire pour ce formulaire, car il est traité exactement de la même manière qu'un champ de texte, c'est-à-dire les valeurs de la liste peuvent être récupérées à partir d'un tableau superglobal $_POST.

Description:

Créons un formulaire HTML pour envoyer un fichier au serveur.




Ce formulaire html contient un élément parcourir, qui ouvre une boîte de dialogue permettant de sélectionner un fichier à télécharger sur le serveur. Lorsque vous appuyez sur le bouton "Transférer le fichier", le fichier est transmis au script du gestionnaire.

Ensuite, vous devez écrire un script de gestionnaire action.php. Avant d'écrire le gestionnaire, nous devons décider dans quel répertoire nous allons copier le fichier :

if(isset($_FILES [ "monfichier" ])) // Si le fichier existe
{
$catalogue = "../image/" ; // Notre catalogue
si (is_dir ($ catalogue)) // Si un tel répertoire existe
{
$monfichier = $_FILES [ "monfichier" ][ "nom_tmp" ]; // Fichier temporaire
$monfichier_name = $_FILES [ "monfichier" ][ "nom" ]; // Nom de fichier
if(! copy ($monfichier, $catalog)) echo "Erreur de copie du fichier". $monnom_fichier // Si la copie du fichier a échoué
}
sinon mkdir (""../image/" ); // S'il n'existe pas un tel répertoire, nous le créerons
}
?>

Commentaire

Si vous faites confiance aux utilisateurs pour télécharger des fichiers sur votre serveur, vous devez être extrêmement prudent. Les attaquants peuvent intégrer du « mauvais » code dans une image ou un fichier et l’envoyer au serveur. Dans de tels cas, vous devez contrôler strictement le téléchargement des fichiers.

Cet exemple montre la création d'un répertoire et la copie d'un fichier dans ce répertoire sur le serveur.

Je voudrais également montrer un exemple avec l'élément case à cocher. Cet élément est légèrement différent des autres éléments dans la mesure où si ce n'est pas l'un des éléments case à cocher’a n’est pas sélectionné, alors la variable superglobale $_POST renverra une valeur vide :


Bleu
Noir
Blanc

if (!empty($_POST [ "ma couleur" ])) echo $_POST [ "ma couleur" ]; // Si au moins 1 élément est sélectionné
sinon écho "Sélectionner une valeur";
?>

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 Balisage HTML et la langue 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 très élément important formes. 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, il s'agit de fio ; c'est sous ce nom que sera transmis tout ce que l'utilisateur aura 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 sont extraites de formulaires HTML. Pour protéger votre site, vous devez faire passer ces variables via 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 (courrier(" [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 (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";
}?>

Trois lignes permettant de vérifier si les données sont transférées dans 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 une négation. Autrement dit, si la variable n'existe pas, nous devons alors afficher notre formulaire. Si je n’avais pas mis le 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 (courrier(" [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.

Les formulaires HTML sont des éléments d'interface complexes. Ils comprennent différents éléments fonctionnels : des champs de saisie Et .
Il y a un paramètre envelopper– tâche des sauts de ligne. Valeurs possibles:
désactivé– désactive le retour à la ligne ;
virtuels– affiche les sauts de ligne, mais envoie le texte tel qu'il a été saisi ;
physique– les sauts de ligne restent dans leur forme originale.
Balise par défaut

Pour qu'un champ de texte multiligne soit conforme au formatage HTML (retour à la ligne à l'aide de la balise
ou
), puis utilisez la fonction nl2br():

10. Bouton pour télécharger des fichiers (parcourir)

Sert à implémenter le téléchargement de fichiers sur le serveur. Lors de la création d'un champ de texte, vous devez également préciser le type du champ taper Comment "déposer".

Téléverser un fichier:

Façons dont le navigateur communique avec le serveur

Méthodes fournies par le protocole HTTP, Un peu. Ce sont des informations importantes. Il n'y a pas d'autres moyens. En pratique, deux sont utilisés :
OBTENIR- C'est lorsque les données sont transférées dans la barre d'adresse, par exemple lorsque l'utilisateur clique sur un lien.
POSTE– lorsqu’il appuie sur un bouton du formulaire.

Méthode OBTENIR

Pour transmettre des données à l'aide de la méthode OBTENIR pas besoin de créer un formulaire sur la page HTML (utiliser des formulaires pour les requêtes utilisant le OBTENIR personne ne vous arrête) - juste un lien vers le document avec l'ajout d'une chaîne de requête, qui peut ressembler à variable=valeur. Les paires sont concaténées à l'aide de l'esperluette & et la chaîne est ajoutée à l'URL de la page à l'aide d'un point d'interrogation " ? ».
Mais vous n'êtes pas obligé d'utiliser des paires clé=valeur si vous devez transmettre une seule variable : pour ce faire, vous devez écrire la VALEUR (et non le nom) de la variable après le point d'interrogation.
Avantage passer les paramètres de cette façon est destiné aux clients qui ne peuvent pas utiliser la méthode POSTE(par exemple les moteurs de recherche) pourront toujours, simplement en suivant le lien, passer des paramètres au script et recevoir le contenu.
Défaut est-ce qu'en changeant simplement les paramètres dans la barre d'adresse, l'utilisateur peut retourner le script de manière imprévisible et cela crée une énorme faille de sécurité, combinée à des variables non définies et register_globals sur ou quelqu'un peut découvrir la valeur d'une variable importante (par exemple IDENTIFIANT-sessions), simplement en regardant l'écran du moniteur.
:
- d'accéder aux pages publiques avec passage de paramètres (fonctionnalité augmentée)
- transfert d'informations qui n'affectent pas le niveau de sécurité
:
- d'accéder aux pages protégées avec transfert de paramètres
- transmettre des informations affectant le niveau de sécurité
- de transmettre des informations non modifiables par l'utilisateur (certaines transmettent le texte des requêtes SQL.

Méthode POST

Transmettre les données en utilisant la méthode POSTE Ceci n'est possible qu'en utilisant un formulaire sur une page HTML. Différence principale POSTE depuis OBTENIR le fait que les données ne sont pas transmises dans l'en-tête de la requête mais dans le corps, donc l'utilisateur ne les voit pas. Vous ne pouvez le modifier qu'en changeant le formulaire lui-même.
Avantage:
- une plus grande sécurité et fonctionnalité des requêtes utilisant des formulaires utilisant la méthode POST.
Défaut:
- moins de disponibilité.
Pour quoi devriez-vous l’utiliser ?:
- pour transmettre une grande quantité d'informations (textes, fichiers..) ;
- transmettre toute information importante ;
- pour restreindre l'accès (par exemple, utiliser uniquement le formulaire pour la navigation - une option qui n'est pas disponible pour tous les programmes robots ou récupérateurs de contenu).
Pourquoi il ne doit pas être utilisé:

PHP est capable d'accepter un fichier téléchargé à l'aide de n'importe quel navigateur. Cela permet de télécharger à la fois des fichiers texte et binaires. Combiné avec l'authentification PHP et les fonctions du système de fichiers, vous avez un contrôle total sur qui est autorisé à télécharger des fichiers et quoi faire avec le fichier une fois qu'il a été téléchargé.
La page de téléchargement de fichiers peut être implémentée à l'aide d'un formulaire spécial qui ressemble à ceci :

//Formulaire de téléchargement de fichiers

Envoyez ce fichier :

Dans l'exemple ci-dessus "URL" doit être remplacé par un lien vers un script PHP. Champ caché MAX_FILE_SIZE(la valeur doit être spécifiée en octets) doit précéder le champ de sélection de fichier et sa valeur est la taille de fichier maximale autorisée à accepter. Vous devez également vous assurer que dans les attributs du formulaire que vous spécifiez enctype="multipart/form-data", sinon les fichiers ne seront pas téléchargés sur le serveur.
Attention
Option MAX_FILE_SIZE est une recommandation du navigateur, même si PHP vérifierait également cette condition. Contourner cette limitation du côté du navigateur est assez simple, vous ne devez donc pas compter sur cette fonctionnalité pour bloquer tous les fichiers plus volumineux. Cependant, il n'existe aucun moyen de contourner la limitation de taille maximale de PHP. Vous devriez quand même ajouter la variable de formulaire MAX_FILE_SIZE, car cela évite aux utilisateurs d'attendre anxieusement lors du transfert de fichiers volumineux, pour ensuite découvrir que le fichier est trop volumineux et que le transfert a échoué.

Comment définir une méthode de requête ?

Directement:

Getenv("REQUEST_METHOD");

reviendra OBTENIR ou POSTE.

Quelle méthode faut-il utiliser ?

Si le formulaire est utilisé pour demander des informations, par exemple lors d'une recherche, il doit alors être envoyé en utilisant la méthode OBTENIR. Pour maintenir la page à jour, vous pouvez la mettre en signet et/ou envoyer le lien à un ami.
Si, à la suite de la soumission d'un formulaire, des données sont écrites ou modifiées sur le serveur, vous devez alors les envoyer en utilisant la méthode POSTE, et il est impératif, après traitement du formulaire, de rediriger le navigateur grâce à la méthode OBTENIR. Aussi, POSTE peut être nécessaire si vous devez transférer une grande quantité de données vers le serveur (par exemple OBTENIR c'est très limité), ainsi que si les données transmises ne doivent pas être « affichées » dans la barre d'adresse (lors de la saisie d'un login et d'un mot de passe par exemple).
Quoi qu'il en soit, après traitement POSTE Vous devez toujours rediriger le navigateur vers une page, même la même, mais sans les données du formulaire, afin que lorsque la page est actualisée, elles ne soient pas enregistrées à nouveau.

Comment transférer des données vers un autre fichier directement depuis le corps d'un programme PHP en utilisant les méthodes GET et POST ?

Un exemple pour démontrer l'envoi simultané de données à l'aide des méthodes POST et GET et la réception d'une réponse du serveur.