簡體   English   中英

我的php驗證和電子郵件表格直接進入我的確認頁面

[英]My php validation and form to email go straight to my confirmation page

我有一個表格,PHP驗證,並發送到電子郵件。 我的PHP驗證工作正常。 我的發送至電子郵件工作正常。 當我將它們一起使用時,它們可以正常工作,直到我添加標題(“ Location: http : //google.com ”); 出口(); 我之所以使用google.com,是因為我尚未完成確認頁面。 當我將此行添加到php時,即當我轉到自己的網站時,它直接進入google.com。 有人可以幫忙嗎? 我一直在嘗試連續2天找出所有這些驗證和表格以電子郵件形式發送,但我無法解決。 我對php一無所知。 我的代碼如下。

我的PHP:

<?php

// define variables and set to empty values
$nameErr = $emailErr = $email2Err = $commentsErr = "";
$name = $email = $email2 = $comments = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["name"])) {
        $nameErr = "Name is required";
    } else {
        $name = test_input($_POST["name"]);
        // check if name only contains letters and whitespace
        if ( ! preg_match("/^[a-zA-Z ]*$/", $name)) {
            $nameErr = "Only letters and white space allowed"; 
        }
    }
    if (empty($_POST["email"])) {
        $emailErr = "Email is required";
    } else {
        $email = test_input($_POST["email"]);
        // check if e-mail address syntax is valid
        if ( ! preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email)) {
            $emailErr = "Invalid email format"; 
        }
    }
    if (empty($_POST["email2"])) {
        $email2Err = "It is required to re-enter your email.";
    } else {
        $email2 = test_input($_POST["email2"]);
        // check if e-mail address syntax is valid
        if ( ! preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email2)) {
            $email2Err = "Invalid email format"; 
        }
    }
    if (empty($_POST["comments"])) {
        $commentsErr = "A comment is required.";
    } else {
        $comments = test_input($_POST["comments"]);
        if (preg_match("#^[a-zA-Z0-9 \.,\?_/'!£\$%&*()+=\r\n-]+$#", $comments)) {
            // Everything ok. Do nothing and continue 
        } else { 
            $commentsErr = "Message is not in correct format.<br>You can use a-z A-Z 0-9 . , ? _                   / ' ! £ $ % * () + = - Only";  
        }
    }
    if (isset($_POST['service'])) {
        foreach ($_POST['service'] as $selectedService)
            $selected[$selectedService] = "checked";
    }
}
if (empty($errors)) { 
    $from = "From: Our Site!"; 
    $to = "jasonriseden@yahoo.com"; 
    $subject = "Mr Green Website | Comment from " . $name . "";

    $message = "Message from " . $name . " 
      Email: " . $email . " 
      Comments: " . $comments . "";
    mail($to, $subject, $message, $from);
    header('Location: http://google.com');
    exit();
}
?>

請有人幫我。 我不知道怎么了。

好。 我做了你告訴我的巴爾瑪。 不知道我是否做對了。 它解決了一個問題,但又創建了另一個問題。

我從驗證並將表單數據發送到我的電子郵件的代碼開始。 現在,我只想添加標題(“位置: http : //google.com ”); 出口(); ....而且有效。 你能告訴我該怎么辦嗎? 我不知道php是什么,所以越具體越好。

這是PHP:

<?php

// define variables and set to empty values
$nameErr = $emailErr = $email2Err = $commentsErr = "";
$name = $email = $email2 = $comments = "";

if ($_SERVER["REQUEST_METHOD"] == "POST")
{



 if (empty($_POST["name"]))
     {$nameErr = "Name is required";}
   else
     {$name = test_input($_POST["name"]);
      // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z ]*$/",$name))
      {
      $nameErr = "Only letters and white space allowed"; 
      }
    }


   if (empty($_POST["email"]))
     {$emailErr = "Email is required";}
   else
     {$email = test_input($_POST["email"]);
     // check if e-mail address syntax is valid
    if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
      {
      $emailErr = "Invalid email format"; 
      }
    }

   if (empty($_POST["email2"]))
     {$email2Err = "It is required to re-enter your email.";}
   else
     {$email2 = test_input($_POST["email2"]);
     // check if e-mail address syntax is valid
    if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email2))
      {
      $email2Err = "Invalid email format"; 
      }
    }

    if (empty($_POST["comments"]))
     {$commentsErr = "A comment is required.";}
   else
     {$comments = test_input($_POST["comments"]);
      if (preg_match("#^[a-zA-Z0-9 \.,\?_/'!£\$%&*()+=\r\n-]+$#", $comments)) { 
        // Everything ok. Do nothing and continue 
    } else { 
        $commentsErr = "Message is not in correct format.<br>You can use a-z A-Z 0-9 . , ? _ / ' ! £ $ % * () + = - Only";  
      }
    }
     if (isset($_POST['service']))
    {
        foreach ($_POST['service'] as $selectedService)
            $selected[$selectedService] = "checked";
    }

}

function test_input($data)
{
     $data = trim($data);
     $data = stripslashes($data);
     $data = htmlspecialchars($data);
     return $data;
}

if (empty($errors)) { 
  $from = "From: Our Site!"; //Site name
  // Change this to your email address you want to form sent to
  $to = "jasonriseden@yahoo.com"; 
  $subject = "Mr Green Website | Comment from " . $name . "";

  $message = "Message from " . $name . " 
  Email: " . $email . " 
  Comments: " . $comments . "";
  mail($to,$subject,$message,$from);

  }
?>

問題是沒有$errors變量。 因此, if(empty($errors))始終為true,因此它進入了發送電子郵件和重定向的塊。 即使用戶尚未提交表單,也會發生這種情況-我假設此代碼是在您發布代碼后顯示注冊表單的同一腳本的一部分。

您需要進行兩項更改:

  1. 在所有驗證檢查之后,發送電子郵件和重定向的代碼應移至第一個if塊內。

  2. 而不是if(empty($error)) ,它應該檢查if($nameErr && $emailErr && $email2Err && $commentsErr) 或者,只要它設置其他錯誤消息變量之一,就應該更改驗證代碼以設置$error

我知道這不是您問題的直接答案,但請查看Exceptions 通過為每個驗證提供單獨的功能,並在出現問題時使它們拋出異常,您的代碼將更加整潔,並且錯誤彈出的空間更少。 如果您將所有驗證功能放在一個類中,則可獲得加分。

示例:(我將test_input()重命名為sanitize_input(),因為它就是這樣做的)

<?php

if ($_SERVER["REQUEST_METHOD"] == "POST")
{
    try
    {
        $name = getValidatedName();
        $email = getValidatedEmail();

        // send email with $name and $email
    }
    catch (Exception $e)
    {
        echo '<div class="error">' . $e->getMessage() . '</div>';
    }
}

function getValidatedName()
{
    if (empty($_POST["name"]))
        throw new Exception("Name is required");

    $name = sanitize_input($_POST["name"]);

    if (!preg_match("/^[a-zA-Z ]*$/", $name))
        throw new Exception("Only letters and white space allowed");

    return $name;
}

function getValidatedEmail()
{
    if (empty($_POST["email"]))
        throw new Exception("Email is required");

    $email = sanitize_input($_POST["email"]);

    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) // you don't have to reinvent the wheel ;)
        throw new Exception("Invalid email format");

    return $email;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM