Pourquoi ces validations d'entrée ne fonctionnent-elles pas ? (Contactez-nous via PHP & HTML & SMTP Server & PHPmailer)
Robert De Niro
Robert De Niro 2023-09-06 21:34:49
0
1
405

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

  • Valider la saisie de l'utilisateur, autoriser uniquement l'insertion de chiffres et de lettres (champs de courrier)
  • Si les données sont invalides, un message d'erreur doit apparaître sous le champ de saisie

Je suis très nouveau dans ce domaine, veuillez l'expliquer dans un langage très simple :)

Robert De Niro
Robert De Niro

répondre à tous (1)
P粉924915787

Diagnostic

Si soit vérificationif语句为 true,则将设置一个字符串变量$emailErr.

Ensuite, le code sort à nouveau du blocifet 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,$emailErrn'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 :

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"); } else { echo $emailErr; }

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.

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!