我遇到了PHP表单一次更新一行的问题。 它对第一行起作用没问题,但下一行没有得到所有变量。例如,第1行将包含company1,已检查已付款且未检查是否已停用,它将获取并更新所有变量。但是company2的行只获取ID和复选框的默认值。由于某种原因,它不会提取整行的信息,只是ID。任何帮助将不胜感激!
This is my Form (edited):
<html>
<body>
<form action="next.php" method="POST">
<table border="1" align="center">
<tr>
<th>
Name
</th>
<th>
Address
</th>
<th>
Paid
</th>
<th>
Active
</th>
</tr>
<?php
require_once ("connect.php");
require_once ("phpfunctions.php");
error_reporting(0);
$cd=companyDisplay();
$result = mysqli_query($mysqli,$cd);
while($res=mysqli_fetch_array($result))
{
$final[]=$row;
?>
<tr>
<td class="name">
<a href='edit.php?ID="<?php echo $res['ID']; ?>"'>
<?php echo $res['name'];?>
</a>
</td>
<td class="Address">
<?php echo $res['Address'];?>
</td>
<td class="paid">
<?php foreach($final as $k => $v){ ?>
<input type="checkbox" value="0" name="results[<?= $k ?>][paid]"
<?php } ?>
<?php
if($res["paid"]==0)
{
echo "checked";
}
?>>
</td>
<td class="active">
<?php foreach($final as $k => $v){ ?>
<input type="checkbox" value="0" name="results[<?= $k ?>][active]"
<?php } ?>
<?php
if($res["active"]==0)
{
echo "checked";
}
?> >
</td>
<td class="update">
<?php foreach($final as $k => $v){ ?>
<input type="hidden" name="results[<?= $k ?>][ID]" value="<?php echo $res['ID']; ?>">
<?php } ?>
<input type="submit" name="submit" value="Update">
</td>
</tr>
<?php } ?>
</table>
</form>
</body>
</html>
This is my next php page where the variables are posted and the query is run:
<?php
require_once ("connect.php");
require_once ("phpfunctions.php");
error_reporting(0);
var_dump($_POST);
//info to store from index.php
$ID=$_POST['ID'];
$ID= str_replace('"', '', $ID);
$paid=(isset($_POST['paid']))? 0 : 1;
$active = (isset($_POST['active']))? 0 : 1;
//adds updated info to database
$uc=updateCompany($paid,$active,$ID);
$r = mysqli_query($mysqli,$uc);
echo "Information stored successfully";
echo $paid;
echo $active;
echo $ID;
?>
And here is my function:
function updateCompany($paid,$active,$ID)
{
$uc="UPDATE
`company`
SET
`paid`='$paid',
`active`='$active'
WHERE
`ID`='$ID'";
return $uc;
}
第一行的输出:
array(3){[“paid”] =&gt; string(1)“0”[“ID”] =&gt; string(2)“12”[“submit”] =&gt; string(6)“Update”}信息存储成功0(付费)1(停用)12(id)
下一行的输出:
array(2){[“ID”] =&gt; string(2)“13”[“submit”] =&gt; string(6)“Update”}信息存储成功1(付费)1(停用)13(ID)
两者都设置了相同的选项,除了ID之外应该相同。我在哪里错了?
答案 0 :(得分:0)
这里有多个问题:
您的forms
不需要enctype="multipart/form-data"
,因为这与文件上传有关
<tr>
标签丢失。表格标题应位于<tr>
代码
echo "checked=='checked'";
有一个额外的=
标志,不需要,我只想在checked
放置
indexVerify.php?ID=
如果您的表单的方法是POST而不是GET,为什么使用?ID=
。
<form action='indexVerify.php?ID="<?php echo $res['ID']; ?>"' method="post">
位于另一个form
内。这是不允许的,会破坏您的HTML代码。
您正在迭代结果并以错误的方式设置输入。这就是你现在基本上做的事情:
<form>
<?php while ($res = mysqli_fetch_array($result)){ ?>
<input type="checkbox" value="0" name="paid" />
<?php } ?>
</form>
当您提交表单时,最终会得到最后一个:$_POST[paid] = "";
忽略所有其他结果。
要修复它,您的输入应设置如下:
<?php
while ($res = mysqli_fetch_array($result)){
$final[] = $row;
}
?>
<form>
<?php foreach($final as $k => $v)){ ?>
<input type="checkbox" value="0" name="results[<?= $k ?>][paid]" />
<?php } ?>
</form>
像上面这样做会给你一个像这样的数组的结果:
$_POST[results] =
(array)
[0] => [
"paid" => ""
]
[1] => [
"paid" => ""
]
然后您可以迭代并将其提交到您的数据库。