国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Mengapa pengesahan input ini tidak berfungsi? (Hubungi kami melalui PHP & HTML & SMTP Server & PHPmailer)
P粉613735289
P粉613735289 2023-09-06 21:34:49
0
1
634

Saya menggunakan PHP, HTML, pelayan SMTP dan PHPmailer untuk membuat borang hubungi kami dengan pengesahan input pengguna. Tetapi selepas menekan butang "Hantar", ia memberi saya ralat:

Alamat tidak sah: (Penghantar): Ralat maut: PHPMailerPHPMailerException tidak ditangkap: Alamat tidak sah: (dari): dalam C:xampphtdocsRESPONSIVE SITE3_2SupplierphpmailerphpmailersrcPHPMailer.php:1324 Jejak tindanan: #0 C:xampphtdocsTAPAK RESPONSIF3_2hantar-e-mel.php(74): PHPMailerPHPMailerPHPMailer->setFrom('', '') #1 {main} lontaran dalam C:xampphtdocsTAPAK RESPONSIF3_2vendorphpmailerphpmailersrcPHPMailer.php baris 1324

Kod PHP:

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

Kod HTML

<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>

Saya mencuba tutorial yang berbeza - tidak berjaya. Saya perlukan borang ini

  • Sahkan input pengguna, hanya benarkan nombor dan huruf dimasukkan (medan mel)
  • Jika data tidak sah, mesej ralat mesti muncul di bawah medan input

Saya sangat baru dalam hal ini, sila jelaskan dalam bahasa yang sangat mudah :)

P粉613735289
P粉613735289

membalas semua(1)
P粉924915787

Diagnosis

Jika sama ada pengesahan if 語句為 true,則將設(shè)置一個(gè)字符串變量 $emailErr.

Kemudian kod itu keluar dari blok if sekali lagi dan skrip meneruskan dengan riangnya dan cuba menghantar e-mel. Tiada logik dalam kod untuk menghalang ini.

Akhir sekali, $emailErr tidak pernah digunakan kerana kod tersebut mengubah hala pengguna ke halaman HTML lain yang tidak boleh melibatkan pembolehubah itu.

Penyelesaian

Jika sebarang pengesahan gagal, anda memerlukan beberapa logik tambahan untuk memberitahu kod supaya melangkau bahagian penghantaran e-mel. Cara yang sangat mudah untuk melakukan ini dengan bijak ialah menggunakan pembolehubah "bendera".

Contohnya:

<?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;
}

P.S. BTW, regex anda terlalu ketat - lihat Apakah aksara yang dibenarkan dalam alamat e-mel? . Memandangkan anda sudah menggunakan FILTER_VALIDATE_EMAIL, anda tidak memerlukannya dalam apa jua keadaan.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan