2012-01-01 2 views
0

У меня есть страница, которая позволяет пользователям комментировать ответы, очень похожие на stackoverflow. Все работает, кроме writecomment.php, который в идеале должен получить вопрос и ответ и разместить соответствующие комментарии в правильном вопросе и под правильными ответами. Мой текущий файл writecomment.php неверен, но я действительно не знаю, как заставить его работать правильно.Jquery load function loop

Jquery:

<script type='text/javascript'> 
$('document').ready(function() { 
$('.commentContainer').load('../writecomment.php'); 

$("form").on("submit", function (e) { 
    e.preventDefault(); 

    var $form = $(this); 
    $.ajax({ 
     "url": $form.attr("action"), 
     "data": $form.serialize(), 
     "type": $form.attr("method"), 
     success: function() { 
      $('.commentContainer').load('../writecomment.php'); 
      $('.commentBox').val(""); 
     } 
    }); 
}); 
}); 



</script> 

HTML:

<div class='answerContainer' > 
        <p name='singleAnswer'>$answer[$f]</p> 
        <div class='commentContainer'></div> 
        <form method='POST' action='../comment.php'> 
        <input type='hidden' name='record_id' value='$answerid[$f]' /> 
        <input type='hidden' name='question_id' value='$q' /> 
        <textarea class='commentBox' wrap='soft' name='comment'></textarea> 
        <input type='submit' value='comment' class='submitCommentBox'> 
        </form> 
        </div> 

writecomment.php:

<?php 

include 'connect.php'; 
$questionid= 
$answerid= 


$query4=mysql_query("SELECT * FROM comments WHERE questionid='$q' AND answerid='$answerid'"); 
while ($row=mysql_fetch_assoc($query4)){ 

$comment=$row['comment']; 
$user=$row['user']; 
$time=$row['time']; 

echo "<div id='singleComment'><b>$user</b>$comment</div>"; 
} 

>

+0

Почему '" SELECT * FROM комментарии WHERE questionid = '$ q' И answerid = '$ answerid' "'? '' SELECT * FROM comments WHERE questionid = '$ q'' не так? –

+0

Что на самом деле не работает? Пожалуйста, обновите свой вопрос с подробной информацией о ожидаемом и фактическом поведении. Вы говорите, что когда пользователь нажимает кнопку новый комментарий успешно сохраняется через вызов ajax на «comment.php», но затем в обработчике успеха последующий вызов «writecomment.php» не работает? Вы получаете ошибки (на сервере или на стороне клиента)? (И что такое «цикл», упомянутый в заголовке вопроса?) – nnnnnn

ответ

1

Я думаю реальная проблема не в коде, а в алгоритму: Вы должны решить: вы будете использовать дерево в комментариях или нет, после этого плана DB, только после этого вы должен сидеть и писать код.

Если Вы не использовать дерево в комментариях, используйте 2 таблицы: 1) Вопросы 2) Ответы

Вопросы

ID, USER_ID, QUESTION_TEXT 

Ответы

ID, QUESTION_ID, USER_ID, ANSWER_TEXT 

When Вы должны перечислить все ответы на вопрос, используя somet повесят как

SELECT USER_ID, ANSWER_TEXT FROM `Answers` WHERE QUESTION_ID = 123; 

Когда Вам нужно добавить комментарий, просто вставьте его в Answers таблицу с QUESTION_ID поле заполнено.

Если Вы хотите использования дерева в комментариях, Вам нужно всего лишь 1 стол

Запись

ID, PARENT_ID, USER_ID, MESSAGE_TEXT 

Все вопросы будут иметь значения в поле PARENT_ID, потому что они являются главными ветви комментариев, все ответы будут иметь PARENT_ID = ID (вопрос), все комментарии к ответам будут иметь PARENT_ID = ID (ответа). Например

ID | PARENT_ID | MESSAGE_TEXT 

1 |   0 | How to make world better? 
2 |   1 | Just try to smile 
3 |   1 | Try to get a pet! 
4 |   3 | I have a fish, that's boring! 

Это будет выглядеть следующим образом:

How to make world better? 
    Just try to smile 
    Try to get a pet! 
     I have a fish, that's boring! 

Я надеюсь, что мой ответ был полезен для Вас, и Вы покинете $ answerid позади;)

-1

Изменить

var $form = $(this); 

к

var myForm = $(this); 

и каждый $form к myForm;

Изменить

$.ajax({ 
    "url": $form.attr("action"), 
    "data": $form.serialize(), 
    "type": $form.attr("method"), 

в

$.ajax({ 
    url: $form.attr("action"), 
    data: $form.serialize(), 
    type: $form.attr("method"), 

Изменить РНР

include 'connect.php'; 

$questionid = (int) $_GET['question_id']; 
$answerid = (int) $_GET['record_id']; 
$query = mysql_query("SELECT * FROM comments WHERE questionid='$q' AND answerid='$answerid'"); 

while ($row=mysql_fetch_assoc($query)){ 
    $comment=$row['comment']; 
    $user=$row['user']; 
    $time=$row['time']; 

    echo "<div id='singleComment'><b>$user</b>$comment</div>"; 
} 
+0

Почему переименовать '$ form' в' myForm'? Это попытка избежать конфликта с переменными PHP или ...? Кроме того, зачем удалять кавычки из свойства имена в объекте, переданном в '$ .ajax()'? Это не имеет никакого значения вообще и, безусловно, не имеет ничего общего с тем, что не работает. – nnnnnn

+0

@nnnnnn Стандартизация. Проблема заключается в том, что внутри автора PHP-код. –

+0

Нет стандарт hing относительно вашего соглашения об именах и цитаты вокруг js хеш-ключей. И это не относится к вопросу. –