使用PHP仅显示属于特定数据的数据

时间:2017-11-09 22:50:24

标签: php html mysql

我正在构建一个MYSQL生成的PHP应用程序。我有一张叫做学生的桌子和一张叫做笔记的桌子。笔记表将用于输入有关被通知学生的任何额外信息,以便顾问可以在他们下次向学生提出建议时返回并查看信息。我不知道该如何解决这个问题。

我希望顾问只看到他们建议的特定学生的笔记,而不是其他人。我正在使用内部联接来连接两个表以及SELECT语句。来自两个表的信息将以HTML格式发布到备注页面。如何插入数据以便正确查看?我在这里先向您的帮助表示感谢。

这是我的选择查询(不是整页)。此页面显示了笔记。

<?php
$query = "

SELECT
notes.Note_Title,
notes.Note_Desc,
notes.Note_Cont,
notes.Note_Date
from notes
INNER JOIN students 
ON notes.id = students.id
Where students.id = 'id'";

try {

$stmt = $db->prepare($query);
$stmt->execute();   
}
catch(PDOException $ex)

{

die("Opps that Query didn't work out: " . $ex->getMessage());

}
while($row = $stmt->fetch()){

echo'<div>';
echo'<tr>';
   echo '<td><h5><a href="notes_view.php?id='.$row['id'].'">'.$row['Note_Title'].'</a></h5></td>';
   echo '<td><p>Note created on '.date('JS M Y H:i:s', strtotime($row['Note_Date'])).'</p></td>';
   echo '<p>'.$row['Note_Desc'].'</p>';
   echo '<p><a href="notes_view.php?id='.$row['id'].'">Read Note</a></p>';
   echo '<p><a href="delete.php?id='.$row['id'].'">Delete note</a></p>';
   echo '<p><a href="edit_notes.php?id='.$row['id'].'">Edit</a></p>';
   echo '<hr width="100%">';
echo'</div>';
   }


$query = "INSERT INTO notes (
id,
Note_Title,
Note_Desc,
Note_Cont,
Note_Date

) VALUES (
:id,
:Note_Title,
:Note_Desc,
:Note_Cont,
:Note_Date
)
";

$query_go = array(
':id' => $id,
':Note_Title' => $Note_Title,
':Note_Desc' =>  $Note_Desc,
':Note_Cont' =>  $Note_Cont,
':Note_Date' =>  date('Y-m-d H:i:s')
);

try {

$stmt = $db->prepare($query);
$result = $stmt->execute($query_go);
}
catch(PDOException $ex)

{

die("Opps that query didn't work out: " . $ex->getMessage());

}
header('location: index.php?action=added');
exit;
}
}
?>

<form action='' method='POST'>

<input type='hidden' name='id' id='id' value='<?php if(isset($error)){echo $_POST['id'];}?>'>
<p><label>Note Title:</label><br />
<input type='text' name='Note_Title' value='<?php if(isset($error)){echo $_POST['Note_Title'];}?>'></p></td>

<p><label>Note description:</label><br />
<textarea name="Note_Desc" cols="40" rows="11"><?php if(isset($error)){echo $_POST['Note_Desc'];}?></textarea></p></td>

<p><label>Note content:</label><br />
<textarea name="Note_Cont" cols="70" rows="11"><?php if(isset($error)){echo $_POST['Note_Cont'];}?></textarea></p></td>

<p><input type="submit" name="submit" value="submit" ></p>
</form> 

2 个答案:

答案 0 :(得分:1)

根据您显示的代码,您的网页似乎会显示所选用户的注释。这代表"one to many"关系;一个用户可以有很多笔记,每个笔记只能与一个用户关联。

在这种情况下,我只会选择所需用户的注释,而不是使用JOIN。为此,请在user_id表格中添加notes列(foreign key):

`id`
`user_id`,
`title`,
`description`,
`content`,
`date`

当您进入用户注释页面时,请选择该用户的所有注释:

SELECT * from `notes` WHERE `user_id`=:user_id;

编辑记事时,您并不真正需要user_id(除非您允许将记事重新分配给其他用户)。您可以通过自己唯一的id引用每个音符。像这样:

<form action='' method='POST'>

    <input type='hidden' name='id' value='<?=$note['id']?>'>

    ....

</form>

顺便说一下,您可以使用JOIN在用户列表中显示每个用户的备注数量。像这样:

SELECT u.*,
       COUNT(n.`id`) as `note_count`
FROM `users` u
LEFT JOIN `notes` n ON (n.`user_id`=u.`id`)
GROUP BY u.`id`;

另见How to store a one to many relation in my sql database?

答案 1 :(得分:0)

我写这篇文章只是为了增加showdev已经说过的内容。我在这里做了几个假设;您已经了解了数据库基础知识,特别是规范化以及如何使用PHP与MySQL交互。所以我不会写代码。只是试图解释逻辑。

您有两个表studentsnotes。两者之间的关系是one-to-many关系。这仅仅意味着一个学生可以拥有与他/她相关的许多笔记。但另一方面,每个单个笔记将始终属于一个特定的学生。

因此,在notes表格中,添加一个名为“student_id”的字段或属性。这个新字段应该是一个外键,它链接到(引用)students表中学生的id。

现在,如果您想查看特定学生的所有笔记,您的查询将变得更简单。不需要加入。

SELECT * FROM notes WHERE student_id = :student_id

当然,当您插入新笔记时,您必须包含特定笔记所属学生的ID。

而不是使用PHP的日期函数将日期插入到notes表中,您可以允许MySQL自动为您执行此操作。更改notes表中的Note_Date列。设为Note_Date TIMESTAMP DEFAULT CURRENT_TIMESTAMP。 MySQL会自动为您插入当前日期和时间。这将节省一些字节的网络开销。