【问题标题】:Update only checked rows php mysql [closed]仅更新检查的行 php mysql [关闭]
【发布时间】:2015-12-02 22:21:38
【问题描述】:

我正在尝试仅更新表中已检查的行,但没有发生任何事情 这是我的代码

<?php
    //database connect select
    $result=mysql_query("Select * from ticket_reservation WHERE 
    validate_status='No'") or die(mysql_error());
    while($row=mysql_fetch_array($result))
    {
        echo "<tr><td><input type='checkbox' id='name'  name='name[]'value=".$row['id']."</td><td>".$row['userid']."</td> <td>".$row['busid']."</td><td>".$row['numberofseats']."</td></tr>";
        echo "<br>"; 
    }
    echo"<tr><td><input type='submit' name='submit' Value='Validate Tickets'>    </td></tr>";
    if(isset($_POST['submit']))
    {
        if(is_array($_POST['name']))
        {
            $qry = "UPDATE ticket_reservation SET validate_status='Yes' WHERE id IN (".implode(',', $_POST['name']).")";
            // echo $qry; // For checking the generated sql statement; can be removed
            mysql_query($qry);
        }
    }

?>
</table>
</form>

【问题讨论】:

  • 你在这里缺少下划线$POST

标签: php mysql checkbox rows multipleselection


【解决方案1】:
$checkbox=$_POST['name'];
for($i=0;$i<count($checkbox);$i++)
{
    $id = $checkbox[$i];

    $sql1 = "UPDATE ticket_reservation set     validate_status='Yes' where id = '".$id."' ";
    mysql_query($sql1);
}

【讨论】:

  • 我已经检查了这个答案但不起作用
【解决方案2】:

这里还有一个错字:is_array($POST['name']) 应该是 is_array($_POST['name'])

【讨论】:

    【解决方案3】:

    您可以使用MySQL IN 函数在一个查询中更新所有数据集。因此,您无需使用 foreach 循环遍历所有 ID。

    if(isset($_POST['submit']))
    {
        if(is_array($_POST['name']))
        {
            $qry = "UPDATE ticket_reservation SET validate_status='Yes' WHERE id IN (".implode(',', $_POST['name']).")";
            echo $qry; // For checking the generated sql statement; can be removed
            mysql_query($qry);
        }
    }
    

    为了防止 SQL 注入,您应该使用准备好的语句(请参阅 PDO

    您还应该在 HTML 属性之间添加一个空格:name='name[]' value= 而不是 name='name[]'value=

    【讨论】:

    • 我已经添加了空格,我也添加了上面的行,但没有任何反应验证状态字段不会更改数据库中的值
    • 您能否将echo $qry; 添加到您的代码中并检查生成的查询,例如phpMyAdmin?
    • 我正在尝试迭代,因为我想一次更新多行,这有意义吗?
    • 代码 echo $qry 不生成任何输出...
    • @BilalZia 我的示例还将更新多行。我已经更新了我的答案,以便您可以看到必须在哪里更新 sql 语句以及在哪里添加 echo $qry;
    【解决方案4】:
    if(isset($_POST['name']))
    {
     $Name=$_POST['name'];
    foreach($Name as $N)
    {
    
    $qry="Update ticket_reservation SET validate-status='Yes' Where id='$N'";       echo $qry; // For checking the generated sql statement; can be removed
     mysql_query($qry);
    
    
    
    }
    
    }
    

    【讨论】:

    • 你遇到了什么错误?
    • 没有错误,先生,我尝试了太多次检查错别字...