【问题标题】:Show only data that belongs to specific data using PHP使用 PHP 仅显示属于特定数据的数据
【发布时间】:2018-04-23 02:25:25
【问题描述】:

我正在构建一个 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> 

【问题讨论】:

  • 我们能看看您已经掌握的数据库结构、查询、PHP 和 HTML 吗?这将帮助我想象你想要什么和不想要什么。话虽如此,我可能会考虑两个单独的查询:一个用于获取用户的数据,另一个用于获取与该用户帐户关联的所有 cmets。

标签: php html mysql


【解决方案1】:

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

在这种情况下,我不会使用JOIN,而是选择所需用户的注释。为此,请在 notes 表中包含 user_id 列(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?

【讨论】:

    【解决方案2】:

    我写这篇文章只是为了更清楚地说明 showdev 上面已经说过的内容。我在这里做了几个假设;您已经了解数据库基础知识,尤其是规范化以及如何使用 PHP 与 MySQL 交互。所以我不会写代码。只是想解释一下逻辑。

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

    因此,在您的notes 表中,添加一个额外的字段或属性,您可以将其命名为“student_id”。这个新字段应该是链接到(引用)students 表中学生 ID 的外键。

    因此,现在如果您想查看特定学生的所有笔记,您的查询将变得更简单。无需连接。

    SELECT * FROM notes WHERE student_id = :student_id

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

    除了使用 PHP 的 date 函数将日期插入 notes 表之外,您还可以让 MySQL 自动为您执行此操作。更改 notes 表中的 Note_Date 列。让它Note_Date TIMESTAMP DEFAULT CURRENT_TIMESTAMP。 MySQL 会自动为您插入当前日期和时间。这将为您节省一些字节的网络开销。

    【讨论】:

      猜你喜欢
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2023-04-10
      • 2019-01-02
      • 1970-01-01
      • 2021-08-10
      相关资源
      最近更新 更多