Like/unlike 系统在 PHP
Like/unlike system in PHP
我正在 PHP 和 mysqli 中创建一个喜欢不喜欢的系统;我还在 uid 的帮助下通过加入关注者和照片 table 来获取用户关注者的帖子。现在我希望用户喜欢关注者的图片,但我无法获取图片的个人 ID。
这是我获取用户关注者图片的代码:
$query = "SELECT photos.image_url,photos.email,photos.username,photos.uid,photos.id FROM photos join followers on photos.uid = followers.user_id where followers.uid = '$id' ORDER BY photos.image_url DESC ";
$fire = mysqli_query($con,$query) or die("can not fetch data from database ".mysqli_error($con));
if (mysqli_num_rows($fire)>0) {
$row = mysqli_fetch_assoc($fire);
$follower_email = $row['email'];
$pics_id = $row['id'];
while ( $users = mysqli_fetch_assoc($fire)) {?>
<div class="card" >
<div class="float">
<div class="avatar">
<img src="<?php echo $avatar_image; ?>" class="avatar">
</div>
<div class="username" style="">
<p><?php echo $users['username']; ?></p>
</div>
</div>
<img src="<?php echo $users['image_url']?>" alt="Avatar" style="width:100%">
<div class="container">
<h4><b><?php echo "<div><a href='users.php?id=".$users['uid']."'>
<h3>".$users['username']."</h3>
</div></a>";?></b></h4>
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="POST">
<input type="submit" name="like" value="like">
</form>
</div>
</div>
</div><br>
<?php }
}
?>
这是我插入喜欢的代码
<?php
if (isset($_POST['like'])) {
$query = "INSERT INTO likes(id,user_id,post_id) VALUES('','$id','$pics_id')";
$fire = mysqli_query($con,$query)or die();
}
?>
这是我获取所有变量的代码
<?php
$query = "SELECT * FROM photos";
$fire = mysqli_query($con,$query) or die("can not fetch data from database ".mysqli_error($con));
if (mysqli_num_rows($fire)>0) {
$users = mysqli_fetch_assoc($fire);
$pic_id = $users['id'];
}
?>
<?php
$query = "SELECT * FROM users WHERE email='$email'";
$fire = mysqli_query($con,$query) or die("can not fetch data from database ".mysqli_error($con));
if (mysqli_num_rows($fire)>0) {
$row = mysqli_fetch_assoc($fire);
$id = $row['id'];
}?>
<?php
$query = "SELECT * FROM users WHERE id='$id'";
$fire = mysqli_query($con,$query) or die("can not fetch data from database ".mysqli_error($con));
if (mysqli_num_rows($fire)>0) {
$users = mysqli_fetch_assoc($fire);
$id = $users['id'];
$fullname = $users['fullname'];
$avatar_image = $users['avatar_path'];
}
?>
<?php
$query = "SELECT * FROM photos WHERE email='$email'";
$fire = mysqli_query($con,$query) or die("can not fetch data from database ".mysqli_error($con));
if (mysqli_num_rows($fire)>0) {
$row = mysqli_fetch_assoc($fire);
$photos_id = $row['id'];
$photos_uid = $row['uid'];
$photos_email = $row['email'];
}?>
<?php
$query = "SELECT * FROM photos WHERE id='$id'";
$fire = mysqli_query($con,$query) or die("can not fetch data from database ".mysqli_error($con));
if (mysqli_num_rows($fire)>0) {
$users = mysqli_fetch_assoc($fire);
$username = $users['username'];
}
?>
<?php
$query = "SELECT * FROM followers WHERE id='$id'";
$fire = mysqli_query($con,$query) or die("can not fetch data from database ".mysqli_error($con));
if (mysqli_num_rows($fire)>0) {
$row = mysqli_fetch_assoc($fire);
$user_id = $row['user_id'];
$follower_id = $row['follower_id'];
$uid = $row['uid'];
}
这些是我的 table 照片
这是照片 table:
这是关注者table:
这是用户 table:
要事第一:
您的代码似乎很不安全。您既没有使用准备好的 sql 语句来防止 SQL-注入,也没有转义 html 输出中的值。例如。 <h3>".$users['username']."</h3>
似乎对 XSS 不安全。
我的建议:
- 使用准备好的语句
- 使用默认转义的模板引擎(例如 Twig)
关于您的问题:
$query = "INSERT INTO likes(id,user_id,post_id) VALUES('','$id','$pics_id')";
为什么要在此处插入一个空 ID?这不应该至少有一些价值吗?
action="<?php $_SERVER['PHP_SELF'] ?>"
这是多余的。如果您想 post 到相同的 url
,只需删除操作
$id 来自哪里?是否设置正确?
join followers on photos.uid = followers.user_id
这个加入条件是否正确?我无法弄清楚,哪个列是正确的加入,因为列的名称不是很清楚。 user_id 和 uid 在 followers table.
中基本相同
很难弄清楚问题出在哪里。代码写得不是很好,有些地方不是很清楚
您的代码和查询使您无法获得正确答案。进行以下更改,这将使您的查询更紧凑,并使用准备好的 sql 语句或转义值来防止注入。
$query = "SELECT *
FROM photos as 'ph'
inner join followers as 'fol'
on fol.user_id = ph.uid
where fol.uid = '$id'
ORDER BY ph.image_url DESC ";
现在去掉这三行代码
$row = mysqli_fetch_assoc($fire);
$follower_email = $row['email'];
$pics_id = $row['id'];
因为以上不是必需的,您可以在 while 循环中为每个条目获取相同的值。
在输入类型 submit 中,传递一个动态 id 以捕获将像这样计算喜欢的 pic id
<input type="submit" id="<?=$users['id'];?>|like" value="like">
点赞的时候在"|"的基础上爆一下并取分解数组的第零个值来获取 pic id 。这种喜欢不喜欢的代码最好使用 JQuery / AJAX 。我曾经开发过一个 YouTube 点赞页面,视频的点赞、投票和基于投票的定位都是通过 JQuery / AJAX 完成的,视频根据投票重新排列,甚至没有页面刷新。
我正在 PHP 和 mysqli 中创建一个喜欢不喜欢的系统;我还在 uid 的帮助下通过加入关注者和照片 table 来获取用户关注者的帖子。现在我希望用户喜欢关注者的图片,但我无法获取图片的个人 ID。 这是我获取用户关注者图片的代码:
$query = "SELECT photos.image_url,photos.email,photos.username,photos.uid,photos.id FROM photos join followers on photos.uid = followers.user_id where followers.uid = '$id' ORDER BY photos.image_url DESC ";
$fire = mysqli_query($con,$query) or die("can not fetch data from database ".mysqli_error($con));
if (mysqli_num_rows($fire)>0) {
$row = mysqli_fetch_assoc($fire);
$follower_email = $row['email'];
$pics_id = $row['id'];
while ( $users = mysqli_fetch_assoc($fire)) {?>
<div class="card" >
<div class="float">
<div class="avatar">
<img src="<?php echo $avatar_image; ?>" class="avatar">
</div>
<div class="username" style="">
<p><?php echo $users['username']; ?></p>
</div>
</div>
<img src="<?php echo $users['image_url']?>" alt="Avatar" style="width:100%">
<div class="container">
<h4><b><?php echo "<div><a href='users.php?id=".$users['uid']."'>
<h3>".$users['username']."</h3>
</div></a>";?></b></h4>
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="POST">
<input type="submit" name="like" value="like">
</form>
</div>
</div>
</div><br>
<?php }
}
?>
这是我插入喜欢的代码
<?php
if (isset($_POST['like'])) {
$query = "INSERT INTO likes(id,user_id,post_id) VALUES('','$id','$pics_id')";
$fire = mysqli_query($con,$query)or die();
}
?>
这是我获取所有变量的代码
<?php
$query = "SELECT * FROM photos";
$fire = mysqli_query($con,$query) or die("can not fetch data from database ".mysqli_error($con));
if (mysqli_num_rows($fire)>0) {
$users = mysqli_fetch_assoc($fire);
$pic_id = $users['id'];
}
?>
<?php
$query = "SELECT * FROM users WHERE email='$email'";
$fire = mysqli_query($con,$query) or die("can not fetch data from database ".mysqli_error($con));
if (mysqli_num_rows($fire)>0) {
$row = mysqli_fetch_assoc($fire);
$id = $row['id'];
}?>
<?php
$query = "SELECT * FROM users WHERE id='$id'";
$fire = mysqli_query($con,$query) or die("can not fetch data from database ".mysqli_error($con));
if (mysqli_num_rows($fire)>0) {
$users = mysqli_fetch_assoc($fire);
$id = $users['id'];
$fullname = $users['fullname'];
$avatar_image = $users['avatar_path'];
}
?>
<?php
$query = "SELECT * FROM photos WHERE email='$email'";
$fire = mysqli_query($con,$query) or die("can not fetch data from database ".mysqli_error($con));
if (mysqli_num_rows($fire)>0) {
$row = mysqli_fetch_assoc($fire);
$photos_id = $row['id'];
$photos_uid = $row['uid'];
$photos_email = $row['email'];
}?>
<?php
$query = "SELECT * FROM photos WHERE id='$id'";
$fire = mysqli_query($con,$query) or die("can not fetch data from database ".mysqli_error($con));
if (mysqli_num_rows($fire)>0) {
$users = mysqli_fetch_assoc($fire);
$username = $users['username'];
}
?>
<?php
$query = "SELECT * FROM followers WHERE id='$id'";
$fire = mysqli_query($con,$query) or die("can not fetch data from database ".mysqli_error($con));
if (mysqli_num_rows($fire)>0) {
$row = mysqli_fetch_assoc($fire);
$user_id = $row['user_id'];
$follower_id = $row['follower_id'];
$uid = $row['uid'];
}
这些是我的 table 照片
这是照片 table:
这是关注者table:
这是用户 table:
要事第一:
您的代码似乎很不安全。您既没有使用准备好的 sql 语句来防止 SQL-注入,也没有转义 html 输出中的值。例如。 <h3>".$users['username']."</h3>
似乎对 XSS 不安全。
我的建议:
- 使用准备好的语句
- 使用默认转义的模板引擎(例如 Twig)
关于您的问题:
$query = "INSERT INTO likes(id,user_id,post_id) VALUES('','$id','$pics_id')";
为什么要在此处插入一个空 ID?这不应该至少有一些价值吗?
action="<?php $_SERVER['PHP_SELF'] ?>"
这是多余的。如果您想 post 到相同的 url
,只需删除操作$id 来自哪里?是否设置正确?
join followers on photos.uid = followers.user_id
这个加入条件是否正确?我无法弄清楚,哪个列是正确的加入,因为列的名称不是很清楚。 user_id 和 uid 在 followers table.
中基本相同很难弄清楚问题出在哪里。代码写得不是很好,有些地方不是很清楚
您的代码和查询使您无法获得正确答案。进行以下更改,这将使您的查询更紧凑,并使用准备好的 sql 语句或转义值来防止注入。
$query = "SELECT *
FROM photos as 'ph'
inner join followers as 'fol'
on fol.user_id = ph.uid
where fol.uid = '$id'
ORDER BY ph.image_url DESC ";
现在去掉这三行代码
$row = mysqli_fetch_assoc($fire);
$follower_email = $row['email'];
$pics_id = $row['id'];
因为以上不是必需的,您可以在 while 循环中为每个条目获取相同的值。
在输入类型 submit 中,传递一个动态 id 以捕获将像这样计算喜欢的 pic id
<input type="submit" id="<?=$users['id'];?>|like" value="like">
点赞的时候在"|"的基础上爆一下并取分解数组的第零个值来获取 pic id 。这种喜欢不喜欢的代码最好使用 JQuery / AJAX 。我曾经开发过一个 YouTube 点赞页面,视频的点赞、投票和基于投票的定位都是通过 JQuery / AJAX 完成的,视频根据投票重新排列,甚至没有页面刷新。