2015-03-10 6 views
0

Прошу прощения за новый вопрос, но я действительно не могу понять, как это сделать. Поэтому сначала у меня есть контактная форма, которая находится в модальном окне. Серверная сторона контактной формы (PHP-сторона) находится в другом файле contact.php. В этом файле у меня есть некоторые проверки для полей. Я хочу, когда есть пустое поле или неправильный ввод, чтобы показать сообщение об ошибке в форме. Прямо сейчас загружается contact.php, и там есть ошибки. Это часть для проверки от contact.phpОтображение сообщений об ошибках в другом файле

function died($error) { 
    echo "We are very sorry, but there were error(s) found with the form you submitted. "; 
    echo "These errors appear below.<br /><br />"; 
    echo $error."<br /><br />"; 
    echo "Please go back and fix these errors.<br /><br />"; 
    die(); 
} 
// validation expected data exists 
if(!isset($_POST['firstname']) || 
    !isset($_POST['lastname']) || 
    !isset($_POST['email']) || 
    !isset($_POST['phone']) || 
    !isset($_POST['description'])) { 
    died('We are sorry, but there appears to be a problem with the form you submitted.');  
} 
$firstname = $_POST['firstname']; // required 
$lastname = $_POST['lastname']; // required 
$email = $_POST['email']; // required 
$phone = $_POST['phone']; // not required 
$description = $_POST['description']; // required 
$error_message = ""; 
$email_exp = '/^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/'; 
if(!preg_match($email_exp,$email)) { 
    $error_message .= 'The email address is not valid!<br />'; 
} 
$string_exp = "/^[a-zA-Z\p{Cyrillic}0-9\s\-]+$/u"; 
if(!preg_match($string_exp,$firstname)) { 
    $error_message .= 'The name is not valid.<br />'; 
} 
if(!preg_match($string_exp,$lastname)) { 
    $error_message .= 'The last name is not valid.<br />'; 
} 
if(strlen($description) < 2) { 
    $error_message .= 'The field for description is not valid.<br />'; 
} 
if(strlen($error_message) > 0) { 
    died($error_message); 
} 
... 

и форма HTML ниже

<div class="send-icon" data-toggle="modal" data-target="#contact-form"> 
     <i class="fa fa-paper-plane"></i> 
    </div> 
    <p class="light-text">Contact Us</p> 

    <!-- Contact Form Modal --> 
    <div class="modal fade contact-form" id="contact-form" tabindex="-1" role="dialog" aria-labelledby="contact-form" aria-hidden="true"> 
     <div class="modal-dialog modal-lg"> 
      <div class="modal-content"> 
       <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
        <span aria-hidden="true">×</span> 
       </button> 
       <div class="modal-body">  
    <!-- ***** Contact form ***** --> 
    <form class="form" name="contactform" action="contact/contact.php" method="post"> 
    <div class="row"> 
    <div class="form-group col-md-6"> 
     <input type="text" class="form-control" id="firstname" name="firstname" placeholder="firstname"> 
    </div> 
    <div class="form-group col-md-6"> 
     <input type="text" class="form-control" id="lastname" name="lastname" placeholder="lastname"> 
    </div> 
    <div class="form-group col-md-6"> 
     <input type="email" class="form-control" id="email" name="email" placeholder="Email" > 
    </div> 
    <div class="form-group col-md-6"> 
     <input type="text" class="form-control" id="phone" name="phone" placeholder="Phone" > 
    </div>    
    <div class="form-group col-md-12 mab-none"> 
     <textarea rows="6" class="form-control" id="description" name="description" placeholder="description" ></textarea> 
    </div> 
    <div class="form-group col-md-12"> 
     <button class="button bold-text main-bg" type="submit" ><i class="fa fa-paper-plane"></i></button> 
    </div> 
</div> 
</form> 

Так снова простите мой вопрос, если это «слишком новичку» для вас, ребята, но я действительно нужна помощь здесь.

+0

Если PHP-файл вызывается с javascript, нам нужно увидеть код этого файла javascript , – Wr1t3r

