2016-10-15 10 views
1

Я строю форму PHP. Этот скрипт циклически проходит через поля формы и сообщает мне, являются ли они пустыми или нет. Когда я отправляю форму, она перенаправляет меня из index.html на contact.php и отображает пустую страницу. Я хотел бы отобразить $ errmsg над формой в index.html. Что я делаю не так? Вот где я извлекая информацию из: http://www.w3schools.com/php/php_form_required.aspКак я могу отредактировать это поле «Требуемое поле» на моей странице в формате HTML?

PHP:

<?php 
$fields = array('name', 'email', 'telephone'); 
$error = false; 
foreach($fields AS $fieldname) { 
     if(!isset($_POST[$fieldname]) || empty($_POST[$fieldname])) { 
       $errmsg = 'Please Fill All Fields. '.$fieldname.' is empty!<br />'; 
       $error = true; 
    } 
} 

HTML:

<form class="form-horizontal" role="form" method="post" action="contact.php"> 
    <div class="form-group"> 
      <span class="error">* <?php echo $errmsg;?></span> 

Вот вся моя contact.php в случае вопрос дальше.

<?php 
$fields = array('name', 'email', 'telephone'); 
$error = false; 
foreach($fields AS $fieldname) { 
     if(!isset($_POST[$fieldname]) || empty($_POST[$fieldname])) { 
       $errmsg = 'Please Fill All Fields. '.$fieldname.' is empty!<br />'; 
       $error = true; 
     } 
} 

if(!$error) { 
     if (isset($_POST["submit"])) { 
       $name = $_POST['name']; 
       $email = $_POST['email']; 
       $telephone = $_POST['telephone']; 
       $message = $_POST['message']; 
       $headers = "From: [email protected]\r\n"; 
       $to = '[email protected]'; 
       $subject = 'New Lead'; 
       $body = "From: $name\n E-Mail: $email\n Phone: $telephone\n Message: $message"; 
     mail('[email protected]', $subject, $body, $headers); 
     header("Location: http://www.example.com/messagesent.html"); 
     die(); 
     } 
} 
?> 

Редактировать: Полная HTML-форма. Он вложен в Bootstrap жаль спагетти

<!-- Contact Form --> 
<form class="form-horizontal" role="form" method="post" action="contact.php"> 
     <div class="form-group"> 
       <span class="error">* <?php echo $errmsg;?></span> 
       <label for="name" class="col-sm-2 control-label">Name</label> 
       <div class="col-sm-10"> 
         <input type="text" class="form-control" id="name" name="name" placeholder="First & Last Name"> 
       </div> 
     </div> 
     <div class="form-group"> 
       <label for="email" class="col-sm-2 control-label">Email</label> 
       <div class="col-sm-10"> 
         <input type="email" class="form-control" id="email" name="email" placeholder="[email protected]"> 
       </div> 
     </div> 
       <div class="form-group"> 
       <label for="telephone" class="col-sm-2 control-label">Phone</label> 
       <div class="col-sm-10"> 
         <input type="text" class="form-control" id="telephone" name="telephone" placeholder="250-555-555"> 
     </div> 
     </div> 
     <div class="form-group"> 
      <label for="message" class="col-sm-2 control-label">Message</label> 
      <div class="col-sm-10"> 
        <textarea class="form-control" rows="4" name="message"></textarea> 
      </div> 
    </div> 
    <div class="form-group"> 
      <div class="col-sm-10 col-sm-offset-2"> 
        <input id="submit" name="submit" type="submit" value="Send" class="btn btn-primary"> 
      </div> 
     </div> 
     </div> 
</form> 
<!-- End Contact Form --> 
+0

Можете ли вы предоставить весь HTML формы? – Reisclef

ответ

0
**Use Ajax Method**  

**index.html** 

    <!DOCTYPE html> 
    <html lang="en"> 
    <head> 
    <meta charset="utf-8"> 
    <title>using Ajax in jQuery</title> 
    <style type="text/css"> 
     label{ 
      display: block; 
      margin-bottom: 10px; 
     } 
    </style> 
    <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script> 
    <script type="text/javascript"> 
    $(document).ready(function(){ 
     $("form").submit(function(event){ 
      // Stop form from submitting normally 
      event.preventDefault(); 

      /* Serialize the submitted form control values to be sent to the web server with the request */ 
      var formValues = $(this).serialize(); 

      // Send the form data using post 
      $.post("contact.php", formValues, function(data){ 
       // Display the returned data in browser 
       $("#result").html(data); 
      }); 
     }); 
    }); 
    </script> 
    </head> 
    <body> 
     <form> 
      <label>Name: <input type="text" name="name"></label> 
      <input type="submit" value="Send"> 
     </form> 
     <div id="result"></div> 
    </body> 
    </html>    



contact.php 


<?php 
$fields = array('name'); 
$error = false; 
foreach($fields AS $fieldname) { 
     if(!isset($_POST['name']) || empty($_POST['name'])) { 
       $errmsg = 'Please Fill All Fields. '.$fieldname.' is empty!<br />'; 
       $error = true; 
     } 
} 

if($error==true){ 
    echo $errmsg; 
    die(); 
} 
else{ 
     if (isset($_POST["submit"])) { 
       $name = $_POST['name']; 
       $headers = "From: [email protected]\r\n"; 
       $to = '[email protected]'; 
       $subject = 'New Lead'; 
       $body = "From: $name\n E-Mail: $email\n Phone: $telephone\n Message: $message"; 
     mail('[email protected]', $subject, $body, $headers); 
     header("Location: http://www.example.com/messagesent.html"); 
     die(); 
     } 
} 
?> 
0

