使用PHP在MySQL数据库中存储多个复选框数据

时间:2012-03-05 02:52:40

标签: php mysql denormalized

我希望将多个复选框值存储到数据库的一个字段中。 (例如,1,26,56,100)。我想知道如何实现这一点,如果我想在查询中调用变量,PHP如何从数据库中读取这些值?

基本上我正在创建一个博客应用程序(为了娱乐和体验),我希望用户能够通过复选框更改每篇博文的可见性。我知道你可能在想为什么我不为每篇博文都提供可见性字段。我理解为什么不建议这样做,但我想不出任何其他方法来做到这一点。为了解释一下:我想将这个应用程序附加到我已经构建的CMS上,基本上我有一个包含博客文章的表,然后我希望用户能够访问其站点中的不同页面并添加一个博客。那么,如果用户想要在3个不同的页面上使用相同的博客,但只希望在每个页面上显示某些帖子,该怎么办?所以这就是我现在感到困惑的原因。

4 个答案:

答案 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列表。

我会让你弄明白其余的。它非常简单,你现在拥有了所需的所有工具。您可能想要了解的唯一事项是explodeforeach

所以,你存储它们的方式取决于你。当它们以这种方式存储时,请查看爆炸分裂它们。