我正在创建一个系统,用户可以在其中更改"状态" MySQL表中的项目。
基本上我的表有一个唯一的(自动递增)ID字段和其他18个字段。其中一个字段是状态字段。我需要找出一种方法来改变状态,从#34;活跃"到"持有"当用户勾选复选框时
我假设如果我为复选框指定一个值并将其输入到自动递增数组中,那么它应该在检查时通过。我不知道这是否正确。
每次尝试时,唯一可以改变的状态是第一个就是它。这是我的代码,它提取了条目:
while($row = mysqli_fetch_array($result))
{
echo "<table border='2' style='width: 100%; margin: auto; border-width: 1px'><tr><th>Date Requested</th><th>Time Called</th><th>Tenant Name</th><th>Apartment</th><th>Work Requested</th><th>Tenant need to be present?</th><th>Good Date</th><th>Time to complete</th><th>Resident Phone #</th></tr>";
echo "<input type='hidden' name='id[$i]' value=" . $row['id'] . ">";
echo "<tr>";
echo "<td align='center'>" . date("m-d-Y", strtotime($row['r_date'])) . "</td>";
echo "<td align='center'>" . date("g:i A", strtotime($row['t_call'])) . "</td>";
echo "<td align='center'>" . $row['t_name'] . "</td>";
echo "<td align='center'>" . $row['loc'] . "</td>";
echo "<td align='center'>" . $row['w_req'] . "</td>";
echo "<td align='center'>" . $row['apt_status'] . "</td>";
if ($row['to_be'] == "1969-12-31") {
echo "<td align='center'> </td>";
}
else {
echo "<td align='center'>" . date("m-d-Y", strtotime($row['to_be'])) . "</td>";
};
echo "<td align='center'>" . $row['g_time'] . "</td>";
echo "<td align='center'>" . $row['tel'] . "</td></tr>";
echo "<tr><td align='center' colspan = '3' style='border-width:0px; background-color: #E6E6E6'><strong>Work performed/notes:</strong><br><textarea name='work[$i]'style='width:250px; height:60px'>" . htmlspecialchars($row['w_performed'], ENT_QUOTES) . "</textarea></td>";
echo "<td colspan='2' align='center' style='border-width:0px; background-color: #E6E6E6'><strong>Check to put Work Order on hold.</strong><br><input name='holding' type='checkbox' value='" . $row['id'] . "' ></td>";
echo "<td colspan='4' style='border-width:0px; background-color: #E6E6E6'> </td>";
echo "<tr><td colspan='9' style='border-width:0px'><hr style='height:3px; color: #333; background-color: #333'></td>";
++$i;
}
echo "</table>";
我使用复选框尝试使用的代码来执行ID:
$i = 0;
$size = count($_POST['holding']);
while($i < $size)
{
while(isset($_POST['holding'][$i]))
{
$sql = "UPDATE w_o SET w_status = 'hold' WHERE id = " . $_POST['id'][$i];
mysqli_query($mysqli, $sql) or die('Error: ' . $mysqli_error($mysqli));
++$i;
}
}
我觉得我很乐意离开,并感谢任何帮助。我已经用Google搜索了如何做这么多次,出于某种原因,我似乎无法找到一个足够好的教程。谢谢你的帮助!
答案 0 :(得分:1)
您的所有复选框都具有相同的holding
名称。提交后,PHP将仅使用提交的多个值中的一个。如果要提交多个不同的值,则必须为每个字段指定唯一的名称,或者使用PHP的“数组”hack作为字段名称:holding[]
。添加[]
告诉PHP期望多个值,$_POST['holding']
将是值的数组,而不是单个值。
答案 1 :(得分:0)
我想我想出来了,谢谢你的帮助!这是我用过的:
$stmt = mysqli_prepare($mysqli, "UPDATE w_o SET w_status = 'hold' WHERE id = ?");
mysqli_stmt_bind_param($stmt, "i", $id);
foreach ($_POST['holding'] as $id)
{
mysqli_stmt_execute($stmt);
}
我想我之前尝试过这个,但没有将holding
设置为数组。再次感谢您的帮助!!!
答案 2 :(得分:-2)
$sql = "UPDATE w_o SET w_status = 'hold' WHERE id in (".array_map("intval",implode(',',$_POST['holding'][$i])).")";
因此您可以使用单个sql
更新所有这些内容