如何在表单中调用两个函数(一个来自JavaScript,一个来自PHP)

时间:2014-02-24 13:05:22

标签: javascript php html

我对编码和编写脚本非常陌生,可以从表单中插入数据。我想检查验证,如果这些是真的,那么数据应该提交到数据库。 问题是,当加载页面时,数据已经提交到数据库而没有单击提交按钮。

这是我的代码:

  <?php

  include 'config.php';

  ?>

  <html>

  <head> <h1 align="center">Credit form </h1>

   <script> 
     function GoToValidation() {
         var x = document.forms["insert_form"]["name"].value;
         var y = document.forms["insert_form"]["amount"].value;
         if (x == null || x == "") {
             alert("Name field must be filled out");
             return false;
         }

         if (y == null || y == "") {
             alert("Amount field must be filled out");
             return false;
         }
     }
  </script>


  </head>


  <body bgcolor="#D3D3D3">

      <table>

          <form name="insert_form" action="insert.php" method="post" onsubmit="GoToValidation() ">

              <br>
              <br>
              <br>
              <br>

              <table align="center" width="30%" border="1" cellpadding="4" cellspacing="0" bordercolor="#ffffff">

                  <tr>
                      <td>Name</td>
                      <td>
                          <input type="text" name="name">
                      </td>
                  </tr>

                  <tr>
                      <td>Date</td>
                      <td>
                          <input type="text" name="TodayDate">
                      </td>
                  </tr>

                  <tr>
                      <td>Amount</td>
                      <td>
                          <input type="text" name="amount">
                      </td>
                  </tr>

                  <tr>
                      <td></td>
                      <td align="right">
                          <input type="submit" value="submit">
                      </td>
                  </tr>

          </form>



  <?php

    $qinsert = "INSERT INTO finance (name,date,amt,status) 
    VALUES('$_POST[name]','$_POST[TodayDate]','$_POST[amount]','P')";

    if (!mysqli_query($con, $qinsert)) {

        die('Error: ' . mysqli_error($con));

    }

  ?>

  <script>alert ("1 record added") </script>

  <?php
  mysqli_close($con);

  ?>


  </body>

  </html>

5 个答案:

答案 0 :(得分:1)

问题在于,当您加载页面时,正在执行执行INSERT查询的PHP脚本,因为没有什么能阻止它。

我认为最简单的解决方案,也是为了帮助您了解客户端和服务器端之间的区别,就是为PHP创建一个单独的页面。然后在<form action="PHP_PAGE"属性上调用此页面。然后,您会看到INSERT仅在表单提交时执行。

答案 1 :(得分:1)

你混淆了一些东西。请记住,您正在使用JavaScript代码进行客户端(浏览器)验证,并使用PHP代码进行服务器端处理。

最佳做法是将处理器部分分类为执行数据库内容的“控制器文件”,然后重定向到或包含结果呈现文件。更好的是:尝试熟悉一些MVC模式基础知识,以便更好地理解这对于最小化关注点的分离至关重要。

无论如何,要使用单一文件方法解决此问题,您至少需要检查您的HTML表单是否已成功验证并提交。这可以通过检查通过成功的POST请求传输的提交按钮值来实现:

if ($_POST[ "submit" ]) {
    // Your database insert statement
}

请再次注意,每次调用该页面时,都会处理行<script>alert ("1 record added") </script>。您可以在服务器站点上生成状态消息并将其包含在HTML呈现中,或者将JavaScript语句放在PHP if语句中以有条件地生成JavaScript代码(这根本不是好习惯!):

if (mysqli_query($con, $qinsert)) {
    echo '<script>alert ("1 record added")</script'; // Better don't do that!
}

虽然这可能会奏效,但从长远来看,你可能不会对此感到满意。请再次尝试熟悉一些常见的设计模式。了解PHP的MVC模式和框架,以及最近JavaScript的转换角色以及如何最好地在客户端使用它。像你发布的那样的东西非常“九十年代”。

答案 2 :(得分:0)

在插入查询之前检查一个条件,如果$ _post('submit'){your insert code ..}

警报(“添加1条记录”)

答案 3 :(得分:0)

<form onsubmit="return GoToValidation();">放入您的表单标记...

答案 4 :(得分:0)

您还可以在输入中使用HTML5 Required function。您将不再需要验证脚本,因为您将收到所需函数的通知。

<tr><td>Name</td> <td><input type="text" name="name" required="required"></td></tr>  

<tr><td>Date </td> <td><input type="text" name="TodayDate"></td></tr>

<tr><td>Amount</td> <td> <input type="text" name="amount" required="required"></td></tr>