|
|
|
| Всем привет. Пытаюсь сделать комментарии без перезагрузки страницы.
Особенность в том, что на сайте будет несколько форм, и на все должно реагировать без перезагрузки.
<?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 срабатывает а во второй нет.... Что можно сделать? | |
|
|
|
|
|
|
|
для: kapitalist
(22.04.2012 в 22:07)
| | Добавление комментариев подразумевается одним пользователем с id = $author[id] ? | |
|
|
|
|
|
|
|
для: confirm
(22.04.2012 в 22:16)
| | Ну да! Есть несколько пользователей, пользователь id=1 открыл страницу оставил коммент. Зашел пользователь id = 33, оставил коммент и т.д. | |
|
|
|
|
|
|
|
для: kapitalist
(22.04.2012 в 22:21)
| | Ну а зачем тогда две формы? Не могут же пользователи 1 и 33 использовать одну и туже страницу. | |
|
|
|
|
|
|
|
для: confirm
(22.04.2012 в 22:24)
| | У меня идет, новость 1, новость 2 и т.д. к каждой новости своя форма для комментов. А юзеры тут вообще не причем... | |
|
|
|
|
|
|
|
для: 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? | |
|
|
|