Вы не можете запустить PHP код в HTML-файл, если вы на самом деле не пройти через некоторые серьезные обручи, чтобы сделать это. Попробуйте вместо этого переименовать index.html в index.php.

+0

Просто попробовал, и он все еще перенаправляется на пустой contact.php –

+0

Есть ли способ эхо-сообщения на HTML-страницу без запуска PHP на странице? –

+0

Отлично, это первый шаг. Я пишу еще один более длинный ответ о том, почему это происходит. Имейте терпение;) – kajes

0
 <?php 
      $fields = array('name', 'email', 'telephone'); 
      $error = false; 
      foreach($fields AS $fieldname) { 
        if(!isset($_POST['fieldname']) || empty($_POST['fieldname'])) { 
          $errmsg = 'Please Fill All Fields. '.$fieldname.' is empty!<br />'; 
          $error = true; 
        } 
      } 

      if(!$error) { 
        if (isset($_POST["submit"])) { 
          $name = $_POST['name']; 
          $email = $_POST['email']; 
          $telephone = $_POST['telephone']; 
          $message = $_POST['message']; 
          $headers = "From: [email protected]\r\n"; 
          $to = '[email protected]'; 
          $subject = 'New Lead'; 
          $body = "From: $name\n E-Mail: $email\n Phone: $telephone\n Message: $message"; 
        mail('[email protected]', $subject, $body, $headers); 
        header("Location: http://www.example.com/messagesent.html"); 
        die(); 
        } 
      } 
      ?> 

    **Main Error:** 

    if(!isset($_POST[$fieldname]) || empty($_POST[$fieldname])) { 
      // your code 
} 
        above line should be 

    if(!isset($_POST['fieldname']) || empty($_POST['fieldname'])) { 
} 
+0

У меня был этот фрагмент кода, который первоначально печатал сообщение об ошибке на contact.php, и он работал нормально, мне просто нужно его эхо в html-файл, а не contact.php –

0

Итак, проблема здесь заключается в том, что действия атрибута посылает вам contact.php, который на самом деле не выводит любой HTML код (отсюда и пустую страницу). Ваш файл contact.php на самом деле является просто вспомогательным файлом для выполнения функций в форме, поэтому отправка пользователей в этот файл бессмысленна. Конечно, они должны оставаться в файле index.php.

Итак, сначала измените атрибут «действие» в теге формы, чтобы указать на index.php вместо contact.php.

Во-вторых, вам потребуется файл contact.php, чтобы ваши php-функции были фактически доступны для файла index.php.

В-третьих, поскольку мы направляем отправку на ту же страницу, вам нужно проверить, что форма была отправлена ​​или нет, перед загрузкой формы.

Таким образом, вы код должен искать то вроде этого:

<?php 

require 'contact.php'; // Path to your contact.php script 

?> 

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="utf-8"> 
     <title>Contact form</title> 
    </head> 
    <body> 
     <!-- Contact Form --> 
     <form class="form-horizontal" role="form" method="post" action="index.php"> 
       <?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { // I'm putting my if statement to check if form is submitted here, but you could put it anywhere you like as long as it's wrapping the error message in some way.?> 
        <div class="form-group"> 
         <span class="error">* <?php echo $errmsg;?></span> 
         <label for="name" class="col-sm-2 control-label">Name</label> 
         <div class="col-sm-10"> 
          <input type="text" class="form-control" id="name" name="name" placeholder="First & Last Name"> 
         </div> 
        </div> 
       <?php } ?> 
       <div class="form-group"> 
         <label for="email" class="col-sm-2 control-label">Email</label> 
         <div class="col-sm-10"> 
           <input type="email" class="form-control" id="email" name="email" placeholder="[email protected]"> 
         </div> 
       </div> 
         <div class="form-group"> 
         <label for="telephone" class="col-sm-2 control-label">Phone</label> 
         <div class="col-sm-10"> 
           <input type="text" class="form-control" id="telephone" name="telephone" placeholder="250-555-555"> 
       </div> 
       </div> 
       <div class="form-group"> 
        <label for="message" class="col-sm-2 control-label">Message</label> 
        <div class="col-sm-10"> 
          <textarea class="form-control" rows="4" name="message"></textarea> 
        </div> 
      </div> 
      <div class="form-group"> 
        <div class="col-sm-10 col-sm-offset-2"> 
          <input id="submit" name="submit" type="submit" value="Send" class="btn btn-primary"> 
        </div> 
       </div> 
       </div> 
     </form> 
     <!-- End Contact Form --> 
    </body> 
</html> 
+0

Это просто быстро закодировано, так что вы понимаете, что происходит и почему. Вы должны настроить свой код в соответствии с вашими потребностями. Надеюсь, поможет. – kajes

+0

Во всех моих поисковых системах я никогда не сталкивался с функцией require. Это только мой второй день с PHP. Спасибо огромное! –

+0

Рад, что это помогло. Однако делать подобные формы несколько неудобны. Для лучшего удобства использования вам, вероятно, потребуется задействовать какое-то решение Javascript, но если вы просто изучаете PHP, это хороший урок. – kajes

 Смежные вопросы

  • Нет связанных вопросов^_^