你可以在php标签之间放置脚本标签吗?

时间:2009-03-28 03:57:16

标签: php javascript jquery forms

我试图在表单在按下提交后验证用户输入后使用jquery淡出div。我试图避免表单在验证之前淡出,以防用户没有输入正确的信息。

我想知道我是否可以在我的php标签之间添加脚本标签,这样一旦验证完成,我只需快速运行javascript,然后选择其余的php,如下: / p>

<?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 个答案:

答案 0 :(得分:3)

是的,但你的结果不符合你的意图。

PHP全部在文档发送到客户端(用户)之前执行。 Javascript在客户端收到文档后执行。

相关评论较少: 您的脚本容易受到跨站点脚本(XSS)的攻击。在解决此问题之前,请勿在真实网站上使用它。

你可以完成你想要做的事情的一种方法是让php代码的第二部分在隐藏<div id='content' style="display:none">...other content...</div>的div中呈现html内容。然后,在淡入淡出完成后的javascript中,使用javascript清除div中的display:none属性使其显示。

祝你好运!

答案 1 :(得分:0)

为什么不尝试一下?您已经编写了代码。从我在您的代码中看到的,您应该能够毫无问题地执行此操作。

答案 2 :(得分:0)

不,这肯定不会按照您想要的方式运行 - 您的PHP脚本没有与浏览器进行那种亲密的交互,也无法返回并使现有表单以这种方式执行其他操作。一旦php开始生成输出并发送页面标题,它就是一个全新的网页,你不能让旧网页消失。

您应该考虑查看jquery forms plugin。然后,您可以使用ajax提交表单,并保持活动表单可见。一旦你从ajax提交中成功返回,然后淡化表格并继续下一件事

答案 3 :(得分:0)

我实际上只是尝试过上面展示给你的代码并且效果很好。至少它看起来不错。这是现场直播:Example Form

我现在要做的就是让最后回声的消息实际上淡入而不是只是弹出。

我认为George Deglin的答案,

  

拥有php代码的第二部分   在div中呈现html内容   这是隐藏的。

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

然后,在javascript中   淡入淡出完成后,使用   javascript清除显示:无   来自div的属性来实现它   出现。

最有可能为此工作。