социальные сети — как в отличие от системы переполнения стека

я создаю как нелюбовь системы в PHP MySQL & Я также получаю сообщения от пользователей, подписавшись, присоединяясь к подписчикам. & я хочу, чтобы пользователям нравились картинки подписчиков, но я не могу получить индивидуальный идентификатор картинки.
это мой код для получения фото подписчиков

$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'];
}

а это мои фото

это таблица фотографий

это таблица фолловеров

это таблица пользователей

Thnx

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 для каждой записи.

Во входном типе submit передайте динамический идентификатор, чтобы поймать идентификатор pic, против которого будет подсчитываться подобное

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

В момент, как просто взорвать его на основе «|» и возьмите нулевое значение взорванного массива, чтобы получить идентификатор изображения. Этот тип кодов недолюбливания лучше всего использовать с помощью JQuery / AJAX. Однажды я разработал страницу, похожую на YouTube, где лайки, голоса и позиционирование видео на основе голосов были сделаны через JQuery / AJAX, а видео было перестроено в соответствии с голосами без обновления страницы.

0

Другие решения

Перво-наперво:

Ваш код кажется очень небезопасным. Вы не используете подготовленные операторы SQL для предотвращения SQL-инъекций и не экранируете значения в выводе html. Например. <h3>".$users['username']."</h3> кажется небезопасным против XSS.

Мой совет:

  • использовать подготовленные заявления
  • использовать шаблонизатор, который по умолчанию имеет экранирование (например, Twig)

По поводу вашей проблемы:

$query = "INSERT INTO likes(id,user_id,post_id) VALUES('','$id','$pics_id')";

Почему вы вставляете здесь пустой идентификатор? Разве это не должно быть хоть какой-то ценностью?

action="<?php $_SERVER['PHP_SELF'] ?>"

Это излишне. Просто удалите действие, если вы хотите опубликовать на тот же URL

Откуда берется $ id? Это правильно установлено?

join followers on photos.uid = followers.user_id

Это условие соединения правильное? Я не могу понять, к какому столбцу можно присоединиться, потому что названия столбцов не очень понятны. user_id и uid — это одно и то же в таблице подписчиков.

Трудно понять, откуда возникла проблема. Код написан не очень хорошо, и есть некоторые вещи, которые мне не понятны.

1

По вопросам рекламы [email protected]