喜欢/不像PHP中的系统

问题描述 投票:0回答:2

我在PHP和mysqli中创建了一个不喜欢的系统;我也是通过在uid的帮助下加入粉丝和照片表来获取用户粉丝的帖子。现在我希望用户喜欢关注者的图片,但我无法获得图片的个人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'];
}

这些是我的桌子照片

这是照片表:

这是粉丝表:

这是用户表:

php sql mysqli social-networking
2个回答
0
投票

您的代码和查询阻止您获得正确的答案。进行以下更改将使您的查询更紧凑,并使用准备好的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循环中为每个条目获取相同的值。

在输入类型提交中,传递动态ID以捕获像这样计数的pic id

<input type="submit" id="<?=$users['id'];?>|like" value="like">

在喜欢的时候,只是在“|”的基础上爆炸它并获取爆炸数组的第零个值以获取pic id。使用JQuery / AJAX时,这种类似的不喜欢代码应该是最好的。我曾经开发过类似YouTube的页面,其中基于投票的喜欢,投票和视频定位均通过JQuery / AJAX完成,视频根据投票重新安排,甚至没有页面刷新。


1
投票

首先要做的事情:

你的代码似乎非常不安全。您既没有使用预处理的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'] ?>"

这是多余的。如果您想要发布到同一个网址,请删除该操作

$ id来自哪里?它设置得当吗?

join followers on photos.uid = followers.user_id

这个连接条件是否正确?我无法弄清楚,哪一列是加入的权利,因为列的名称不是很清楚。 user_id和uid在关注者表中基本相同。

很难弄清问题的来源。代码编写得不是很好,有些东西对我来说并不清楚。

© www.soinside.com 2019 - 2024. All rights reserved.