Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как сделать чтобы не перекидывало на другую страницу при отправке сообщения? (https://javascript.ru/forum/misc/57992-kak-sdelat-chtoby-ne-perekidyvalo-na-druguyu-stranicu-pri-otpravke-soobshheniya.html)

krasnov8953 29.08.2015 13:46

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

laimas 29.08.2015 15:17

$c=0;
$r=mysql_query
while
$c++;
if ($c==0) echo "Гостевая книга пуста!<br>";

:)
А для чего тогда блок, который получает всего записей для навигатора?


Цитата:

Сообщение от krasnov8953
при нажатии на клавишу отправить меня перекидывает опять на 1 страницу

И где, и что за кнопка?

PS. А запрос страниц всегда без параметров, чего же вы хотите?

krasnov8953 29.08.2015 16:35

А для чего тогда блок, который получает всего записей для навигатора?--->
мне что убрать его, как же выводить навигацию?
И где, и что за кнопка? это кнопка с формы, форма так выглядит
<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 иначе бы страницы не переключались! Как по твоему это тогда можно решить?

laimas 29.08.2015 17:04

$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.

krasnov8953 29.08.2015 17:22

А запросы на вывод записей у вас всегда без указания страницы - show_messages()
ка же без указания страницы?

<a href="gb.php?page=<?=$p?>" onclick="show_messages('<?= $p ?>'); return false;" ><?= $p ?></a>

laimas 29.08.2015 17:28

Это запрос страницы из навигатора, а жалоба на что - при нажатии на клавишу отправить меня перекидывает опять на 1 страницу?

А это что?
....
success: function(msg){
show_messages();

krasnov8953 29.08.2015 17:29

ок переделал как вы сказали, но проблема все равно осталась

krasnov8953 29.08.2015 17:30

т.е в success нужно переменную Page передать?

krasnov8953 29.08.2015 17:35

пробую так
success: function(Page){
            show_messages('<?= $p ?>');
            }
но без результатов

laimas 29.08.2015 18:00

Откуда здесь:
success: function(Page) { show_messages( может появиться '<?= $p ?>'); ?

Запросили в навигаторе страницу N, и это текущая страница, запомнили (или получать из навигатора при отправке формы), этот номер и нужно передавать в функцию и JS.
Иначе сервер должен помнить текущую страницу.


Часовой пояс GMT +3, время: 18:20.