Как сделать чтобы не перекидывало на другую страницу при отправке сообщения?
Есть скрипт гостевой книги который записывает данные с формы в таблицу 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. Иначе сервер должен помнить текущую страницу. |
Часовой пояс GMT +3, время: 18:20. |