我在一个名为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进行下一次申请*
答案 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