我希望将多个复选框值存储到数据库的一个字段中。 (例如,1,26,56,100)。我想知道如何实现这一点,如果我想在查询中调用变量,PHP如何从数据库中读取这些值?
基本上我正在创建一个博客应用程序(为了娱乐和体验),我希望用户能够通过复选框更改每篇博文的可见性。我知道你可能在想为什么我不为每篇博文都提供可见性字段。我理解为什么不建议这样做,但我想不出任何其他方法来做到这一点。为了解释一下:我想将这个应用程序附加到我已经构建的CMS上,基本上我有一个包含博客文章的表,然后我希望用户能够访问其站点中的不同页面并添加一个博客。那么,如果用户想要在3个不同的页面上使用相同的博客,但只希望在每个页面上显示某些帖子,该怎么办?所以这就是我现在感到困惑的原因。
答案 0 :(得分:13)
即使我不赞成保存这样的数据,但如果您真的想这样做,那么这就是您可以做的。我建议你有一个非规范化的表并存储你的vals
在您的HTML中,您可以拥有这样的复选框(考虑到您正在存储某种类型的ID)
<input type="checkbox" name="ids[]" value"1" />
<input type="checkbox" name="ids[]" value"24" />
<input type="checkbox" name="ids[]" value"56" />
<input type="checkbox" name="ids[]" value"100" />
在php端你可以使用函数implode将id形成一个字符串,如下所示(考虑到你正在进行POST)
$ids = implode(",",$_POST["ids"]);
从数据库读取的位置,您可以将值从db转换为类似
的数组$ids_array = explode(",",$row->ids);
我希望这会有所帮助
答案 1 :(得分:2)
首先创建数据库:
create table employee(id int(10) not null, name varchar(20), hobbie varchar(20),
worked varchar(20), primary key(id));
之后创建一个像这样的html页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1 /DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<body background="blue">
<form action="check.php" method="post">
Name: <input name="Name" type="text" id="Name" /><br />
<br />
<br />
Which you do you want to likes?<br />
<input type="checkbox" name="Hobbies[]" value="Books" />Books<br />
<input type="checkbox" name="Hobbies[]" value="Movies" />Movies<br />
<input type="checkbox" name="Hobbies[]" value="Sports" />Sports<br />
<input type="checkbox" name="Hobbies[]" value="Games" />Games<br />
<input type="checkbox" name="Hobbies[]" value="Travelling" />Travelling<br />
worked: <input name="Worked" type="text" id="Worked" /><br />
<br />
<input type="submit" name="submit" value="Submit" />
<input type="reset" name="reset" value="reset" />
</form>
</body>
</html>
之后我们做了mysql connect.php
<?php
$server="localhost";
$user="root";
$password="";
$database="empcheckbox";
$link=mysql_connect($server,$user,$password) or die("the connection is terminated please check me!".mysql_error());
mysql_select_db($database,$link);
?>
之后我们必须创建一个check.php,就好了
<?php
if(isset($_POST['submit']))
{
$name=mysql_real_escape_string($_POST['Name']);
$worked=mysql_real_escape_string($_POST['Worked']);
$hobb= $_POST['Hobbies'];
if(empty($hobb))
{
echo("<p>You didn't select any any hobby.</p>\n");
}
else
{
$N = count($hobb);
echo("<p>You selected $N Hobbies(s): ");
for($i=0; $i < $N; $i++)
{
$var1=$hobb[$i];
include ('connect.php');
$table = "INSERT INTO employee (name, hobbies, worked) ".
"VALUES ('$name', '$var1', '$worked')";
mysql_query($table) or die(mysql_error());
$inserted_fid = mysql_insert_id();
mysql_close();
}
echo "successfully uploaded!..";
}
}
else
{
echo "error please check ur code";
}
答案 2 :(得分:1)
完美的解决方案是创建由@OMG和@Michael评论的规范化表格。
但这是你刚才提出的问题的答案
$ids = implode(", ", $_POST['ids']);
将其存储在MySQL表中。您可以使用LIKE命令查询表并使用explode来返回数组中的ID。
$query = "SELECT * FROM <table> WHERE ids LIKE '%,2, %'"; // get posts having id 2
$id = explode(", ", $result->ids);
答案 3 :(得分:-1)
您将要了解PHP和MySQL的基础知识。
查看tizag.com或w3schools.com或其他一些网站(教程很丰富)。
这是基础知识 - 记住这一点,因为它会帮助你理解。
MySQL是一个数据库。数据库通常用于存储数据。 PHP是一种编程语言。它通常用于编程。
因此,一些出色的开发人员已经开始处理从PHP与数据库通信的步骤。您所要做的就是建立连接。
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con) {
die('Could not connect: ' . mysql_error());
} else { echo "Connection made"; }
?>
请参阅mysql_connect via W3Schools
好的,你在这里做了什么,是否已经连接到数据库SERVER。您尚未选择数据库。把它想象成去电影院,你还是要拍电影观看。
所以,现在我们连接到我们的数据库:
mysql_select_db("my_db", $con); //Notice we're using our connection, "$con"
请参阅mysql_select_db via W3Schools
连接到数据库后,您就可以从中获取一些信息了 为此,您需要创建SQL查询。
有些事情:
$sql = "SELECT article_id FROM user_view_blog_posts WHERE user_id = '$user_id'";
请参阅the SELECT statement via W3Schools
根据您的表格设置方式,这将为您提供当前用户的列表。我假设您已拥有用户的ID(或获取方式),因为他们可以为网站定义自己的首选项。
现在你有了SQL查询来获取文章,你需要查询数据库。
$result = mysql_query($sql);
// Now, get the data
while($row = mysql_fetch_array($result)) {
$articles[] = $row['article_id'];
}
这应该会为您提供所需的ID列表。
我会让你弄明白其余的。它非常简单,你现在拥有了所需的所有工具。您可能想要了解的唯一事项是explode
和foreach
。
所以,你存储它们的方式取决于你。当它们以这种方式存储时,请查看爆炸分裂它们。