如何使用复选框在mySQL中输入true(1)或false(0),并在php/html表单中显示为checked?

如何使用复选框在mySQL中输入true(1)或false(0),并在php/html表单中显示为checked?,php,html,mysql,checkbox,Php,Html,Mysql,Checkbox,我有一个带有字段名Shift\u Trig的表,它意味着以1或0的形式输入true或false值。我有一个html表单,每行都有一个复选框,选中该复选框时,应在字段中输入1。我还希望该复选框反映数据库中Shift\u Trig字段中存储的当前值 我当前代码的问题是,每当我更新Shift\u Trig字段时,我都无法得到想要的结果。例如,如果我选择: ---------------------- | ROW 1 | false | ---------------------- | ROW

我有一个带有字段名
Shift\u Trig
的表,它意味着以
1
0
的形式输入
true
false
值。我有一个html表单,每行都有一个复选框,选中该复选框时,应在字段中输入
1
。我还希望该复选框反映数据库中
Shift\u Trig
字段中存储的当前值

我当前代码的问题是,每当我
更新
Shift\u Trig
字段时,我都无法得到想要的结果。例如,如果我选择:

----------------------
| ROW 1   |   false  |
----------------------
| ROW 2   |   true   |
----------------------
| ROW 3   |   false  |
----------------------
| ROW 4   |   true   |
----------------------
| ROW 5   |   true   |
----------------------
它将
更新
,如下所示:

----------------------
| ROW 1   |   true   |
----------------------
| ROW 2   |   true   |
----------------------
| ROW 3   |   true   |
----------------------
| ROW 4   |   false  |
----------------------
| ROW 5   |   false  |
----------------------
这是我的表格代码:

while($shift_query = $result_shift_query->fetch_assoc())
    {
    echo "<tr>";    
    echo "<td><input type=\"hidden\" name=\"Shift_ID[]\"></td>";
    echo "<td><input type=\"text\" name=\"Shift_Name[]\"></td>";
    echo "<td><input type=\"text\" name=\"Shift_Short_Name[]\"></td>";
    echo "<td><input type=\"text\" name=\"Shift_Color[]\"></td>";
    echo "<td><input type=\"hidden\" name=\"Shift_Trig[]\" value=\"0\"><input type=\"checkbox\" name=\"Shift_Trig[]\"";
        if($shift_query['Shift_Trig'] == '1')
            {
            echo " checked=\"checked\"";
            }
    echo " value=\"1\"></td>";
    echo "<td><input type=\"checkbox\" name=\"deleteBox[]\"></td>";
    echo "</tr>";
    }
我删除了一些代码,以使其更易于阅读,例如,在文本框中填充数据库中的字段数据

当我选择表单中的第2行和第3行,然后回显
$sql
语句时,我得到以下结果:

sql: UPDATE shift SET Shift_Name = 'None', Shift_Short_Name = 'None', Shift_Color = '#FF0000', Shift_Trig = '1' WHERE Shift_ID = '1'
sql: UPDATE shift SET Shift_Name = 'Morning (05:30 - 14:30)', Shift_Short_Name = 'AM', Shift_Color = '#FFF8AF', Shift_Trig = '1' WHERE Shift_ID = '2'
sql: UPDATE shift SET Shift_Name = 'Evening (14:30 - 23:30)', Shift_Short_Name = 'PM', Shift_Color = '#AF9BCF', Shift_Trig = '' WHERE Shift_ID = '3'
sql: UPDATE shift SET Shift_Name = 'General (07:30 - 17:30)', Shift_Short_Name = 'GEN', Shift_Color = '#ABFFB3', Shift_Trig = '' WHERE Shift_ID = '4'
sql: UPDATE shift SET Shift_Name = 'Night (18:00 - 06:00)', Shift_Short_Name = 'EMMA', Shift_Color = '#BFFAFF', Shift_Trig = '' WHERE Shift_ID = '5'
sql: UPDATE shift SET Shift_Name = 'Training', Shift_Short_Name = 'TRN', Shift_Color = '#FFD9BF', Shift_Trig = '' WHERE Shift_ID = '6'
sql: UPDATE shift SET Shift_Name = 'Day Off', Shift_Short_Name = 'OFF', Shift_Color = '#FFD859', Shift_Trig = '' WHERE Shift_ID = '7'
发生的事情是有意义的,因为第一个复选框没有被选中,它没有被传递到
$\u POST
数据,但是如何编写代码以获得所需的结果呢


编辑:我添加了:
,但现在我得到了显示为选中状态的每秒复选框。

您需要在HTML中为复选框指定一个显式索引:

$i = 0;
while($shift_query = $result_shift_query->fetch_assoc())
    {
    echo "<tr>";    
    echo "<td><input type=\"hidden\" name=\"Shift_ID[]\"></td>";
    echo "<td><input type=\"text\" name=\"Shift_Name[]\"></td>";
    echo "<td><input type=\"text\" name=\"Shift_Short_Name[]\"></td>";
    echo "<td><input type=\"text\" name=\"Shift_Color[]\"></td>";
    echo "<td><input type=\"checkbox\" name=\"Shift_Trig[$i]\"";
        if($shift_query['Shift_Trig'] == '1')
            {
            echo " checked=\"checked\"";
            }
    echo " value=\"1\"></td>";
    echo "<td><input type=\"checkbox\" name=\"deleteBox[$i]\"></td>";
    echo "</tr>";
    $i++;
    }

其余的更新代码保持不变。

考虑这种方法:
。如果选中该复选框,它将覆盖隐藏值,否则,将发送隐藏值。在我看来,在这种情况下,最符合逻辑的
$id
应该是移位的id,而不是某个索引。(编辑:还有,看看。)@DCoder我刚刚读了这篇文章,它也提出了同样的建议。我要试试看。@d为了编辑问题,由于某种原因,它不起作用:/n您错过了隐藏输入和复选框基于$id具有相同名称的部分。实际上,我建议对HTML结构进行更彻底的更改(将每个
shift
放入一个单独的数组中,而不是依赖此基于索引的解决方案).啊,我知道我现在错过了$I,这是有道理的。我不确定你将每个
shift
放入一个单独的数组是什么意思,但我很想知道你的意思。正如你所看到的,我已经为这个问题标上了解决方案,但是我仍然非常感谢你的时间和帮助:)谢谢你的回答。你能告诉我更新查询是什么样的吗?这就解决了问题!我把它标记为已解决,谢谢你的帮助,我今天学到了一些有价值的东西!
$i = 0;
while($shift_query = $result_shift_query->fetch_assoc())
    {
    echo "<tr>";    
    echo "<td><input type=\"hidden\" name=\"Shift_ID[]\"></td>";
    echo "<td><input type=\"text\" name=\"Shift_Name[]\"></td>";
    echo "<td><input type=\"text\" name=\"Shift_Short_Name[]\"></td>";
    echo "<td><input type=\"text\" name=\"Shift_Color[]\"></td>";
    echo "<td><input type=\"checkbox\" name=\"Shift_Trig[$i]\"";
        if($shift_query['Shift_Trig'] == '1')
            {
            echo " checked=\"checked\"";
            }
    echo " value=\"1\"></td>";
    echo "<td><input type=\"checkbox\" name=\"deleteBox[$i]\"></td>";
    echo "</tr>";
    $i++;
    }
    if (!isset($trig[$i])) { $trig[$i] = 0; }