+0

Нет .. это просто. Действие формы - это действие 'action =" contact/contact.php ". Нет javascript. – Select

+0

Для этого лучше всего использовать Ajax. Там много скриптов. –

ответ

0

Предполагая, что ваш код совершенно так же, как this tutorial (как вы Сайед в комментариях):

Что у вас есть:

Так в настоящее время у вас есть форма в index.php:

<!-- HTML stuff before --> 

<form class="form" name="contactform" action="contact.php" method="post"> 
    <!-- Input tags --> 
</form> 

<!-- HTML stuff after --> 

И форма обрабатывается в contact.php:

if(isset($_POST['email'])) { 
    function died($error) { 
     echo 'You have an error blahblah.'; 
     echo $error; 
     die(); 
    } 

    /* 
     Tests to validate the values 
     Puts some strings in $error_message if not valide 
    */ 

    if (strlen($error_message) > 0) { 
     died($error_message); 
     // If there is an error, call the function that displays the message and stops everything 
    } 

    // Send email 
} 

Что я предлагаю:

Лучше всего иметь как HTML и PHP в одной и той же странице (как если бы он был в том же файле). Используйте include() в начале index.php:

<?php 
    include('contact.php'); 
?> 

<!-- HTML stuff before --> 

<?php 
    if (strlen($error_message) > 0) { 
     // Now we can display our error message here, with the HTML. 
     echo '<div class="error">There was an error: '.$error_message.'</div>'; 
    } 
?> 

<form class="form" name="contactform" action="index.php" method="post"> 
    <!-- See the "action" value has changed, as we won't go to a new "contact" page but stay here --> 
</form> 

<!-- HTML stuff after --> 

Затем contact.php файл должен быть обновлен немного.

if(isset($_POST['email'])) { 
// Notice here that the code won't be executed if the form has not been submitted: so it is not a problem to include the code before the HTML. 

    // We don't used the died() function anymore: delete it. 

    /* 
     That does not change: 
     Tests to validate the values 
     Puts some strings in $error_message if not valide 
    */ 

    if (strlen($error_message) == 0) { 
     // Send the mail only if there is no error. 

     // Send email 
    } 
} 

Конечно, это не идеальный контакт страницы (не будет хранятся ошибки в simpled $error_message строки, например), но это хорошее начало, чтобы начать с PHP и HTML и понять, как это работает. Я рекомендую вам обновить и адаптировать этот код, как только вы поняли этот процесс.

* Редактировать: Я видел ваш комментарий о модальном. Этот код не будет открывать модальный, когда страница будет перезагружена, вам все равно придется нажать кнопку.
Если у вас strlen($error_message) > 0, вам нужно заставить стиль вашего модального CSS показать его (style="display:block", если необходимо).
Или откройте его с помощью JS (предположим, у вас есть функция .modal() или .open() где-нибудь, чтобы заставить его открыть.). (Не мое любимое решение, как если бы оно было немного медленным для загрузки, пользователь увидит страницу без модальной формы до ее открытия.)

+0

Спасибо большое за ваше время и объяснение. Это решение работает, но на моей странице мало чего не устраивает. 1. Это проблема, которая не может открыть модальную форму, или если она откроется, она будет после того, как пользователь увидит страницу (как вы упомянули). 2. Это немного сломал мой CSS-стиль (я не знаю почему). Наверное, сейчас я сделаю это с помощью [Javascript] (http://www.javascript-coder.com/html-form/javascript-form-validation.phtml). – Select

+0

Я буду принимать ваш ответ, так как он работает и полезен. Большое спасибо. – Select

+0

Для модального вам нужно посмотреть, какой стиль вы должны наложить на 'div', чтобы он оставался видимым. Или используйте JS, чтобы открыть его (проще сделать с модальностями bootstrap, но не так хорошо для пользовательского опыта, я думаю). http://stackoverflow.com/questions/11868599/how-to-get-twitter-bootstrap-modals-to-stay-open-on-form-submit –

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