我在某些东西上挠头,一生无法弄清楚吗?
我正在在工作中构建一个小应用程序,就像一个迷你CMS。这是它的工作原理。
用户情况:
用户登录并可以看到他们可以访问(第1期)的类别列表,他们单击该类别,并且将有与该类别相关联的文档列表(第2期),他们单击该类别Doc,他们可以看到DOC信息(我指的是Doc/Docs只是数据库中的行商店,并且正常工作)。
问题1-我不确定如何限制用户看到某些类别或控制对这些类别的访问。
第2期 - 我已经确定了如何将'doc'分配给类别,但只有1个,而我需要的是"文档",可以在需要时能够成为多个组的一部分。
这是我设置所有内容的方式:
在"类别查看"页面上,我获取数据以显示类别:
"SELECT * FROM cat_list ORDER BY cat_title ASC"
-我需要限制用户看到的类别。
单击类别时,这就是我查询db的方式:
"SELECT * FROM cat_list WHERE cat_id = ?"
我从URL获取猫ID,所以我知道我属于该类别。
在此下方,我正在做另一个查询以显示属于该类别的文档(有效)
"SELECT doc_list.doc_title, doc_list.cat_no, doc_id FROM doc_list WHERE cat_no = ?"
-但是问题在doc_list表中我有一个称为cat_no的列,它是cat的ID,我只能在一个docs可能的多个类别的aprt时存储1个。
我希望这有意义吗?
这是我的数据库设置:
类似表:
CREATE TABLE `cat_list` (
`cat_id` int(11) NOT NULL,
`cat_title` varchar(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf16 AUTO_INCREMENT=5 ;
文档表:
CREATE TABLE `doc_list` (
`doc_id` int(11) NOT NULL,
`doc_title` varchar(50) NOT NULL,
`doc_content` text NOT NULL,
`doc_created` datetime NOT NULL,
`doc_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`user_id` int(11) NOT NULL,
`cat_no` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf16 AUTO_INCREMENT=122 ;
用户表:
CREATE TABLE `user_login` (
`id` int(11) NOT NULL,
`username` text NOT NULL,
`firstname` varchar(30) NOT NULL,
`lastname` varchar(50) NOT NULL,
`password` varchar(64) NOT NULL,
`psalt` text NOT NULL,
`role` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;
update
<?php require_once '../db_con.php';
if(!empty($_GET['cat_id'])){
$cat = intval($_GET['cat_id']);
try{
$results = $dbh->prepare("SELECT * FROM doc_list WHERE FIND_IN_SET(4, cat_no)"); // I need that number in the FIND_IN_SET to refelct the category I am in
$results->bindParam(1, $cat);
$results->execute();
} catch(Exception $e) {
echo $e->getMessage();
die();
}
$doc = $results->fetchAll(PDO::FETCH_ASSOC);
if($doc == FALSE){
echo '<div class="container">';
echo "<img src='../img/404.jpg' style='margin: 40px auto; display: block;' />";
echo "<h1 style='margin: 40px auto; display: block; text-align: center;' />Oh Crumbs! You upset the bubba!</h1>";
echo '<a href="userList.php" style="margin: 40px auto; display: block; text-align: center;">Get me outta here!</a>';
echo'</div>';
die();
}
}
?>
您可以返回这些类别中文档的值上面(4,cat_no)"我需要它说数字以作为对页面cat_id的参考,我在
问题#1-我不确定如何限制用户看到某些类别或控制他们对这些类别的访问。答案:为用户创建一些角色,并将这些角色分配给每个用户。根据用户的角色,您可以限制用户查看特定类别。
第2期 - 我已经弄清楚了如何将'doc'分配给类别,但只有1个,而我需要的是" doc",可以在需要时能够成为多个组的一部分。答案:在您的DOC_LIST表中,将CAT_NO数据类型更改为文本,并将所有类别值定义为逗号分隔。例如:对于DOC1,CAT_NO为1,2,3(其中1 2和3是不同的类别ID)。然后,您可以使用MySQL的Find_in_set来找出类别或一组类别的文档。
请参阅@prembaranwal的评论,后者帮助我回答了自己的问题
我认为您希望能够在多个类别上使用文档。
然后,您必须在doc_list和cat_list之间添加额外的表格,说:
category_documents (table) with columns:
cd_id (pk)
cat_id (key of cat_list)
doc_id (key of doc_list)
您现在可以在多个类别上使用文档。
现在在doc_list表中放置cat_no。