我想用它做什么? 好吧,我有一个学校项目,我们必须制作一个功能齐全的网站,人们可以在其中查看歌曲的歌词,创建一个帐户,登录帐户,评论每首歌词并编辑歌词。
所以我创建了一个名为 klyrics
的数据库
在 klyrics
中,我有以下表格。
表用户
CREATE TABLE users (
userId int(8) PRIMARY KEY AUTO_INCREMENT,
username varchar(100),
email varchar(100),
password varchar(100));
表歌词
CREATE TABLE lyrics (
lyricsId int(8) PRIMARY KEY AUTO_INCREMENT,
artist varchar(100),
song varchar(100),
cover varchar(100),
lyrics varchar(9999),
chartId int(8),
commentId int(8),
FOREIGN KEY (chartId) REFERENCES charts(chartId));
表格图表
CREATE TABLE charts (
chartId int(8) PRIMARY KEY AUTO_INCREMENT,
cover varchar(100),
artist varchar(100),
song varchar(100));
和表评论
CREATE TABLE comments (
commentId int(8) PRIMARY KEY AUTO_INCREMENT,
userId int(8),
username varchar(100),
comment varchar(9999),
commentedon DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (userId) REFERENCES users(userId));
现在我想创建一个评论系统,所以当我打开 Drake 歌曲的歌词时,我可以只评论那首歌,当我发表评论时,我想显示发帖人的用户名和评论。
我按照本教程创建了 login/register system
到目前为止我做了什么?
在我的 addcomment.php
中,我有以下代码:
<?php
include("connectdb.php");
if(isset($_POST) & !empty($_POST)){
$comment = mysqli_real_escape_string($conn, $_POST['comment']);
$username = mysqli_real_escape_string($conn, $_SESSION['username']);
$isql = "INSERT INTO comments (comment, username) VALUES ('$comment', '$username')";
$ires = mysqli_query($conn, $isql) or die(mysqli_error($conn));
if($ires){
$smsg = "Your Comment Submitted Successfully";
header('location: index.php');
}else{
$fmsg = "Failed to Submit Your Comment";
}
} ?>
问题 1: 当我提交评论时,评论进入数据库,看起来像这样:
用户名
下有一个空白点。
问题2:评论不显示,这是我显示评论的代码。
<?php
$sql = "SELECT * FROM comments WHERE commentiD = $id";
$res = mysqli_query($conn, $sql);
while ( $r = mysqli_fetch_assoc($res)) {
?>
<h1>By: <?php echo $r['username']; ?></h1>
<h1>Comment: <?php echo $r['comment']; ?></h1>
<?php } ?>
<?php
}
?>
问题 2 的小更新
正如我之前所说,我有几个带有 ID 的页面,所以当您单击 View Lyrics
时,您会转到 http://localhost/klyrics/lyrics.php?id= 2
而且我只想看到与这句歌词相关的评论。
最佳答案
创建像您一样的评论系统!您需要在 login.php 上将用户名和用户标识设置为 session 。
然后在名为 postid
的表中添加一个额外的列。
然后像这样插入数据库:
$stmt = $pdo->prepare("INSERT INTO comments(postid, userid, username, comment)
VALUES(:postid, :userid, :username, :comment)");
$stmt->bindParam(':postid', $post_id, PDO::PARAM_INT);
$stmt->bindParam(':userid', $_SESSION['userid'], PDO::PARAM_INT);
$stmt->bindParam(':username', $_SESSION['username'], PDO::PARAM_STR);
$stmt->bindParam(':comment', $comment, PDO::PARAM_STR);
$stmt->execute();
注意 commentid
是自增的,TIMESTAMP 0 ON UPDATE CURRENT_TIMESTAMP
不需要添加日期。
您可以使用 left join 或 join 从另一个表等获取有关帖子和用户的信息......如下所示:
SELECT * FROM comments
JOIN users ON comments.userid = users.userid
AND postid = :postid
ORDER BY commentid DESC";
我做的很简单。
$post_id = '1';
$sql = "SELECT * FROM comments WHERE postid = :postid";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(":postid", $post_id);
$stmt->execute();
$comment = $stmt->rowCount();
if($comment == 0){
echo "be the first commenter";
}else{
while($row = $stmt->fetch()){
//display your codes here
}
}
注意 : 我正在使用 PDO
准备好的语句,你需要在 mysqli 中做
关于php - 更新 - 两个表之间的链接以获取用户名 - mysql/php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60408822/