Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Комментарии без перезагрузки
 
 автор: kapitalist   (22.04.2012 в 22:07)   письмо автору
 
 

Всем привет. Пытаюсь сделать комментарии без перезагрузки страницы.
Особенность в том, что на сайте будет несколько форм, и на все должно реагировать без перезагрузки.

<?php
session_start 
();
include(
"connect.php");
 
$author mysql_query("SELECT id,avatar,friends FROM `users` WHERE `id`='$_SESSION[id]'",$db);
 
$author mysql_fetch_array($author); 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Мгновенная отправка сообщений при помощи Ajax Часть 1</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javascript" src="js/jquery-1.5.1.min.js"></script>
<script type="text/javascript">
$(function() {
    $("#send").click(function(){
        var author = $("#author").val();
        var message = $("#message").val();
        var avatar = $("#avatar").val();        
        $.ajax({
            type: "POST",
            url: "sendMessage.php",
            data: {"author": author, "message": message, "avatar": avatar},
            cache: false,                        
            success: function(response){
                var messageResp = new Array('Ваше сообщение отправлено','Сообщение не отправлено Ошибка базы данных','Нельзя отправлять пустые сообщения');
                var resultStat = messageResp[Number(response)];
                if(response == 0){
                    $("#author").val("");
                    $("#message").val("");
                    $("#avatar").val("");
                    $("#commentBlock").append("<div class='comment'>Автор: <strong>"+author+"</strong><br>"+message+"<br>"+avatar+"</div>");
                }
                $("#resp").text(resultStat).show().delay(1500).fadeOut(800);
                
            }
        });
        return false;
                
    });
});
</script>
</head>
<body>

<div id="commentBlock">
<?php
$result 
mysql_query("SELECT * FROM comments",$db);
while(
$comment mysql_fetch_array($result)) {
$sql mysql_query("SELECT * FROM users WHERE id=$comment[author]",$db);
$sql mysql_fetch_array($sql);
echo 
"<div class='comment'>Автор: <strong>$sql[name] $sql[surname]</strong><br>".$comment['message']."</div>";
}
?>
</div>

<form action="sendMessage.php" method="post" name="form">
    <input name="author" type="text" id="author" value='<?php echo "$author[id]"?>'><br>
    <input name="avatar" type="text" id="avatar" value='<?php echo "$author[avatar]"?>'><br>
    <input name="message" type="text" id="message">
    <input name="js" type="hidden" value="no" id="js">
    <p>
        <input name="button" type="submit" value="Отправить" id="send"> <span id="resp"></span>
    </p>
</form>

<form action="sendMessage.php" method="post" name="form1">
    <input name="author" type="text" id="author" value='<?php echo "$author[id]"?>'><br>
    <input name="avatar" type="text" id="avatar" value='<?php echo "$author[avatar]"?>'><br>
    <input name="message" type="text" id="message">
    <input name="js" type="hidden" value="no" id="js">
    <p>
        <input name="button" type="submit" value="Отправить" id="send"> <span id="resp"></span>
    </p>
</form>

</body>
</html>


Вот в первой форме ajax срабатывает а во второй нет.... Что можно сделать?

  Ответить  
 
 автор: confirm   (22.04.2012 в 22:16)   письмо автору
 
   для: kapitalist   (22.04.2012 в 22:07)
 

Добавление комментариев подразумевается одним пользователем с id = $author[id] ?

  Ответить  
 
 автор: kapitalist   (22.04.2012 в 22:21)   письмо автору
 
   для: confirm   (22.04.2012 в 22:16)
 

Ну да! Есть несколько пользователей, пользователь id=1 открыл страницу оставил коммент. Зашел пользователь id = 33, оставил коммент и т.д.

  Ответить  
 
 автор: confirm   (22.04.2012 в 22:24)   письмо автору
 
   для: kapitalist   (22.04.2012 в 22:21)
 

Ну а зачем тогда две формы? Не могут же пользователи 1 и 33 использовать одну и туже страницу.

  Ответить  
 
 автор: kapitalist   (22.04.2012 в 23:03)   письмо автору
 
   для: confirm   (22.04.2012 в 22:24)
 

У меня идет, новость 1, новость 2 и т.д. к каждой новости своя форма для комментов. А юзеры тут вообще не причем...

  Ответить  
 
 автор: confirm   (22.04.2012 в 23:18)   письмо автору
 
   для: kapitalist   (22.04.2012 в 23:03)
 

И если на страницу выводить 20 сообщений, то и 20 форм потребуется?
Вы используете jQuery, а это богатая библиотека своим набором. И если вы ее используете ради ajax, то весьма плачевно.
Выбрасывайте вообще все формы со страницы. div "commentBlock" вполне может нести в себе информацию об id сообщения, как впрочем и другую сопутствующую, а это значит, что, например, щелчком по ссылке (или просто элементу) "Добавить комментарий" можно добавлять (при чем с эффектом) форму для родителя div "commentBlock", получая для ее полей значения из этого родителя. Отправили форму, удалили, а также удалять ее, если отмена отправки, или удалять и добавлять новую, но для другого родителя, если выбрано добавление комментария к другому сообщению. Это сделать на jQuery просто.
И еще, что относится к форме - в jQuery есть метод, возвращающий набор элементов формы как пары имя=значение в виде объекта, то что и нужно для ajax, а не прописывать var author = $("#author").val(); var message = $("#message").val(); .... Это метод .serializeArray().

Что касается кода:
1) Если используете mysql_fetch_array, то хотя бы указывайте второй аргумент этой функции MYSQL_ASSOC (надо не копировать ранее увиденные глупости, а читать о функциях) или используйте вместо mysql_fetch_array функцию mysql_fetch_assoc. Иначе вы попусту расходуете и время, и память, а второе вам не предоставляют "скоко хошь", и может оказаться, что и не хватит.
2) Научились гонять запросы в цикле, пора поинтересоваться что такое вложенные запросы. Все ваши запросы к базе можно уложить в один.
3) Почему id пользователя (уникальный идентификатор) у вас не только "светится", но и доступен для редактирования?
4) Разве удобно добавлять комментарий посредством поля type text?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования