【问题标题】:Update a row value in SQL database after submit based on selected checkbox(es)提交后根据选中的复选框更新 SQL 数据库中的行值
【发布时间】:2015-09-18 12:25:02
【问题描述】:

我有这张桌子:

在我的 SQL 中,我有一个名为“状态”的列,只有两个值:非活动和活动,默认情况下设置为非活动。

我的问题是,如果在单击“提交”按钮后选中特定行,我如何在我的数据库中将“状态”列更新为“活动”?即使检查了超过 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',那么即使我不希望他们的状态也将是活动的:

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

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

以下是结果的示例截图:

谢谢!

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

最终:

我能够自己修复它。感谢大家!

【问题讨论】:

  • 您到底要求什么?查询?
  • 嗨@juergend,是的查询。抱歉,我更新了我的问题。谢谢! :)
  • 您需要提供带有数据库主键值的复选框 ....try stackoverflow.com/questions/14474729/…
  • 嗨@DoubleH,请参阅我的更新答案。你或许能帮上忙?谢谢!

标签: php mysql database


【解决方案1】:

你的表格应该是这样的。 &lt;input name="id[]" value="1" type="checkbox" checked=""&gt; 的值将是表的主 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."'";
}
}
?>

【讨论】:

  • 嗨@Vikas Umrao,谢谢你的回答。它为我的困境提供了思路。但是,我遇到了一些问题。我已经更新了我的问题,你能看一下吗?
  • 感谢 Vikas 的回答。我能够添加一些代码行并根据您的代码编辑一些部分。它现在正在工作。再次感谢! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 2020-03-22
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多