簡體   English   中英

無法使用基本的PHP和Bootstrap提交表單,驗證有效,但沒有發布

[英]Unable to get form to submit with basic PHP and Bootstrap, validation working but no posting

我敢肯定這已經被問過很多次了,但是作為一個業余愛好者,我無法獲得其他答案來解決我的問題。

這是我包含在HTML頁面上的PHP表單,其中已刪除電子郵件

<?php
$nameErr = $emailErr = $phoneErr = $messageErr = "";
$name = $email = $phone = $message = "";

$to = "email@gmail.com";
$from = "email@site.com";

$headers = "From: $email \r\n";

$subject = "New submission";
$body = "New Loan Request: \n $message";

mail(to,from,subject,headers,body)

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["name"])) {
    $nameErr = "Name is required";
  } else {
    $name = test_input($_POST["name"]);
  }

  if (empty($_POST["email"])) {
    $emailErr = "Email is required";
  } else {
    $email = test_input($_POST["email"]);
  }

  if (empty($_POST["phone"])) {
    $phoneErr = "";
  } else {
    $phone = test_input($_POST["website"]);
  }

  if (empty($_POST["message"])) {
    $messageErr = "";
  } else {
    $message = test_input($_POST["message"]);
  }

}

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = test_input($_POST["name"]);
  $email = test_input($_POST["email"]);
  $website = test_input($_POST["phone"]);
  $comment = test_input($_POST["message"]);
}

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

表單的HTML ...驗證工作正常,但是提交后或提交到我正在使用的電子郵件地址后,我什么都無法張貼。

                  <form name="sentMessage" id="contactForm" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
                      <div class="row">
                          <div class="col-md-6">
                              <div class="form-group">
                                  <input type="text" class="form-control" placeholder="Your Name *" id="name" required data-validation-required-message="Please enter your name.">
                                  <p class="help-block text-danger"></p>
                              </div>
                              <div class="form-group">
                                  <input type="email" class="form-control" placeholder="Your Email *" id="email" required data-validation-required-message="Please enter your email address.">
                                  <p class="help-block text-danger"></p>
                              </div>
                              <div class="form-group">
                                  <input type="tel" class="form-control" placeholder="Your Phone *" id="phone" required data-validation-required-message="Please enter your phone number.">
                                  <p class="help-block text-danger"></p>
                              </div>
                          </div>
                          <div class="col-md-6">
                              <div class="form-group">
                                  <textarea class="form-control" placeholder="Your Scenario *" id="message" required data-validation-required-message="Please enter a message."></textarea>
                                  <p class="help-block text-danger"></p>
                              </div>
                          </div>
                          <div class="clearfix"></div>
                          <div class="col-lg-12 text-center">
                              <div id="success"></div>
                              <button type="submit" class="btn btn-primary btn-xl" value="submit" name="submit" id="submit">Send Message</button>
                          </div>
                      </div>
                  </form>

好像您有語法錯誤。

就在這兒

 mail(to,from,subject,headers,body)

應該

 mail(to,from,subject,headers,body);

缺少分號。

我將忽略,您的郵件函數調用變量均不正確...提示...提示...它們都缺少$ ....因此,是的,每個變量也將是語法錯誤。

嗯...打開錯誤報告可能很有幫助

 <?php
     ini_set('display_errors', 1);
     error_reporting(-1);

如果在發送電子郵件之前完成驗證,您還將發現驗證效果最好。 就目前而言,大多數variables (如果我可以寬松地使用該術語)將包含任何內容。

和這個

  $name = $email = $phone = $message = "";

有點怪我

更新在這里,我用自己的方式清理了一些東西。

<?php
    if( isset( $_POST['submit'] ) ){

        $errors = [];
        $input = [];

        foreach( $_POST as $key => $value ){
            $value =  htmlspecialchars( stripslashes( trim($value) ) );

             switch( $key ){
                case 'submit': 
                    continue;  //ignore
                break; //break is not really needed here, but whatever ...
                // case 'email':  validate email etc.
                // break;
                default:
                    if( empty( $value ) ){
                        $errors[$key] = ucfirst( $key ).' is required.';
                    }else{
                        $input[$key] = $value;
                    }
                break; //break is not really needed here, but whatever ...
             } //end switch                     
        }//end foreach

        $to = "email@gmail.com";

        $headers = "From: {$input['email']} \r\n";
        $subject = "New submission";
        $body = "New Loan Request: \n {$message}";  //message is undefined

        if( empty( $erros ) ){
            mail($to,$input['from'],$subject,$headers,$body);
        }else{
            //do something with $errors
        }

    } //end if submit

    //?>  

除非文件具有HTML和PHP(我從來沒有這樣做),否則我永遠不會使用結尾的PHP標簽,無論如何關閉標簽都是可選的。 保留它們可能會導致意外的輸出,例如在結束標記之后返回一行,這在進行文件下載時可能會很煩人。

但是,那只是我,我是如何做到的。 別人可能會告訴你一些不同的東西。

我舉了這個例子,只是為了說明使用數組對這些東西有多好。 因此,如果您想添加“說”地址字段,請稍后考慮。 streetzipstatecountycountry或您所擁有的。

如果您以自動化程度較低的方式執行這些操作,那么您的代碼將會越來越多,因為您必須為每個字段添加很多內容。 在使用數據之前,您將為每行添加6行代碼。 使用數組時,如果有特殊要求,只需將其添加到switch語句中即可。

我懶得一直都在添加所有這些代碼....

暫無
暫無

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

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