如何为复选框创建SQL表?

时间:2013-09-11 22:14:26

标签: mysql sql checkbox

请通过告诉我该怎么做以及如何做到这一点来解释答案。我有5个复选框,我想设置一个MYSQL表,这样我就可以保存选中的复选框,并将未选中的复选框保存为未选中状态。

这是我的php / html代码的复选框:

<html>
<head>
<title>Checkboxes</title>

<?PHP
$ch1 = 'unchecked';
$ch2 = 'unchecked';
$ch3 = 'unchecked';
$ch4 = 'unchecked';
$ch5 = 'unchecked';

if (isset($_POST['Submit1'])) {

if (isset($_POST['ch1'])) {
    $ch1 = $_POST['ch1'];

    if ($ch1 == 'net') {
        $ch1 = 'checked';
    }
}

if (isset($_POST['ch2'])) {
    $ch2 = $_POST['ch2'];

    if ($ch2 == 'word') {
        $ch2 = 'checked';
    }
}

if (isset($_POST['ch3'])) {
    $ch3 = $_POST['ch3'];

    if ($ch3 == 'excel') {
        $ch3 = 'checked';
    }
}

if (isset($_POST['ch4'])) {
    $ch4 = $_POST['ch4'];

    if ($ch4 == 'web') {
        $ch4 = 'checked';
    }
}

if (isset($_POST['ch5'])) {
    $ch5 = $_POST['ch5'];

    if ($ch5 == 'php') {
        $ch5 = 'checked';
    }
}
}

?>


</head>

<body>

<FORM NAME ="form1" METHOD ="POST" ACTION ="checkBoxes.php">

<Input type = 'Checkbox' Name ='ch1' value ="net" <?PHP print $ch1; ?>>Visual Basic .NET
<P>
<Input type = 'Checkbox' Name ='ch2' value="word" <?PHP print $ch2; ?>>Microsoft Word
<P>
<Input type = 'Checkbox' Name ='ch3' value="excel" <?PHP print $ch3; ?>>Microsoft Excel
<P>
<Input type = 'Checkbox' Name ='ch4' value="web" <?PHP print $ch4; ?>>Web Design
<P>
<Input type = 'Checkbox' Name ='ch5' value="php" <?PHP print $ch5; ?>>PHP for the Beginner
<P>


<INPUT TYPE = "Submit" Name = "Submit1"  VALUE = "Choose your books">
</FORM>

</body>
</html>

我需要多少列?我假设行将是我拥有的复选框号,并且会有所不同。

根据我对其他在线帖子的理解,这是一个真/假的布尔设置。我如何创建这样的表?

我会有三排吗?一个用于id,一个用于true,一个用于false?如果我将表格列命名为“已检查”和“未选中”,这是否重要?

2 个答案:

答案 0 :(得分:1)

这可通过以下方法解决并且可扩展,请考虑以下表结构:

USERS  
UNIQUE_NAME (id or something like Woot4Moo)  

USER_DETAILS  
USER_ID  (PK mapping to USERS table)
NAME  
VALUE    

现在您可以像这样插入表格:

insert into USERS(UNIQUE_NAME) VALUES ('Woot4Moo');  
insert into USER_DETAILS(USER_ID,NAME,VALUE) VALUES('Woot4Moo','word_check','1');
insert into USER_DETAILS(USER_ID,NAME,VALUE) VALUES('Woot4Moo','excel_check','0');
insert into USER_DETAILS(USER_ID,NAME,VALUE) VALUES('Woot4Moo','net_check','1');

现在检索:

select NAME,VALUE from USER_DETAILS  where USER_ID = 'Woot4Moo';

USER_DETAILS复合PRIMARY_KEY超过USER_ID + NAME

答案 1 :(得分:0)

我正在猜测你究竟想要什么,但听起来你所描述的是一个关联表,你有一个访客,你有通道/书籍,这些复选框表示访客与书籍/文章之间的关系。此数据库的规范化版本可以有3个表:

visitor (visitor_ID,login/ip/something)
books (book_ID, bookname)
books_read (visitor_ID, book_ID, read_flag --This could be your boolean read/not-read) 

如果books_read中存在记录,则表示该访问者已阅读该图书。

因此,如果访问者a检查了图书1,您就会在books_read中插入记录:'a','1' 然后,该表可用于查找访问者阅读的所有书籍:

SELECT *
FROM books_read
WHERE visitor_ID = 'a'

您可能希望访问者在错误点击时能够取消选中该框,在这种情况下,您需要books_read表中的第三个字段。第三个字段可以是布尔数据类型,用于读取/未读取。当访问者检查一个框时可以创建记录,并在访问者取消检查时更新记录。

从性能角度来看,我不确定在网站上实现此功能的最佳方式,但数据库结构非常简单。

编辑:如果逐章进行,你需要在一个表格或单独的书籍和章节表中合并章节,书籍/章节。