J'utilisePHP, HTML, serveur SMTP et PHPmailerpour créer un formulaire de contact avec validation des entrées utilisateur. Mais après avoir appuyé sur le bouton "Soumettre", cela m'a donné une erreur :
Adresse invalide : (Expéditeur) : Erreur fatale : PHPMailerPHPMailerException non intercepté : adresse invalide : (de ): dans C:xampphtdocsRESPONSIVE SITE3_2FournisseurphpmailerphpmailersrcPHPMailer.php:1324 Trace de la pile: #0 C:xampphtdocsRESPONSIVE SITE3_2send-email.php(74): PHPMailerPHPMailerPHPMailer->setFrom('', '') #1 {main} lance C:xampphtdocsRESPONSIVE SITE3_2vendorphpmailerphpmailersrcPHPMailer.php ligne 1324
Code PHP:
SMTPDebug = SMTP::DEBUG_SERVER; $mail->isSMTP(); $mail->SMTPAuth = true; $mail->Host = "smtp.gmail.com"; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mail->Port = 587; require_once 'config.php'; $mail->Username = SMTP_USERNAME; $mail->Password = SMTP_PASSWORD; $mail->setFrom($email, $name); $mail->addAddress("myemail@gmail.com", "Ads"); $mail->Subject = $subject; $mail->Body = "Name: $name\nEmail: $email\n\n$message"; $mail->send(); header("Location: sent.html"); ?>
Code HTML
J'ai essayé différents tutoriels - sans succès. J'ai besoin de ce formulaire
Je suis très nouveau dans ce domaine, veuillez l'expliquer dans un langage très simple :)
Diagnostic
Si soit vérification
if
语句为 true,则将设置一个字符串变量$emailErr
.Ensuite, le code sort à nouveau du bloc
if
et le script continue son bon chemin et tente d'envoyer l'e-mail. Il n'y a aucune logique dans le code pour empêcher cela.Enfin,
$emailErr
n'est jamais utilisé car le code redirige l'utilisateur vers une autre page HTML qui ne peut pas impliquer cette variable.Solution
Si une validation échoue, vous avez besoin d'une logique supplémentaire pour indiquer au code d'ignorer la partie d'envoi d'e-mail. Un moyen très simple de procéder intelligemment consiste à utiliser une variable « flag ».
Par exemple :
P.S. BTW, votre regex est trop restrictive - voirQuels caractères sont autorisés dans les adresses e-mail ?. Puisque vous utilisez déjà
FILTER_VALIDATE_EMAIL
, vous n’en avez en aucun cas besoin.