使用php和复选框更新多行mysql

时间:2014-09-03 15:23:37

标签: php mysql checkbox

我正在创建一个系统,用户可以在其中更改"状态" 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'>&nbsp;</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搜索了如何做这么多次,出于某种原因,我似乎无法找到一个足够好的教程。谢谢你的帮助!

3 个答案:

答案 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

更新所有这些内容