簡體   English   中英

當用戶使用PHP提交消息時,如何在同一頁面上添加錯誤或成功消息

[英]How to add a error or sucess message on the same page, when the user submits a message in PHP

我想知道如何在用戶提交消息且所有字段正確的情況下在同一頁面上添加錯誤或成功消息。

 <?php

    $errorMSG = "";

    // NAME
    if (empty($_POST["name"])) {
        $errorMSG = "Por favor preencha o seu nome ";
    } else {
        $name = $_POST["name"];
    }

    // EMAIL
    if (empty($_POST["email"])) {
        $errorMSG .= "Por favor preencha com o seu email ";
    } else {
        $email = $_POST["email"];
    }

    // MSG SUBJECT
    if (empty($_POST["msg_subject"])) {
        $errorMSG .= "Por favor escreva um assunto da mensagem";
    } else {
        $msg_subject = $_POST["msg_subject"];
    }


    // MESSAGE
    if (empty($_POST["message"])) {
        $errorMSG .= "Por favor escreva uma mensagem ";
    } else {
        $message = $_POST["message"];
    }

    //email here
    $EmailTo = "email@hotmail.com";
    $Subject = "New Message Received";

    //email body text
    $Body = "";
    $Body .= "Nome: ";
    $Body .= $name;
    $Body .= "\n";
    $Body .= "Email: ";
    $Body .= $email;
    $Body .= "\n";
    $Body .= "Assunto: ";
    $Body .= $msg_subject;
    $Body .= "\n";
    $Body .= "Mensagem: ";
    $Body .= $message;
    $Body .= "\n";

    // send email
    $success = mail($EmailTo, $Subject, $Body, "De:".$email);

    //success message
    if ($success && $errorMSG == ""){
       echo "sucesso";
    }else{
        if($errorMSG == ""){
            echo "Algo correu mal :(";
        } else {
            echo $errorMSG;
        }
    }

    ?>


    <!DOCTYPE html>
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Title</title>

    <!-- css -->
    <link href="css/contactform.css" rel="stylesheet" />
    <link href="css/bootstrap.min.css" rel="stylesheet" />
    <link href="css/style.css" rel="stylesheet" />
    </head>
    <body>


                            <!-- Start Contact Form -->
    <form role="form" id="contactForm" class="contact-form" data-toggle="validator" class="shake">
      <div class="form-group">
        <div class="controls">
          <input type="text" id="name" class="form-control" placeholder="Nome" required data-error="Por favor escreva o seu nome">
          <div class="help-block with-errors"></div>
        </div>
      </div>
      <div class="form-group">
        <div class="controls">
          <input type="email" class="email form-control" id="email" placeholder="Email" required data-error="Por favor escreva o seu email">
          <div class="help-block with-errors"></div>
        </div>
      </div>
      <div class="form-group">
        <div class="controls">
          <input type="text" id="msg_subject" class="form-control" placeholder="Assunto" required data-error="Por favor escreva o assunto da mensagem">
          <div class="help-block with-errors"></div>
        </div>
      </div>
      <div class="form-group">
        <div class="controls">
          <textarea id="message" rows="7" placeholder="Mensagem" class="form-control" required data-error="Escreva a sua mensagem"></textarea>
          <div class="help-block with-errors"></div>
        </div>  
      </div>

      <button type="submit" id="submit" class="btn btn-effect"><i class="fa fa-check"></i>Enviar</button>
      <div id="msgSubmit" class="h3 text-center hidden"></div> 
      <div class="clearfix"></div>   

    </form>     

另外,我配置了sendmail的“ sendmail.ini”和“ php.ini”文件,以便測試本地服務器上的電子郵件接收,但始終收到此錯誤: Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing in

什么是custom "From:"?

您需要以這種方式,方法向表單中添加操作,然后正確提交。

