以php格式调用javascript函数

时间:2016-02-20 23:16:15

标签: javascript php jquery

我在我的网站上使用联系表单,我希望它使用javascript函数使用弹出框告诉用户他们没有填写所有字段。我有这段代码:

    <?php
  $action=$_REQUEST['action'];
  if ($action=="")    /* display the contact form */
      {
      ?>
      <form  action="" method="POST" enctype="multipart/form-data">
      <input type="hidden" name="action" value="submit">
      *Name:<br>
      <input name="name" type="text" value="" size="30"/><br><br>
      *Email:<br>
      <input name="email" type="text" value="" size="30"/><br><br>
      *Message:<br>
      <textarea name="message" rows="7" cols="30"></textarea><br>
      <input type="submit" value="Send email"/>
      </form>
      <script type="text/javascript">
      function requiredFields() {
          alert("Please fill in all fields!");
      }
      <?php
      }
  else                /* send the submitted data */
      {
      $name=$_REQUEST['name'];
      $email=$_REQUEST['email'];
      $message=$_REQUEST['message'];
      if (($name=="")||($email=="")||($message==""))
          {
          echo "requiredFields();";
          }
      else{
          $from="From: $name<$email>\r\nReturn-path: $email";
          $subject="Message sent using your contact form";
          mail("email@email.com", $subject, $message, $from);
          echo "Email sent!";
          }
      }
  ?>
      </script>

但是,该网站显示以下错误:

Fatal error: Call to undefined function requiredfields() in /home/a8502709/public_html/test/contact.php on line 46

上面一行是它回应函数调用的行。如何正确调用echo中的函数?

1 个答案:

答案 0 :(得分:1)

您没有引用echo输出:

echo requiredFields();;

应该是:

echo "requiredFields();";

否则,您要告诉 PHP 执行requiredFields()函数,其中在PHP中不存在。因此错误。您的目的是告诉渲染页面上的JavaScript执行该功能。因此,就PHP而言,您只需向页面输出一个字符串。

另请注意,这是语法错误:

echo "Email sent!";

这样做会将以下内容发送到<script>块中的JavaScript:

Email sent!

当然,这不是有效的JavaScript。你可能想在页面的其他地方输出。

编辑:您的代码中似乎也存在严重的逻辑错误。如果删除不相关的行,则结构基本上是这样的:

if ($action=="")    /* display the contact form */
{
?>
    <script type="text/javascript">
<?php
} else {
    echo "requiredFields();";
}
?>
</script>

所以......您只能打开 <script>块中的if标记,但在{{1>中使用标记阻止。根据定义,两者都无法执行。只有一个或另一个。所以你需要对此进行重组。

也可以关闭else块中的<script>标记,然后在if块中打开另一个标记?或者有多个else块用于HTML和JavaScript?有几种不同的方法来构建它。但是当您在浏览器中查看页面源时,您应该看到我正在谈论的内容。您会看到,如果if/else阻止,您永远不会创建else行,因此实际上并未执行任何JavaScript。

尽管如此,考虑到这一点,在<script type="text/javascript">块中启动JavaScript根本没有意义。由于 if块使用它。您无法在else中定义该函数,然后尝试在if中使用它,因为根据定义,只会执行一个或另一个。也许只需将所有JavaScript移动到else

else

老实说,你在这里混合使用PHP / HTML / JavaScript有点令人困惑。哪个不能让你更轻松。一旦你得到它至少工作,你可能想要重新构建它。