PHP具有多个查询的多个表单

时间:2013-11-21 19:30:16

标签: php mysql insert

我在一个名为dispatch.php的页面上有几个表单,每个表单都将PHP代码提交到INSERT到数据库表中,并且还UPDATE另一个数据库表。 INSERTED和UPDATED的主要值是bolNum和containerNum。

注意:任何时候都可以有超过1个bolNum或containerNum。你会看到阵列以及我如何将其分解。

这是一个表格(我尽可能地缩短了这个表格):

 <form action="" method="POST" 
       id="serviceForm" name="serviceForm">
 <label>Container Selected</label>
     *** js populates bolNum & containerNum and displays it in these inputs ***
 <input type="text" name="containerNum" id="containerNum" class="containerNum" />
 <input type="text" name="bolNum" id="bolNum" class="bolNum" />
     *** there are more form inputs, I just want to focus on the above 2 ***
 <input type="submit" id="modal-form-submit" name="submit" value="Save" />
 <?php 
    if(isset($_POST['submit'])){
       $bolArray = explode(',', $_POST['bolNum']);
       $containerArray = explode(',', $_POST['containerNum']);
       $count = count($bolArray);
    for($i = 0; $i < $count; $i++){
       $bolService = $bolArray[$i];
       $containerService = $containerArray[$i];

       *** here is the first query ***
       $sqlQuery = "INSERT INTO serviceTable (bol, container) 
                    VALUES ('$bolService', '$containerService')";

       *** here is the second query ***
       $updateService = "UPDATE dispatchTable SET serviceColumn = 'Y' 
       WHERE CONTAINER_NUM = '$containerService' AND BOL_NUM = '$bolService'";
       $updateServiceQuery = @mysql_query($updateService) or die ('error');

       if(mysql_query($sqlQuery)){
          $success = true;
          }
       else{
          $success = false;
          }
        }
      }
       if($success){
         echo "saved";
         }
       else{
         echo "not saved";
         }
       ?>
 </form>

这是另一种形式。基本上,它们都是相同的,除了表单的名称和PHP中的查询名称。

 <form class="well-small" action="" method="POST" 
       id="storageForm" name="storageForm">
 <label>Container Selected</label>
     *** js populates bolNum & containerNum and displays it in these inputs ***
 <input type="text" name="containerNum" id="containerNum" class="containerNum" />
 <input type="text" name="bolNum" id="bolNum" class="bolNum" />
     *** there are more form inputs, I just want to focus on the above 2 ***
 <input type="submit" id="modal-form-submit" name="submit" value="Save" />
 <?php 
    if(isset($_POST['submit'])){
       $bolArray = explode(',', $_POST['bolNum']);
       $containerArray = explode(',', $_POST['containerNum']);
       $count = count($bolArray);
    for($i = 0; $i < $count; $i++){
       $bolStorage = $bolArray[$i];
       $containerStorage = $containerArray[$i];

       *** here is the first query ***
       $sqlQuery = "INSERT INTO storageTable (bol, container) 
                    VALUES ('$bolStorage', '$containerStorage')";

       *** here is the second query ***
       $updateStorage = "UPDATE dispatchTable SET storageColumn = 'Y' 
       WHERE CONTAINER_NUM = '$containerStorage' AND BOL_NUM = '$bolStorage'";
       $updateStorageQuery = @mysql_query($updateStorage) or die ('error');

       if(mysql_query($sqlQuery)){
          $success = true;
          }
       else{
          $success = false;
          }
        }
      }
       if($success){
         echo "saved";
         }
       else{
         echo "not saved";
         }
       ?>
 </form>    

如果您注意到每个表单有2个查询,您将看到INSERT查询更新到另一个表。两个表单都有一个更新同一个表的UPDATE查询,只有不同的列。

同样,我对INSERT查询没有任何问题。问题在于UPDATE查询。基本上,如果你完成了serviceForm,它应该更新dispatchTable中名为serviceColumn的列。但它也更新了storageColumn,它也在dispatchTable中。反之亦然,完成storageForm。

表单完成后,它应该只更新该表单的指定列,而不是两个表单的两列。

我不确定它是否与表格空白的操作有关。虽然我确实认为这个动作可能是让它正常工作的关键。我不知道从哪里开始。

请告知。

*注意:我将使用PDO或MYSQLI进行下一次申请*

1 个答案:

答案 0 :(得分:0)

尝试重命名表单中的提交按钮:

....
<input type="submit" id="modal-form-submit" name="service_submit" value="Save" />
 <?php 
    if(isset($_POST['service_submit'])){
....

....
<input type="submit" id="modal-form-submit" name="storage_submit" value="Save" />
 <?php 
    if(isset($_POST['storage_submit'])){
....

这两个字段都已更新,因为PHP代码的两个部分都已执行。原因是您检查了在网页上提交任何表单时设置的相同帖子字段$_POST['submit']

P.S。

尝试更改查询以在循环中进行一次查询而不是大量查询。您的应用程序将更快地运行

您的代码有一个名为SQL注入的大漏洞。至少尝试转义查询中传递的值,甚至更好地使用参数化查询:http://php.net/manual/en/pdostatement.bindparam.php