0

请在解释答案时非常描述性,告诉我该做什么以及如何做。我有 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?如果我将表列命名为“选中”和“未选中”,这有关系吗?

4

2 回答 2

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

于 2013-09-11T23:13:59.870 回答
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检查了 book 1,您将在books_read:'a','1' 该表中插入一条记录,然后可以使用该表查找访问者阅读的所有书籍:

SELECT *
FROM books_read
WHERE visitor_ID = 'a'

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

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

编辑:如果逐章进行,您需要合并章节,无论是书籍/章节一起放在一个表中还是单独的书籍和章节表中。

于 2013-09-11T22:46:11.457 回答