当用户在PHP中提交消息时,如何在同一页面上添加错误或成功消息

时间:2017-02-17 11:56:08

标签: php forms

我想知道如何在用户提交消息时在同一页面上添加错误或成功消息,并且所有字段都正确无误。
PS:我正在使用localhost并且对PHP知之甚少,所以请像我一样解释5.谢谢

 <?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&#34; sendmail.ini&#34;和&#34; php.ini&#34;文件,以测试我的本地服务器上的电子邮件接收,但不断收到此错误:Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing in

什么&#39; custom "From:"?

2 个答案:

答案 0 :(得分:0)

您需要以这种方式向表单添加操作,方法并正确提交..尝试此

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

答案 1 :(得分:0)

在我进一步解释之前,我必须指出你没有在表单中定义或指定action属性。你的PHP代码以书面形式无法正常工作,首先你必须添加动作和方法属性来形成这样的元素

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