Php 如何修复数组中未正确提交的表单数据
我正在构建一个管理表单,允许其他团队更新他们自己数据的各个方面,这样他们就不必打电话给我来为他们做这件事 它们通过复选框或文本字段更新数据。还有一个要求是他们能够一次编辑多行。因此表单要求他们选择要更新或已经更新的行。到目前为止还不错 因此,我的问题是:如果第一条记录选中了一个复选框,而第二条记录选中了3个复选框,那么在提交表单并回显数据时,第一条记录显示3个值,而第二条记录显示1,表明记录1以某种方式从记录2中获取了值。我知道事实并非如此,但我不明白为什么数据没有保留在记录2中 我已经绕过了这个问题,搜索并找到了许多应该有效的示例,但它们只是使用一个文本字段,而不是复选框。所以,我希望这里有人能帮我解决这个问题Php 如何修复数组中未正确提交的表单数据,php,Php,我正在构建一个管理表单,允许其他团队更新他们自己数据的各个方面,这样他们就不必打电话给我来为他们做这件事 它们通过复选框或文本字段更新数据。还有一个要求是他们能够一次编辑多行。因此表单要求他们选择要更新或已经更新的行。到目前为止还不错 因此,我的问题是:如果第一条记录选中了一个复选框,而第二条记录选中了3个复选框,那么在提交表单并回显数据时,第一条记录显示3个值,而第二条记录显示1,表明记录1以某种方式从记录2中获取了值。我知道事实并非如此,但我不明白为什么数据没有保留在记录2中 我已经绕过了这
<?php
if(isset($_POST['updateRecord'])) {
// echo "Update Record Outer Check<br>";
if ((strtolower($_POST['updateRecord']) == "update")) {
foreach ($_POST['update'] as $key => $update) {
$id = $_POST['id'][$key];
$regOK = (
isset($_POST['regOK'][$key]) ?
$_POST['regOK'][$key] : false
);
$paidOK = (
isset($_POST['paidOK'][$key]) ?
$_POST['paidOK'][$key] : false
);
$ebdOK = (
isset($_POST['ebdOK'][$key]) ?
$_POST['ebdOK'][$key] : false
);
$appOK = (
isset($_POST['appOK'][$key]) ?
$_POST['appOK'][$key] : false
);
echo "RECORD ID: ".$id."<br>";
echo " REG: ".$regOK."<br>";
echo "PAID: ".$paidOK."<br>";
echo " EBD: ".$ebdOK."<br>";
echo " APP: ".$appOK."<br><br>";
}
}
}
echo "<br><br>";
?>
<style type="text/css">
th,td {text-align:center;}
</style>
<form action="" method="post" name="theForm">
<table cellpadding="2" cellspacing="0" class="resultsTable">
<tr>
<th>REG</th>
<th>PAID</th>
<th>EBD</th>
<th>APP</th>
<th>Update Record</th>
</tr>
<tr>
<td><input type="checkbox" name="regOK[]" id="regOK" value="1" checked></td>
<td><input type="checkbox" name="paidOK[]" id="paidOK" value="1"></td>
<td><input type="checkbox" name="ebdOK[]" id="ebdOK" value="1"></td>
<td><input type="checkbox" name="appOK[]" id="appOK" value="1"></td>
<td>
<input type="checkbox" class="test" name="update[]" id="update" value="1">
<input type="hidden" name="updateRecord[]" id="updateRecord" value="update">
<input type="hidden" name="id[]" id="id" value="1" />
</td>
</tr>
<tr>
<td><input type="checkbox" name="regOK[]" id="regOK" value="1" checked></td>
<td><input type="checkbox" name="paidOK[]" id="paidOK" value="1"></td>
<td><input type="checkbox" name="ebdOK[]" id="ebdOK" value="1"></td>
<td><input type="checkbox" name="appOK[]" id="appOK" value="1"></td>
<td>
<input type="checkbox" class="test" name="update[]" id="update" value="2">
<input type="hidden" name="updateRecord[]" id="updateRecord" value="update">
<input type="hidden" name="id[]" id="id" value="2" />
</td>
</tr>
<tr>
<td><input type="checkbox" name="regOK[]" id="regOK" value="1"></td>
<td><input type="checkbox" name="paidOK[]" id="paidOK" value="1"></td>
<td><input type="checkbox" name="ebdOK[]" id="ebdOK" value="1"></td>
<td><input type="checkbox" name="appOK[]" id="appOK" value="1"></td>
<td>
<input type="checkbox" name="update[]" id="update" value="3">
<input type="hidden" name="updateRecord" id="updateRecord" value="update">
<input type="hidden" name="id[]" id="id" value="3" />
</td>
</tr>
<tr><td colspan="5" ><input type="submit" name="updateFormData" id="updateFormData" value="Update All Records"></td></tr>
</table>
</form>
th,td{text align:center;}
规则
支付
EBD
应用程序
更新记录
将选中前两个复选框。保留第1行,选中记录2的第二个复选框,选择前两行的更新复选框,然后提交表单。我希望看到的是:
记录编号:1
注册:1
支付:
EBD:
应用程序:
记录编号:2
注册:1
薪酬:1
EBD:
应用程序:
我在这个例子中得到的是:
记录编号:1
注册:1
薪酬:1
EBD:
应用程序:
记录编号:2
注册:1
支付:
EBD:
应用程序:
您可以看到第一条记录显示第二行数据的位置。代码中的错误是索引,使用索引处理表单将解决它
<?php
if(isset($_POST['updateRecord'])) {
// echo "Update Record Outer Check<br>";
if ((strtolower($_POST['updateRecord']) == "update")) {
foreach ($_POST['update'] as $key => $update) {
$id = $_POST['id'][$key];
$regOK = (
isset($_POST['regOK'][$key]) ?
$_POST['regOK'][$key] : false
);
$paidOK = (
isset($_POST['paidOK'][$key]) ?
$_POST['paidOK'][$key] : false
);
$ebdOK = (
isset($_POST['ebdOK'][$key]) ?
$_POST['ebdOK'][$key] : false
);
$appOK = (
isset($_POST['appOK'][$key]) ?
$_POST['appOK'][$key] : false
);
echo "RECORD ID: ".$id."<br>";
echo " REG: ".$regOK."<br>";
echo "PAID: ".$paidOK."<br>";
echo " EBD: ".$ebdOK."<br>";
echo " APP: ".$appOK."<br><br>";
}
}
}
echo "<br><br>";
?>
<style type="text/css">
th,td {text-align:center;}
</style>
<form action="" method="post" name="theForm">
<table cellpadding="2" cellspacing="0" class="resultsTable">
<tr>
<th>REG</th>
<th>PAID</th>
<th>EBD</th>
<th>APP</th>
<th>Update Record</th>
</tr>
<tr>
<td><input type="checkbox" name="regOK[]" id="regOK" value="1" checked></td>
<td><input type="checkbox" name="paidOK[]" id="paidOK" value="1"></td>
<td><input type="checkbox" name="ebdOK[]" id="ebdOK" value="1"></td>
<td><input type="checkbox" name="appOK[]" id="appOK" value="1"></td>
<td>
<input type="checkbox" class="test" name="update[]" id="update" value="1">
<input type="hidden" name="updateRecord[]" id="updateRecord" value="update">
<input type="hidden" name="id[]" id="id" value="1" />
</td>
</tr>
<tr>
<td><input type="checkbox" name="regOK[1]" id="regOK" value="1" checked></td>
<td><input type="checkbox" name="paidOK[1]" id="paidOK" value="1"></td>
<td><input type="checkbox" name="ebdOK[1]" id="ebdOK" value="1"></td>
<td><input type="checkbox" name="appOK[1]" id="appOK" value="1"></td>
<td>
<input type="checkbox" class="test" name="update[1]" id="update" value="2">
<input type="hidden" name="updateRecord[1]" id="updateRecord" value="update">
<input type="hidden" name="id[]" id="id" value="2" />
</td>
</tr>
<tr>
<td><input type="checkbox" name="regOK[2]" id="regOK" value="1"></td>
<td><input type="checkbox" name="paidOK[2]" id="paidOK" value="1"></td>
<td><input type="checkbox" name="ebdOK[2]" id="ebdOK" value="1"></td>
<td><input type="checkbox" name="appOK[2]" id="appOK" value="1"></td>
<td>
<input type="checkbox" name="update[2]" id="update" value="3">
<input type="hidden" name="updateRecord" id="updateRecord" value="update">
<input type="hidden" name="id[]" id="id" value="3" />
</td>
</tr>
<tr><td colspan="5" ><input type="submit" name="updateFormData" id="updateFormData" value="Update All Records"></td></tr>
</table>
</form>
th,td{text align:center;}
规则
支付
EBD
应用程序
更新记录
检查此项。我在这里所做的:
id
直接分配给表单数据并简化调试步骤<?php
$ids = range(1, 3); // [1, 2, 3];
$true = "true";
$false = "false";
if(isset($_POST['update'])) {
foreach ($_POST['update'] as $id => $update) {
if ($_POST['update'][$id]) {
$regOK = isset($_POST['regOK'][$id]) ? $true : $false;
$paidOK = isset($_POST['paidOK'][$id]) ? $true : $false;
$ebdOK = isset($_POST['ebdOK'][$id]) ? $true : $false;
$appOK = isset($_POST['appOK'][$id]) ? $true : $false;
echo "RECORD ID: ".$id."<br>";
echo " REG: ".$regOK."<br>";
echo "PAID: ".$paidOK."<br>";
echo " EBD: ".$ebdOK."<br>";
echo " APP: ".$appOK."<br><br>";
}
}
}
echo "<br><br>";
?>
<style type="text/css">
th,td {text-align:center;}
</style>
<form action="" method="post" name="theForm">
<table cellpadding="2" cellspacing="0" class="resultsTable">
<tr>
<th>REG</th>
<th>PAID</th>
<th>EBD</th>
<th>APP</th>
<th>Update Record</th>
</tr>
<?php foreach($ids as $id) { ?>
<tr>
<td><input type="checkbox" name="regOK[<?=$id?>]" id="regOK" value="1" checked></td>
<td><input type="checkbox" name="paidOK[<?=$id?>]" id="paidOK" value="1"></td>
<td><input type="checkbox" name="ebdOK[<?=$id?>]" id="ebdOK" value="1"></td>
<td><input type="checkbox" name="appOK[<?=$id?>]" id="appOK" value="1"></td>
<td><input type="checkbox" class="test" name="update[<?=$id?>]" id="update" value="1"></td>
</tr>
<?php } ?>
<tr><td colspan="5" ><input type="submit" name="updateFormData" id="updateFormData" value="Update All Records"></td></tr>
</table>
</form>
th,td{text align:center;}
规则
支付
EBD
应用程序
更新记录
表单中不包括未选中的复选框。这就是为什么会出现未定义的索引错误以及输出不正确的原因。您需要找到一种方法,以可预测的方式处理复选框。也许考虑Ajax?我不太熟悉PHP,但是HTML格式很多。所有复选框都具有相同的名称和ID真的可以吗?接收到的数据不是只以这种方式显示最新的输入吗?@Bman70 onlyupdateRecord
正在覆盖,但在该代码示例中它是不相关的。名称中的括号表示它是一个多选输入,PHP将其视为一个数组。