<!DOCTYPE HTML>  
<html>
<head>
<style>
.error {color: #FF0000;}
 </style>
 </head>
 <body>  

 <?php
 // define variables and set to empty values
  $nameErr = $emailErr =  "";
 $name = $email =  "";

  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 is well-formed
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      $emailErr = "Invalid email format";
     }
    }


     }

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


    <p><span class="error">* required field.</span></p>
    <form method="post" action="<?php echo      htmlspecialchars($_SERVER["PHP_SELF"]);?>">  
   Name: <input type="text" name="name" value="<?php echo $name;?>">
   <span class="error">* <?php echo $nameErr;?></span>
   <br><br>
   E-mail: <input type="text" name="email" value="<?php echo $email;?>">
    <span class="error">* <?php echo $emailErr;?></span>
     <br><br>

    <input type="submit" name="submit" value="Submit">  
    </form>

    <?php
    echo "<h2>Your Input:</h2>";
     echo $name;
     echo "<br>";
     echo $email;
     echo "<br>";

   ?>

    </body>
    </html>

在我進一步解釋之前,我必須指出,您沒有在表單中定義或指定動作屬性。 您以書面形式編寫的php代碼無法正常工作,首先,您必須將action和method屬性添加到這樣的表單元素中

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"   method="post">
  //input element here
</form>

action屬性指向腳本的位置(在您的情況下為PHP文件),該腳本將處理用戶提交的表單數據,但是在您的情況下,您希望php本身處理表單數據,即$ _SERVER [“ PHP_SELF”]包含當前的php文件位置。 出於安全原因,php超級全局變量“ $ _SERVER”被包裝在“ htmlspecialchars”函數內,該函數轉義了空格字符。 其次,因為您將表單提交到相同的php腳本,所以您必須檢查表單是否已提交,而不是當用戶使用$ _SERVER [“ REQUEST_METHOD”]訪問php頁面時。 如果REQUEST_METHOD是POST,則表單已提交,例如:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  //put your validation code here
}

更清楚地說,這就是您的php代碼的樣子:

<?php
  //global variables here
  $errorMSG = "";
  $name = "";
  $email = "";
  $msg_subject = "";
  $message = "";
  $EmailTo = "";
  $Subject = "";
  $Body = "";

  //check if user submitted a form
  if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // NAME
    if (empty($_POST["name"])) {
      $errorMSG = "Por favor preencha o seu nome ";
    }
    else {
      $name = $_POST["name"];
    }

    // EMAIL
    if (empty($_POST["email"])) {
      $errorMSG .= "Por favor preencha com o seu email ";
    } 
    else {
      $email = $_POST["email"];
    }

    // MSG SUBJECT
    if (empty($_POST["msg_subject"])) {
      $errorMSG .= "Por favor escreva um assunto da mensagem";
    }
    else {
      $msg_subject = $_POST["msg_subject"];
    }

    // MESSAGE
    if (empty($_POST["message"])) {
      $errorMSG .= "Por favor escreva uma mensagem ";
    } 
    else {
      $message = $_POST["message"];
    }

    //email here
    $EmailTo = "email@hotmail.com";
    $Subject = "New Message Received";

    //email body text
    $Body = "";
    $Body .= "Nome: ";
    $Body .= $name;
    $Body .= "\n";
    $Body .= "Email: ";
    $Body .= $email;
    $Body .= "\n";
    $Body .= "Assunto: ";
    $Body .= $msg_subject;
    $Body .= "\n";
    $Body .= "Mensagem: ";
    $Body .= $message;
    $Body .= "\n";

    // send email
    $success = mail($EmailTo, $Subject, $Body, "De:".$email);

    //success message
    if ($success && $errorMSG == ""){
      echo "sucesso";
    }
    else{
      if($errorMSG == ""){
        echo "Algo correu mal :(";
      }
      else {
        echo $errorMSG;
      }
    }
  }
?>

我注意到您所有的input元素都沒有name屬性,這是您的php腳本用來訪問用戶提交的表單數據的名稱,這是正確的方法:

<input type="text" name="username" placeholder="Enter your name"/>

您還需要注意的另一件事是,php代碼在html和JavaScript出現之前就已執行。

不要將此用於生產php代碼,有關如何正確執行此操作的更多信息,請訪問此網站https://www.w3schools.com/php/

暫無
暫無

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

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