2017-06-03 385 views
-1

我一直在爭奪這片的代碼小時,沒有任何進展。任何人都可以幫助我解決這個問題嗎? 我正在使用我網站上的論壇頁面,提供對評論功能的評論和回覆。 點擊每個評論下的回覆按鈕,textarea會動態顯示回覆。回覆被插入數據庫,回覆ID和原始評論ID(在回覆原始評論時生成的ID)。 我現在的挑戰是,答覆任何在論壇上的評論似乎只引用最新的評論的ID(可能是因爲回覆的形式是動態生成)。因此,在我的數據庫中,他們擁有最新評論的ID。這實際上意味着取回時,答覆將全部排隊在最新評論之下。我需要的是引用回覆的評論ID的方式。 這裏是我的PHP代碼:如何使回覆評論引用評論的ID在論壇

<?php 
     require("includes/conn.php"); 
     $stmt=$conn->prepare("SELECT post_id, user, topic, post, time FROM post_tb ORDER BY time DESC"); 
      $stmt->execute(); 
      $result = $stmt->get_result(); 
      $num_of_rows = $result->num_rows; 
      if ($num_of_rows > 0){ 
       while ($row = $result->fetch_assoc()){ 
        $post_id = $row['post_id']; 
        $user = $row['user']; 
        $topic = $row['topic']; 
        $post = $row['post']; 
        $time = $row['time']; 
        $time = date('M dS, Y g:i A', strtotime($time)); 
        echo '<div> 
          <div> 
           <h5><strong>'.$user.'</strong></h5><h6>'.$time.'</h6> 
           <h5><strong>'.ucfirst($topic).'</strong></h5> 
           <p data-id="'.$post_id.'">'.$post.'</p> 
          </div>  
          <div> 
           <button type="button" class="btn btn-primary rep" id="but_rep" data-id="'.$post_id.'">Reply</button> 
          </div> 
          <form id="comment_reply" data-id="'.$post_id.'" method="post" action=""> 
           <input type="text" class="hidden" value="'.$post_id.'" id="post_id"> 
           <input type="text" class="hidden" value="'.$user.'" id="user"> 
           <textarea class="form-control" rows="3" name="post_rep" id="post_rep"></textarea> 
           <button type="submit" class="btn btn-primary" id="post_rep_sub">Submit</button> 
          </form> 
         <div/>'; 
        } 
       } 
    ?> 

我的阿賈克斯/ jQuery的位置:

$("form#comment_reply").hide();//Comment reply form hidden at page load 
//To hide reply button and show the reply form 
$(document).on('click', 'button.rep', function(e){ 
    e.preventDefault(); 
    var closestDiv = $(this).closest('div'); 
    var closestForm = $(closestDiv).next('form#comment_reply'); 
    $(closestDiv).fadeOut(); 
    $(closestForm).fadeIn(); 
}); 
//To process comment reply 
$(document).on("click", "form button#post_rep_sub", function(e){ 
     e.preventDefault(); 
    var reply = $("form textarea#post_rep").val(); 
    var name = $("input#user").val(); 
    var post_id = $("input#post_id").val(); 
    if (reply != ''){ 
     $.post('insert_post_reply.php', {'reply':reply, 'name':name, 'post_id':post_id}, function(data){ 
      if (data = 'yes'){ 
       $("form textarea#post_rep").val(""); 
       fetchCommentReply(); 
      } 
     }); 
    }else{ 
     return false; 
    } 
}); 
+0

什麼是fetchCommentReply();做? – mplungjan

+0

@ mplungjan.thanks.It這麼取的答覆基礎上,評論的ID意見已回覆的功能。問題不在於它,因爲即使警報(post_id)也不斷提醒最新評論的ID。 – banky

+0

請發表[mcve] - 如果您認爲這是一個PHP問題,那麼我看不到它。如果它只是一個jQuery問題,那麼請使用'<>'按鈕發佈PHP呈現的HTML,這樣我們就可以看到是否存在關閉問題 - 這最可能是 – mplungjan

回答

0

我認爲這個問題是在點擊處理程序「表單按鈕#post_rep_sub」

你這個說法閱讀POST_ID:var post_id = $("input#post_id").val();但這總是返回最後POST_ID無論哪個按鈕被按下。

爲了驗證我的觀點,你可以添加此觀察的JavaScript控制檯:

var test1 = $("input#post_id"); 
var test2 = $("input#post_id").length; 
console.log(test2); 

如果你看到一些> 1,那麼你知道修復點擊處理器「表單按鈕#post_rep_sub」

+0

謝謝@Tseh。讓我修改我的var post_id = $(「input.hidden」).val()以清除隱藏輸入字段中聲明的註釋ID的值。回到你的建議,一個console.log測試返回0. – banky

+0

@ Tseh ..我的意思是說console.log測試返回最新評論的id仍然 – banky

+0

你能否提供html,它是由PHP-腳本?這將允許我重現您的問題。您可以在Google Chrome中右鍵單擊,然後在菜單中選擇「檢查」。 –

0

的主要問題是,你的PHP代碼生成HTML元素(如按鈕)多次使用相同的ID!然後,jquery只附加到第一個按鈕。 這是已經在這裏爲例進行說明:

How jQuery works when there are multiple elements with the same "id"?

解決方案:用名稱屬性代替ID!


根據HTML規範,id屬性必須是唯一的頁面上(它不是一個標準的網頁設計/開發者剛剛發明)

Is using the same id multiple times on a page bad practice even when I am not parsing through the page?


讓我們來仔細看看你的php產生了什麼。您有多個具有相同ID的元素,例如,id =「but_rep」的按鈕會多次生成。請注意,您只能使用一個ID 一次只在HTML文件! 因此,你不能假設jQuery可靠地使用一個ID來附加一個事件處理程序!

     <div> 
         <div> 
          <h5><strong>user 1</strong></h5><h6>'.$time.'</h6> 
          <h5><strong>topic 1</strong></h5> 
          <p data-id="101">post text1</p> 
         </div>  
         <div> 
          <button type="button" class="btxtn btn-primary rep" id="but_rep" data-id="101">Reply</button> 
         </div> 
         <form id="comment_reply" data-id="101" method="post" action=""> 
          <input type="text" class="hidden" value="101" id="post_id"> 
          <input type="text" class="hidden" value="user 1" id="user"> 
          <textarea class="form-control" rows="3" name="post_rep" id="post_rep"></textarea> 
          <button type="submit" class="btn btn-primary" id="post_rep_sub">Submit</button> 
         </form> 
        <div/> 
        <div> 
         <div> 
          <h5><strong>user 2</strong></h5><h6>'.$time.'</h6> 
          <h5><strong>topic 2</strong></h5> 
          <p data-id="102">post text2</p> 
         </div>  
         <div> 
          <button type="button" class="btxtn btn-primary rep" id="but_rep" data-id="102">Reply</button> 
         </div> 
         <form id="comment_reply" data-id="102" method="post" action=""> 
          <input type="text" class="hidden" value="102" id="post_id"> 
          <input type="text" class="hidden" value="user 2" id="user"> 
          <textarea class="form-control" rows="3" name="post_rep" id="post_rep"></textarea> 
          <button type="submit" class="btn btn-primary" id="post_rep_sub">Submit</button> 
         </form> 
        <div/> 
+0

@Tseh非常感謝您的幫助。現在我明白了爲什麼我不斷得到相同的身份證。 但是,我試圖修改我的代碼,以生成一個具有唯一名稱屬性的回覆按鈕,其值是已回覆的評論的ID,對於回覆textarea表單也是一樣的,但是我遇到了引用name屬性的挑戰事件處理程序,因爲它不斷拋出錯誤:這是什麼即時嘗試在jQuery中: 'var post_id = $(「input#post_id」)。val(); (')';'按鈕[name:「+ post_id +」]',function(e){ e.preventDefault(); alert(「yes」); });' – banky

+0

@ banky:很榮幸能幫到你!請加快我的飲食。 –

+0

@Tseh Pls im在事件處理程序中引用了name屬性時仍然存在挑戰,因爲它一直在控制檯上拋出未捕獲的語法錯誤。請看我最後的評論 – banky