根据选中的复选框提交后,在SQL数据库中更新行值

时间:2015-07-01 11:16:15

标签: php mysql database

我有这张桌子:

enter image description here

在我的SQL中,我将此列命名为“Status”,仅包含两个值:Inactive和Active,默认情况下设置为Inactive。

我的问题是,如果在点击“提交”按钮后检查特定行,如何在我的数据库中将“状态”列更新为“活动”?即使检查的行数超过1行也是如此。我应该使用什么SQL查询(或者如果与PHP结合使用)?

我顺便使用PHP。我已经研究过,似乎无法得到正确的答案。

提前感谢您提供所有帮助/建议/建议。

更新

我修改了@Vikas Umrao的答案并做了一些修改。每当检查表行时,“状态”行都会成功更新。但是,先前更新的行将保留在阵列中,并且不会重置。我将进一步解释,但在此之前,下面是我使用数据库的工作代码:

SQL (设置自己的连接,我的名字叫做database.php)

CREATE TABLE IF NOT EXISTS `table_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`department` varchar(255) NOT NULL,
`status` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

INSERT INTO `table_test` (`id`, `name`, `department`, `status`) VALUES
(1, 'Misha', 'Accounting', 'Inactive'),
(2, 'Justin', 'IT', 'Inactive'),
(3, 'Chris', 'HR', 'Inactive');

这是我的整个index.php,因为某些基于Vikas的脚本

<?php
include('database.php');

$query = "SELECT * FROM table_test";
$result = mysql_query($query);

if($result === false) { 
    die(mysql_error());
}

echo "<form method='post' action='#'>
        <h2>Table Content</h2>
            <table>
                <thead>
                    <tr style='background-color: rgb(102, 222, 93);'>                            
                        <td>Name</td>
                        <td>Department</td>
                        <td>Status</td>
                        <td></td>
                    </tr>
                </thead>
                <tbody>";

while($row = mysql_fetch_array($result)){

    $row_id = $row['id'];
    $name = $row['name'];
    $department = $row['department'];
    $status = $row['status'];

    echo "<tr><td>" . $name . "</td><td>" . $department . "</td><td>" . $status . "</td><td><input type='checkbox' name='id[]' value='" . $row_id . "'/></td></tr>";
}

echo "</tbody></table><input type='submit' value='submit'></form>"; //end form

/***** Update Status *****/

/*print_r($_POST);*/
    if(gettype($_POST['id'])=="array"){
        foreach($_POST['id'] as $val){
         $id_c = $val;
         $query2 = "UPDATE table_test SET status = 'Inactive' where id='".$id_c."'";
         $result2 = mysql_query($query2);
         if($result2 === false) { 
            die(mysql_error());
         }
         echo "Status " .$id_c. " is updated. <br>";
        }
    }   
    mysql_close();
?>

更新问题:

当我检查一行然后单击“提交”时,数据库中的状态值会发生变化。我回应了更新ID的结果。但是,即使刷新页面后,数据行的更新值仍然存在。

因此,假设我将更新查询更改为活动而不是非活动,如果我刷新页面并且之前更新的行是Misha和Chris',那么即使我不希望它们处于活动状态,它们的状态也将处于活动状态:< / p>

$query2 = "UPDATE table_test SET status = 'Active' where id='".$id_c."'";

因此,每次刷新页面时,即使没有选中,也会不断更新行。如何清除php数组值?我已经看到这个未设置和实例化但似乎无法在这里应用它。我该怎么做?

以下是结果的示例屏幕截图:

enter image description here

谢谢!

=======================

FINAL:

我能够自己解决这个问题。感谢大家!

1 个答案:

答案 0 :(得分:1)

你的表格应该是这样的。 <input name="id[]" value="1" type="checkbox" checked="">的值将是表格的主要ID。

<form method="post">
    <table id="status-table">
    <thead>
        <tr style="background-color: rgb(102, 222, 93);">                            
            <td>Name</td>
            <td>Department</td>
            <td>Status</td>
            <td><input type="checkbox"></td>  
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Misha</td>
            <td>Accounting</td>
            <td>Inactive</td>
            <td><input name="id[]" value="1" type="checkbox" checked=""></td>
        </tr>
        <tr>
            <td>Justin</td>
            <td>IT</td>
            <td>Active</td>
            <td><input name="id[]"  value="2"  type="checkbox"></td>
        </tr>  
        <tr>
            <td>Chris</td>
            <td>HR</td>
            <td>Inactive</td>
            <td><input name="id[]" value="3" type="checkbox" checked=""></td>
        </tr>  
    </tbody>
    </table>
    <input type="submit" value="submit">
    </form>

你的php代码就像这样:

<?php
//print_r($_POST);
if(gettype($_POST['id'])=="array"){
foreach($_POST['id'] as $val){
 $id_c=$val;
 $query="update table set status='Active' where id='".$id_c."'";
}
}
?>