saken1414
@saken1414
Backend developer

Система лайков. Как передать конкретный post_id на js файл?

Реализую соц. сеть. В данный момент делаю систему лайков. Возник некоторые сложности, помогите.
Суть: Вывод постов осуществляется с помощью функций getPosts(). Он выводит все посты всех юзеров через цикл while в обратном порядке(начиная со старых к новому. Как обычно).

Теперь, когда нажимаю на кнопку like он обновляет лайк в БД только самого свежего поста. Проблема в том что, когда передаю post_id на js, в нем хранится id самого свежего поста. Таким образом лайк работает только на свежем посте. Как передать id конкретного поста на js?

Функция getPosts()
function getPosts() {
    global $con;
    $per_page = 4;

    if(isset($_GET['page'])) {
        $page = $_GET['page'];
    }
    else {
        $page = 1;
    }

    $start_from = ($page - 1) * $per_page;
    $get_posts = "select * from posts ORDER by 1 DESC LIMIT $start_from, $per_page";
    $run_posts = mysqli_query($con, $get_posts);

    while($row_posts = mysqli_fetch_array($run_posts)) {
        $post_id = $row_posts['post_id'];
        $user_id = $row_posts['user_id'];
        $content = $row_posts['post_content'];
        $upload_image = $row_posts['upload_image'];
        $post_date = $row_posts['post_date'];
        $post_date = date("H:i   F j, Y", strtotime($post_date));
        $post_like = $row_posts['post_like'];
        $post_com = $row_posts['post_com'];

        $user = "select * from users where user_id='$user_id' AND posts='yes'";
        $run_user = mysqli_query($con, $user);
        $row_user = mysqli_fetch_array($run_user);

        $user_Fname = $row_user['f_name'];
        $user_Lname = $row_user['l_name'];
        $user_image = $row_user['user_image'];

        $u_e = $_SESSION['user_email'];
        $cur_user = mysqli_query($con, "select user_id from users where user_email='$u_e'");
        $cur_user_row = mysqli_fetch_array($cur_user);
        $cur_user_id = $cur_user_row['user_id'];

        $get_like = mysqli_query($con, "select status from post_likes where post_id='$post_id' AND user_id='$cur_user_id'");
        $get_like_row = mysqli_fetch_array($get_like);

        $l_status = $get_like_row['status'];
        ($l_status) ? $isActive = true : $isActive = false;

        //Displaying posts from database

        if($content == '' && strlen($upload_image) >= 1) {
            echo "
            
            <div class='post_container'>

                <div class='post_info'>

                    <div class='post_user_img'>
                        <img src='users/$user_image' class='post_ava'>
                    </div>
                    <div class='post_user_info'>
                        <p><strong><a href='user_profile.php?u_id=$user_id'>$user_Fname $user_Lname</a></strong></p>
                        <span>$post_date</span>
                    </div>

                </div>

                <div class='post_imgAndContent'>
                    <center><img src='imagepost/$upload_image'></center>
                </div>

                <div class='comment_btn'>
                    <a href='single.php?post_id=$post_id'><button><img src='assets/img/commentw.svg' class='svg_img_btn'> <span>$post_com</span></button></a>
                </div>
               <div class='comment_btn like'>
                    <button class='like'><svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' xmlns:svgjs='http://svgjs.com/svgjs' version='1.1' width='20' height='20' x='0' y='0' viewBox='0 0 51.997 51.997' style='enable-background:new 0 0 512 512' xml:space='preserve' class='svg_img_btn'><g><path xmlns='http://www.w3.org/2000/svg' d='M51.911,16.242C51.152,7.888,45.239,1.827,37.839,1.827c-4.93,0-9.444,2.653-11.984,6.905  c-2.517-4.307-6.846-6.906-11.697-6.906c-7.399,0-13.313,6.061-14.071,14.415c-0.06,0.369-0.306,2.311,0.442,5.478  c1.078,4.568,3.568,8.723,7.199,12.013l18.115,16.439l18.426-16.438c3.631-3.291,6.121-7.445,7.199-12.014  C52.216,18.553,51.97,16.611,51.911,16.242z' fill='#ffffff' data-original='#000000' style='' class='"; if($isActive) echo "liked'"; echo "/><g xmlns='http://www.w3.org/2000/svg'></g></g></svg> <span class='like_span'>$post_like</span></button>
                </div>
            
            </div>

            ";
        }
    }
    include("pagination.php");
}


JavaScript это тестовый код. Не мог передать конкретную id поста.
$("button.like").on("click", function () {
    var post_id = document.getElementById('forJS').innerHTML;

    alert(post_id);

    var l_status = $($l_status).val();
    var post_likes = $($post_like).val();
    var $user_id = $($cur_user_id).val();

    if(!l_status) {

        $post_like++;
        $('span.like_span').html($post_like);
    }
    else {
        
    }
    
})
  • Вопрос задан
  • 196 просмотров
Решения вопроса 1
@none7
Добавьте внутрь <div class='post_container'>
<input type="hidden" name="post_id" value="$post_id" />

И в JS
var post_id=$(this).parents(".post_container").children("input[name=post_id]").val());

---------------------
Или можно сделать по совету Сергей и добавить в button атрибут data-post-id="$post_id" и вытащить через $(this).data("post-id"). И наверное так даже правильнее для html5.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы