请通过告诉我该怎么做以及如何做到这一点来解释答案。我有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?如果我将表格列命名为“已检查”和“未选中”,这是否重要?
答案 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
表中的第三个字段。第三个字段可以是布尔数据类型,用于读取/未读取。当访问者检查一个框时可以创建记录,并在访问者取消检查时更新记录。
从性能角度来看,我不确定在网站上实现此功能的最佳方式,但数据库结构非常简单。
编辑:如果逐章进行,你需要在一个表格或单独的书籍和章节表中合并章节,书籍/章节。