Heim  >  Fragen und Antworten  >  Hauptteil

Fehlermeldungen werden nicht unter den entsprechenden Eingabefeldern angezeigt. Verwenden Sie HTML, PHP

So zeigen Sie sofort die entsprechende Fehlermeldung unter dem Eingabefeld an, wenn der Benutzer ungültige Daten eingibt. Wenn der Benutzer beispielsweise ungültige Daten in das Feld „Name“ eingibt, wird sofort eine Fehlermeldung unter dem Feld „Name“ angezeigt. Das Gleiche gilt für die Felder E-Mail und Nachricht. Ich verwende diesen nächsten HTML- und PHP-Code:

<form method="POST" action="send-email.php">
  
  <input type="text" name="name" id="name" placeholder="Name*" required>
  <div class="error"><?php echo $nameErr ?></div>

  <input type="email" name="email" id="email" placeholder="Email*" required>
  <div class="error"><?php echo $emailErr ?></div>

  <textarea name="message" id="message" placeholder="Your Message*" required></textarea>
  <div class="error"><?php echo $messErr ?></div>

  <button type="submit" name="submit" id="submit" class="button">Start</button>
  
</form>
<?php
require "vendor/autoload.php";

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

$nameSanitized = filter_var(trim($_POST['name']), FILTER_SANITIZE_STRING);
$emailSanitized = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
$messageSanitized = filter_var(trim($_POST['message']), FILTER_SANITIZE_STRING);
$subject = "new message ";

$valid = true;
$emailErr = "";
$nameErr = "";
$messErr = "";

if (!preg_match('/^[\p{Latin}\p{Cyrillic} ]*$/u', $nameSanitized)) {
    $nameErr = "Only Latin and Cyrillic letters and white space allowed in the name field.\n";
    $valid = false;
}

if (empty($nameSanitized) || empty($messageSanitized)) {
    $messErr = "Name and message are required.\n";
    $valid = false;
}

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

//only send if all validations passed:
if ($valid == true) {
    try {
        $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($emailSanitized, $nameSanitized);
        $mail->addAddress("myemail@gmail.com", "myemail");

        $mail->Subject = $subject;
        $mail->Body =  "Name: $nameSanitized\nEmail: $emailSanitized\n\n$messageSanitized";
        $mail->send();

        header("Location: sent.html");
    } catch (Exception $e) {
        echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
    }
} else {
 
    echo $emailErr;
    echo $nameErr;
    echo $messErr;

}
?>

Ich habe verschiedene Artikel ausprobiert.

P粉567112391P粉567112391370 Tage vor439

Antworte allen(1)Ich werde antworten

  • P粉391677921

    P粉3916779212023-09-16 00:20:53

    将 HTML 代码放入 else 块中

    } else { ?>
     
    <form method="POST" action="send-email.php">
      
      <input type="text" name="name" id="name" placeholder="Name*" required>
      <div class="error"><?php echo $nameErr ?></div>
    
      <input type="email" name="email" id="email" placeholder="Email*" required>
      <div class="error"><?php echo $emailErr ?></div>
    
      <textarea name="message" id="message" placeholder="Your Message*" required></textarea>
      <div class="error"><?php echo $messErr ?></div>
    
      <button type="submit" name="submit" id="submit" class="button">Start</button>
      
    </form>
    
    <?php }

    Antwort
    0
  • StornierenAntwort