亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Warum funktionieren diese Eingabevalidierungen nicht? (Kontaktieren Sie uns über PHP & HTML & SMTP Server & PHPmailer)
P粉613735289
P粉613735289 2023-09-06 21:34:49
0
1
628

Ich verwende PHP, HTML, SMTP-Server und PHPmailer, um ein Kontaktformular mit Benutzereingabevalidierung zu erstellen. Aber nachdem ich auf die Schaltfl?che ?Senden“ geklickt hatte, wurde mir eine Fehlermeldung angezeigt:

Ungültige Adresse: (Absender): Schwerwiegender Fehler: Nicht abgefangene PHPMailerPHPMailerException: Ungültige Adresse: (von): in C:xampphtdocsRESPONSIVE SITE3_2SupplierphpmailerphpmailersrcPHPMailer.php:1324 Stacktrace: #0 C:xampphtdocsRESPONSIVE SITE3_2send-email.php(74): PHPMailerPHPMailerPHPMailer->setFrom('', '') #1 {main} wirft C:xampphtdocsRESPONSIVE SITE3_2vendorphpmailerphpmailersrcPHPMailer.php Zeile 1324 ein

PHP-Code:

<?php

$name = $_POST["name"];
$email = $_POST["email"];
// $email = test_input($_POST["email"]);
$message = $_POST["message"];

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $emailErr = "Invalid email format";
} 

if (!preg_match("/^[a-zA-Z0-9_]+@[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+$/", $email)) {
    $emailErr = "Email should contain only letters, numbers, and underscores";
}

require "vendor/autoload.php";

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;

$mail = new PHPMailer(true);

$mail->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");
?>

HTML-Code

<form method="POST" action="send-email.php">
    <input type="text" name="name" id="name" placeholder="Name*">
    
    <input type="email" name="email" id="email" placeholder="Email*">
    <span class="error" style="color:red"><?php echo $emailErr;?></span>

    
    <textarea name="message" id="message" placeholder="Your Message*"></textarea>
    
    <button type="submit" name="submit" id="submit" class="button">Start</button>
</form>

Ich habe verschiedene Tutorials ausprobiert – ohne Erfolg. Ich brauche dieses Formular

  • Benutzereingaben validieren, nur das Einfügen von Zahlen und Buchstaben zulassen (Mailfelder)
  • Wenn die Daten ungültig sind, muss eine Fehlermeldung unter dem Eingabefeld erscheinen

Ich bin sehr neu in diesem Bereich, bitte erkl?ren Sie es in einer sehr einfachen Sprache :)

P粉613735289
P粉613735289

Antworte allen(1)
P粉924915787

診斷

如果任一驗證 if 語句為 true,則將設(shè)置一個字符串變量 $emailErr。

然后代碼再次退出 if 塊,腳本繼續(xù)其愉快的方式并嘗試發(fā)送電子郵件。代碼中沒有任何邏輯可以阻止這種情況。

最后,$emailErr 永遠(yuǎn)不會被使用,因為代碼將用戶重定向到另一個不能涉及該變量的 HTML 頁面。

解決方案

如果任何驗證失敗,您需要一些額外的邏輯來告訴代碼跳過電子郵件發(fā)送部分。巧妙地實現(xiàn)此目的的一種方法非常簡單,即使用“標(biāo)志”變量。

例如:

<?php
require "vendor/autoload.php";

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;

$name = $_POST["name"];
$email = $_POST["email"];
// $email = test_input($_POST["email"]);
$message = $_POST["message"];
$valid = true;
$emailErr = "";

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $emailErr = "Invalid email format";
    $valid = false;
} 

if (!preg_match("/^[a-zA-Z0-9_]+@[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+$/", $email)) {
    $emailErr = "Email should contain only letters, numbers, and underscores";
    $valid = false;
}

//only send if all validations passed:
if ($valid == true)
{
  $mail = new PHPMailer(true);

  $mail->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;
}

附注順便說一句,您的正則表達(dá)式限制太多 - 請參閱 允許使用哪些字符在電子郵件地址中?。由于您已經(jīng)在使用 FILTER_VALIDATE_EMAIL,因此在任何情況下您都不需要它。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage