Problèmes multiples avec un formulaire de contact
Bonjour,
Ayant récupéré un formulaire de contact avec captcha, il est conseillé de mettre dans l'entete_ini.php la session :`
<?php /* entete_inc.php */ ?>
<?php
session_start();
?>
<!--
-->
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
(...)
Je n'ai pas trop compris l'utilité de ce code.
Certainement qu'il doit être important parce dans le code de verification.php,
<!-- verification.php -->
<?php
session_start();
$nom = utf8_decode($_POST['nom']);
$mail = ($_POST['email']);
$subject = utf8_decode($_POST['sujet']);
$message = utf8_decode($_POST['message']);
$headers = 'From: '.$nom.'<'.$mail.'>'."\r\n";
$headers .= 'Reply-to: <'.$mail.'>'."\r\n";
$to = 'jlb59430@laposte.net';
?>
<div class="page_conteneur"> </div>
<section>
<h1><span class="puce-page"> </span>Me contacter</h1>
<header>
<div class="intitule bleu gras"><span class="puce-libelle"> </span>Statut du message.</div>
</header>
<br><br>
<?php
if($_POST['captcha']==$_SESSION['captcha']){
mail($to, $subject, $message, $headers);
echo 'Votre message a bien été envoyé';}
else{
echo 'Tous les champs ne sont pas justes. <a href="?page=contact">Recommencez</a>';
}
?>
<br><br>
</section>
J'ai du mal à comprendre pourquoi il faut mettre "session_start()" au tout début dans l'entete_inc.php puisqu'il est dans "verification.php" !
Quelle est l'utilité de le déclarer 2 fois, et d'ailleurs, à quoi ça peut servir ?
C'est un code que je ne connaissais pas, et je me demande si on pourrait s'en passer ?
J'ai essayé avec différentes configurations, bien-sûr, il n'y a aucun captcha, et voilà l'erreur que je reçois (traduite en français).
Attention : session_start() : la session ne peut pas être démarrée après que les en-têtes ont déjà été envoyés dans C:\laragon\www\MaquettePHP\pages\contact\verification.php à la ligne 4
J'avoue que j'ai du mal à comprendre !
Voudriez-vous m'expliquer ?
Merci d'avance.
Réponses apportées à cette discussion
Résolu !
Si c'est résolu, alors c'est très bien.
Ce qu'il est important de prendre en compte, c'est l'exécution chronologique du code, toujours ! Ensuite, si on envoie quoi que ce soit vers le navigateur, on ne peut plus utiliser la fonction session_start : celle-ci doit être exécutée avant tout autre chose.
Petite astuce : on peut créer un fichier qu'on va inclure ensuite dans le code des pages et dans ce fichier, on utilisera avec profit headers_sent
Voir la doc : https://www.php.net/manual/fr/function.headers-sent.php
Merci pour le lien, mais je n'y comprends pas grand chose parce que, ce n'est pas trop mon domaine de professionnel, et ça fait longtemps que je n'ai pas programmé, et comme beaucoup de choses ont changé, c'est dur de se remettre dans le bain.
Merci pour tout.
Pas de quoi.
Mais en tout état de cause, pensez toujours à un détail que j'ai évoqué précédemment : l'exécution chronologique du code. C'est une clé absolument essentielle et c'est de cette manière qu'on établit l'ordre et les endroits ou on met telle ou telle partie de code.
Je suis conscient qu'il faille avoir une bonne analyse des codes, mais comme vous dites, il faut bien en connaître la chronologie !
C'est peut-être une clé, je n'en doute pas, mais je ne suis plus trop habitué à ça, trop d'inertie de ma part sans doute !
De toute manière, vous m'avez grandement aidé et je vous en remercie encore !
Mais je ne penche plus autant qu'avant sur la programmation.
Avant, j'y restais jusque 2 ou 3h du matin, mais c'était du Visual-Basic, ça m'intéressait beaucoup, et il fallait que je termine mes 3 logiciels, ça m'a pris plusieurs années, mais j'y suis arrivé !
Maintenant, je n'ai plus cette passion d'avant, mais je m'intéresse beaucoup aux nouveautés PHP, c'est pas évident !