Вы можете поместить теги сценария между тегами php? - PullRequest
0 голосов
/ 28 марта 2009

Я пытаюсь заставить div исчезать с помощью jquery после того, как форма проверяет пользовательский ввод после нажатия кнопки submit. Я стараюсь не допустить исчезновения формы до ее проверки в случае, если пользователь не ввел правильную информацию.

Я хотел бы знать, могу ли я просто добавить теги сценария между моими тегами php, чтобы после завершения проверки я просто очень быстро запустил javascript, а затем взял остальную часть php, например так: 1003 *

<?php

    $name = trim($_POST['name']);
    $email = $_POST['email'];
    $comments = $_POST['comments'];

    $site_owners_email = 'zeckdude@gmail.com'; // Replace this with your own email address
    $site_owners_name = 'Chris Seckler'; // replace with your name

    if (strlen($name) < 2) {
        $error['name'] = "Please enter your name";  
    }

    if (!preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/is', $email)) {
        $error['email'] = "Please enter a valid email address"; 
    }

    if (strlen($comments) < 3) {
        $error['comments'] = "Please leave a comment.";
    }

    if (!$error) {

        require_once('phpMailer/class.phpmailer.php');
        $mail = new PHPMailer();

        $mail->From = $email;
        $mail->FromName = $name;
        $mail->Subject = "Website Contact Form";
        $mail->AddAddress($site_owners_email, $site_owners_name);
        $mail->AddAddress('zeckdude@gmail.com', 'Chris Seckler');
        $mail->Body = $comments;



        $mail->Send();
?>

<script type="text/javascript">
   $(function(){
      $('#container').fadeOut(1000);
   });
</script>



<?php 
        echo "<li class='success'> Congratulations, " . $name . ". We've received your email. We'll be in touch as soon as we possibly can! </li>";
        echo nl2br("<b>Message Sent:</b>

         From: $name

         Email: $email

         Message: $comments

         <br/><a href='http://www.google.com'>Link</a>");




    } # end if no error
    else {

        $response = (isset($error['name'])) ? "<li>" . $error['name'] . "</li> \n" : null;
        $response .= (isset($error['email'])) ? "<li>" . $error['email'] . "</li> \n" : null;
        $response .= (isset($error['comments'])) ? "<li>" . $error['comments'] . "</li>" : null;

        echo $response;
    } # end if there was an error sending

?>

Ответы [ 4 ]

3 голосов
/ 28 марта 2009

Да, но ваш результат не будет тем, что вы намереваетесь.

PHP все выполняется до отправки документа клиенту (пользователю). Javascript выполняется после того, как документ был получен клиентом.

Меньше связанных комментариев: Ваш скрипт уязвим для межсайтового скриптинга (XSS) через POST. Не используйте его на реальном сайте, пока не решите эту проблему.

Один из способов выполнить то, что вы, возможно, намереваетесь сделать, - это заставить вторую часть вашего php-кода визуализировать html-контент внутри div, который скрыт <div id='content' style="display:none">...other content...</div>. Затем в javascript после завершения затухания используйте javascript, чтобы очистить отображение: ни одного атрибута из div, чтобы он появился.

Удачи!

0 голосов
/ 28 марта 2009

Я на самом деле только что попробовал код, который я показал вам выше, и он работает довольно хорошо. По крайней мере, это выглядит хорошо. Вот он живой: Пример формы

То, что я пытаюсь сделать сейчас, - это получить сообщение, которое эхо в конце действительно исчезает, а не просто появляется.

Я думаю, что ответ Джорджа Деглина,

вторая часть вашего php кода визуализировать HTML-контент в DIV это скрыто

<div id='content' style="display:none">
   ...other content...
</div>

Тогда в JavaScript после исчезновения используйте Javascript очистить дисплей: нет атрибут из div, чтобы сделать это появляются.

скорее всего будет работать для этого.

0 голосов
/ 28 марта 2009

Нет, это определенно не будет работать так, как вы хотите - ваш php-скрипт не имеет такого тесного взаимодействия с браузером и не может вернуться и заставить существующую форму сделать что-то еще таким же образом. Как только php начинает выводить и отправляет заголовок страницы, это совершенно новая веб-страница, которую нельзя просто удалить старой.

вам, вероятно, стоит рассмотреть плагин jquery forms . Затем вы можете отправить свою форму, используя ajax, и оставить активную форму видимой. После того, как вы успешно вернулись с вашего Ajax-запроса, , затем исчезните из формы и перейдите к следующему пункту

0 голосов
/ 28 марта 2009

Почему бы не попробовать? Вы уже написали код. Из того, что я вижу в вашем коде, вы должны быть в состоянии сделать это без проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...