PHP question concernant le traitement des formulaires

Fermé
David - 11 juin 2022 à 17:41
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 13 juin 2022 à 12:06
Bonjour,
Je suis actuellement une formation sur le php et mysql et il y'a un detail concernant le traitement des formulaires que je ne comprend pas. Prenons un exemple de code où j'ai un formulaire qui demande le prenom et le nom.


if (isset($_POST['prenom']) && isset($_POST['nom'])) {

echo 'Bonjour' . ' ' . $_POST['prenom'] . ' ' . $_POST['nom'];
}

echo '<form method = "post" action = "index.php">
<p>
<table>
<tr>
<td>Prénom</td>
<td> <input type = "text" name = "prenom" /> </td>
</tr>
<tr>
<td>Nom</td>
<td> <input type = "text" name = "nom" /> </td>
</tr>
</table>
<button type = "submit"> Envoyer </button>
<p>

</form>';


Dans ce code on utilise exclusivement une page php ce qui veut dire que toute les balises html pour faire un formulaires sont appelée avec l'instruction echo ce qui nous permet de faire un formulaire sans passer par une page HTML. Il y'a quelque chose que je ne comprend pas concernant les lignes de codes qui ont pour but d'analyser les données que va entrer un utilisateur dans ce formulaire à savoir :


if (isset($_POST['prenom']) && isset($_POST['nom'])) {

echo 'Bonjour' . ' ' . $_POST['prenom'] . ' ' . $_POST['nom'];
}

Pourquoi on place ces lignes de code avant le formulaire qu'on génère grâce à PHP et pas après. Si on aurait choisit d'inclure du code PHP dans du code html, aurait on dû également placer ces deux lignes de code avant le formulaire?

Je vous remercie à l'avance de vos explications en espérant qu'elles soient le plus simple possible.


Configuration: Windows / Chrome 102.0.5005.63

4 réponses

yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
11 juin 2022 à 18:21
bonjour,
Je suppose que ta page s'appelle index.php.
On place ces lignes de code avant le formulaire parce qu'on souhaite que le texte "bonjour" soit affiché au dessus du formulaire.
As-tu partagé le contenu complet de ta page? Le contenu complet aidera à répondre à ta seconde question.
Merci, quand tu partages ici du code, d'utiliser les balises de code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
12 juin 2022 à 20:52
Sans necessairement séparer dans des fichiers différents... on essaiera quand même de séparer le "traitement" du formulaire .. du reste du code html de la page.
Cela permet de s'y retrouver plus facilement par la suite.
En gros, un script à peu près correcte, se structure comme ceci..

<?php

// Traitement de formulaire,  initialisation de variables .. requêtes SQL ...
//...

?>
<!Doctype html>
<html>
  <head> 
      ..
  </head>
  <body>
     <!-- Ici ton code html -->
      
    <?php
        // éventuellement un peu de php
        // par exemple, l'affichage du formulaire ou le nom et prénom envoyé par celui-ci
     ?>

     <!-- encore du html éventuellement...  -->

    <!-- et en fin de document.. -->
    <!-- Ici le Javascript -->
    <script>
      //...

    </script>
  </body>
</html>


0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
13 juin 2022 à 12:06
Bonjour,

On recommande de toujours effectuer le traitement du formulaire avant l'affichage du formulaire ou n'importe quel contenu notamment pour les redirections HTTP via PHP.

Dès qu'on fait une requête POST (via l'envoi d'un formulaire), la bonne pratique serait d'effectuer une redirection GET à la fin de cette requête (principe post-redirect-get) pour éviter le message du navigateur si on rafraichi la page après l'envoi du formulaire.
Or pour faire des redirections HTTP via la fonction php header(), aucun contenu ne doit être envoyé au client via echo ou des lignes html avant la redirection avec header().
0
Salut, ne pas confondre le formulaire en lui même(HTML) qui est la manière d'envoyer les données vers son traitement en PHP.
En(méthode) POST c'est vers une autre page que celle qui contient le formulaire.
Séparer le traitement(la réception de ce qui est envoyé par le formulaire) de leur traitement devrais être votre première étape.
Ensuite un langage serveur comme PHP(préprocesseur) fonctionne avant que la page HTML existe, echo va donc servir à écrire les contenus et balises HTML dynamiquement.

page formulaire ---> envoi en POST --->réception page PHP(une autre page) ---> traitement des données reçues ---> résultat du traitement(ex: récupérer des données sur la base de données) = création/inclusion des contenus dynamiques dans une page(une autre) en écrivant HTML via echo 'mon HTML est avec '.$mesVariablesPHP

Si vous séparer en 3 pages vous comprendrez mieux le principe. C'est aussi nettement mieux à tout point de vue de faire cette séparation car: les 3 pages peuvent être utilisées/réutilisées indépendamment l'une de l'autre, il est plus facile de trouver une erreur si on sait dans quelle partie elle se trouve plutôt que si tout est mélangé, plus facile à lire et comprendre quand on revient sur le code ou que quelqu'un d'autre doit intervenir dessus.

Donc faites cette séparation au lieu d'amalgamer plusieurs parties différentes qui n'ont pas à l'être.

ps: ce que vous décrivez correspond plutôt à la méthode GET qui va envoyer les données à la même page, cette méthode est à éviter car les données envoyées ne sont pas sécurisées(écrites dans l'URL de la page) donc peu fiable et facilement source de problème(exemple un enregistrement dans une base de données à partir de données envoyées en GET n'importe qui pourra changer le contenu de l'URL pour provoquer une erreur ou flinguer la base de données voire pire).

Plus de détails par là:

[xxx__urlsupprimeeparlamoderaion__xxxx]
-1
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
12 juin 2022 à 20:21

En(méthode) POST c'est vers une autre page que celle qui contient le formulaire.


page formulaire ---> envoi en POST --->réception page PHP(une autre page) -

N'importe quoi ....

Rien n'empêche de faire le traitement sur la même page que celle contenant le formulaire...


faites cette séparation au lieu d'amalgamer plusieurs parties différentes qui n'ont pas à l'être.

du grand n'importe quoi ...



ps: ce que vous décrivez correspond plutôt à la méthode GET qui va envoyer les données à la même page,

L'apothéose du n'importe quoi ...
GET ET POST sont des protocoles de transmissions de données.
Le get, via l'URL
Le post, via les en-têtes HTTP ...
Ca n'indique en rien si c'est sur la même page ou une autre...


cette méthode est à éviter car les données envoyées ne sont pas sécurisées(écrites dans l'URL de la page) donc peu fiable et facilement source de problème(exemple un enregistrement dans une base de données à partir de données envoyées en GET n'importe qui pourra changer le contenu de l'URL pour provoquer une erreur ou flinguer la base de données voire pire).

Sûrement dans les années 2000 ... mais aujourd'hui, lorsque le code est bien fait ( et en utilisant les requêtes préparées..) il n'y plus possibilité de faire des injections sql..


En plus.. si tu regardes bien son code.. c'est bien la méthode POST qu'il utilise déjà .. ...
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
12 juin 2022 à 20:33
Et l'utilisation de POST n'empêche pas l'utilisateur de bidouiller les données. Même avec POST, il faut se méfier des données reçues.
0
David > yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024
Modifié le 12 juin 2022 à 20:45
Tout à fait mais j'ai bien précisé que c'est de l'apprentissage et du coup cet extrait de code que j'ai publié est très loin d'être optimisé. J'aurai pu éventuellement inclure par exemple la fonction htmlspecialchars() ou montrer un exemple un poil plus complet et interessant. Je suis rester volontairement très simple parce que je voulais avant tout comprendre pourquoi des lignes de code de vérification php étaient placée avant le dit formulaire.
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > David
12 juin 2022 à 20:51
As-tu compris que c'était afin d'afficher le texte "bonjour" au dessus du formulaire?
As-tu essayé de le mettre après?
0
David > yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024
12 juin 2022 à 20:55
Ok maintenant supposons qu'il n'ya pas de message bonjour, qu'on a juste un formulaire où on peut mettre son nom et prenom. Le résultat est le même: les instructions de vérifications sont apparemment placée avant...
0