Как сделать чтобы не перекидывало на другую страницу при отправке сообщения?
Есть скрипт гостевой книги который записывает данные с формы в таблицу c помощью ajax без перезагрузки страницы выглядит так
<script>
function show_messages(Page)
{
$.ajax({
url: "show.php?page=" + Page,
success: function(data){
$(".messages").html(data);
}
});
}
$(document).ready(function(){
show_messages();
$("#form").submit(function(){
var name = $("#name").val();
var email = $("#email").val();
var msg = $("#message").val();
$.ajax({
type: "POST",
url: "action.php",
data: "username="+name+"&email="+email+"&msg="+msg+"&action=add",
success: function(msg){
show_messages();
}
});
$("#name,#email,#message").val('');
return false;
});
});
</script>
файл который выводит сообщения выводит на страницу с формой show.php выглядит так
<?php
include ("dbconnect.php");
$show_messages=5;
$page=$_GET['page'];
$count_messages=mysql_query("SELECT COUNT(*) FROM gb");
$messages=mysql_result($count_messages,0);
$total_pages = intval(($messages - 1) / $show_messages) + 1;
$page = intval($page);
if(empty($page) or $page < 0) $page = 1;
if($page > $total_pages) $page = $total_pages;
$start = $page * $show_messages - $show_messages;
$c=0;
$r=mysql_query ("SELECT * FROM gb ORDER BY id DESC LIMIT $start,$show_messages");
while ($row=mysql_fetch_array($r))
{
?>
<div class="guestbook_item">
<div id="guestbook_name"><?php echo $row['username']; ?></div>
<div id="guestbook_email"><?php echo $row['email']; ?></div>
<div id="guestbook_message"><?php echo $row['msg']; ?></div>
</div>
<?php
$c++;
}
if ($c==0)
echo "Гостевая книга пуста!<br>";
?>
<?
echo "<div id='gb_pagination'>";
for($p=1;$p<=$total_pages;$p++) {
if($p==$page){
echo '<b>'.$p.'</b>';
}else{ ?>
<a href="gb.php?page='<?= $p ?>'" onclick="show_messages(<?= $p ?>); return false;" ><?= $p ?></a>
<?
}}
echo "</div>"; ?>
Если я нахожусь на 2 странице при нажатии на клавишу отправить меня перекидывает опять на 1 страницу с новым сообщением, подскажите пожалуйста как этого избежать? |
$c=0;
$r=mysql_query while $c++; if ($c==0) echo "Гостевая книга пуста!<br>"; :) А для чего тогда блок, который получает всего записей для навигатора? Цитата:
PS. А запрос страниц всегда без параметров, чего же вы хотите? |
А для чего тогда блок, который получает всего записей для навигатора?--->
мне что убрать его, как же выводить навигацию? И где, и что за кнопка? это кнопка с формы, форма так выглядит
<form id="form">
<p>Введите ваше имя:<span>*</span>
<input id="name" name="username" required pattern="^[А-яа-яa-zA-Z]+$" maxlength="60"></p>
<p>Введите Ваш Email:<span>*</span>
<input id="email" name="email" type="email" pattern="[^@]+@[^@]+\.[a-zA-Z]{2,6}" required maxlength="60"></p>
Введите Ваше Сообщение:<span>*</span>
<textarea id="message" name="msg" cols="57" rows="5" required maxlength="1000"></textarea>
<input id="submit" type="submit" value="Отправить" >
</form>
А запрос страниц всегда без параметров, чего же вы хотите? ---> параметры же передаются через ajax иначе бы страницы не переключались! Как по твоему это тогда можно решить? |
$count_messages=mysql_query("SELECT COUNT(*) FROM gb");
$messages=mysql_result($count_messages,0); Так смело можно поступать только в том случае, если есть глобальный обработчик ошибок, который в случае неудачного запроса к базе выведет ошибку и закончит работу скрипта. Иначе нужно обязательно проверять результат запроса. "SELECT COUNT(*) - возвращает число записей, а значит уже известно есть ли записи в базе или нет, зачем же $c=0; и $c++;? Должно быть так:
if($q = mysql_query("SELECT COUNT(*) FROM gb")) {
if($count_messages = mysql_num_rows($q)) {
//вывод записей
} //иначе записей нет
} //иначе ошибка запроса
А запросы на вывод записей у вас всегда без указания страницы - show_messages(). И надо переходить на PDO или mysqli. |
А запросы на вывод записей у вас всегда без указания страницы - show_messages()
ка же без указания страницы?
<a href="gb.php?page=<?=$p?>" onclick="show_messages('<?= $p ?>'); return false;" ><?= $p ?></a>
|
Это запрос страницы из навигатора, а жалоба на что - при нажатии на клавишу отправить меня перекидывает опять на 1 страницу?
А это что? .... success: function(msg){ show_messages(); |
ок переделал как вы сказали, но проблема все равно осталась
|
т.е в success нужно переменную Page передать?
|
пробую так
success: function(Page){
show_messages('<?= $p ?>');
}
но без результатов |
Откуда здесь:
success: function(Page) { show_messages( может появиться '<?= $p ?>'); ? Запросили в навигаторе страницу N, и это текущая страница, запомнили (или получать из навигатора при отправке формы), этот номер и нужно передавать в функцию и JS. Иначе сервер должен помнить текущую страницу. |
а можно пример?
|
Ну если текущая страница в навигаторе, это номер в теге B, ну так и получайте его - $('#gb_pagination b').text().
|
Спасибо огромное работает)))))))
|
| Часовой пояс GMT +3, время: 14:03. |