Хобрук: Ваш путь к мастерству в программировании

Избегайте потери данных POST при использовании разбиения на страницы php

Я работаю над арендным веб-сайтом, который переносит дату со страницы на другую, например, пользователь вводит дату и некоторую информацию, и когда он переходит на другую страницу, он должен найти информацию, которую он ввел на первой странице. Все работает нормально, за исключением того, что когда я добавляю разбивку на страницы следующим образом: [1] [2] [3] [4] каждый раз, когда я нажимаю на номер страницы в разбивке на страницы, данные POST будут потеряны. Например, если я щелкнул номер 2 в разбивке на страницы, я получаю это сообщение:

Undefined index: date......

Я нашел несколько решений, использующих метод get, но я не знаю, как использовать метод get в этой ситуации.

Что я должен изменить в своем коде, чтобы не потерять данные POST?

вот мой полный код:

 <?php
$date= $_POST['date']; // the post data from previous page
$info= $_POST['info']; // the post data from previous page

?>  


<form action="next_page.php" method="post" name="myForm"> 


<input name="date" type="hidden" value="<?php echo $date; ?>" />
<input name="info" type="hidden" value="<?php echo $info; ?>" />




<?php

include(db.php);


$q="select count(*) \"total\"  from users";
$ros1=mysql_query($q,$link);
$row=(mysql_fetch_array($ros1));
$total=$row['total'];
$dis=8;
$total_page=ceil($total/$dis);


$page_cur=(isset($_GET['page']))?$_GET['page']:1;
$k=($page_cur-1)*$dis;

$query="SELECT * FROM cars limit $k,$dis";
$ros=mysql_query($query,$link);

while($row = mysql_fetch_array($ros))
{

 echo  $row["user_id"];

echo  $row["user_name"];

echo  $row["user_email"];
}
for($i=1;$i<=$total_page;$i++){
if($page_cur==$i){
echo ' <input type="button" value="'.$i.'"> ';
}
else{
echo '<a href="carstype.php?page='.$i.'"> <input type="button" value="'.$i.'"> </a>';
}}
?>
<input  type="submit" name="userId" value="' .$row['user_id'] . '" /> 

</form>  
30.07.2014

  • Вы можете хранить данные в переменных сеанса. 30.07.2014
  • или поместите его на страницу в поля ввода и дайте повторно отправить 30.07.2014
  • Я думаю, что использование сеанса - более элегантный способ сделать это. 30.07.2014
  • Я бы предложил использовать GET только для неконфиденциальных данных и когда данные не превышают, скажем, 150 символов, чтобы предотвратить огромные URL-адреса. Использование только GET будет поддерживать использование нескольких вкладок в браузере, без ошибок синхронизации вы будете работать с SESSION, а также возможен репост. (также не вызовет проблем с вкладками) 30.07.2014

Ответы:


1

Вы должны использовать метод GET вместо метода POST.

    <?php
$date = $_GET['date']; // the post data from previous page
$info = $_GET['info']; // the post data from previous page
?>  


<form action="next_page.php" method="get" name="myForm"> 


    <input name="date" type="hidden" value="<?php echo $date; ?>" />
    <input name="info" type="hidden" value="<?php echo $info; ?>" />




    <?php
    include(db . php);


    $q = "select count(*) \"total\"  from users";
    $ros1 = mysql_query($q, $link);
    $row = (mysql_fetch_array($ros1));
    $total = $row['total'];
    $dis = 8;
    $total_page = ceil($total / $dis);


    $page_cur = (isset($_GET['page'])) ? $_GET['page'] : 1;
    $k = ($page_cur - 1) * $dis;

    $query = "SELECT * FROM cars limit $k,$dis";
    $ros = mysql_query($query, $link);

    while ($row = mysql_fetch_array($ros)) {

        echo $row["user_id"];

        echo $row["user_name"];

        echo $row["user_email"];
    }
    for ($i = 1; $i <= $total_page; $i++) {
        if ($page_cur == $i) {
            echo ' <input type="button" value="' . $i . '"> ';
        } else {
            echo '<a href="carstype.php?page=' . $i . '&date=' . $date . '&info=' . $info . '"> $i </a>';
        }
    }
    ?>
    <input  type="submit" name="userId" value="' .$row['user_id'] . '" /> 

</form>
30.07.2014
  • Я попытался получить метод, но он не сработал, он дает то же сообщение Неопределенный индекс: после того, как я нажимаю кнопку разбиения на страницы 30.07.2014
  • вы также должны добавить свои ключи GET в метод paginate. ваша ссылка должна быть на следующую страницу, например: example.com/ 30.07.2014
  • я должен добавить & между переменными 30.07.2014

  • 2

    Вы можете использовать сеансы PHP для хранения пользовательского ввода на сервере:

    Сеансы PHP

    Храните все данные в $_SESSION и читайте их оттуда, когда это необходимо на странице. Обновляйте сохраненные значения, когда пользователи вводят что-то новое.

    30.07.2014

    3

    Вы должны хранить эту информацию где-то между вашими http-запросами. Для этого есть несколько возможных решений:

    1. вы можете хранить эту информацию в базе данных
    2. в сеансе (временно хранить, если вам не нужны эти данные в вашей базе данных)
    3. хранить на каждой html-странице как скрытое поле
    30.07.2014
  • как я могу хранить данные в сеансе? 30.07.2014
  • Это очень хорошо объясняется здесь: thesitewizard.com/php/sessions.shtml . Вы должны start_session() для своего пользователя, а затем вы можете использовать массив $_SESSION для своих переменных 30.07.2014
  • Когда вы сделаете start_session(), php отправит в браузер пользователя переменную PHPSESSID — просто число, чтобы идентифицировать вашего пользователя в следующий раз. В следующий раз, когда браузер сделает запрос, php будет знать, какой это пользователь. Для каждой сессии (пользователя) можно хранить переменные — они хранятся в файле на стороне сервера. Вы можете получить их в php, используя массив $_SERVER. 30.07.2014

  • 4

    На мой взгляд, хороший способ — начать поиск с формы POST, и, если результаты превышают лимит, создать ссылки на страницы, которые на самом деле являются формами сообщений, включающими ключевое слово поиска и целевую страницу в виде скрытых переменных.

    Передача ключевого слова поиска в качестве параметра получения требует осторожности (кодирование URL-адреса), поскольку URL-адреса имеют ограничения на символы, которые они разрешают (буквы и цифры ascii, а также такие символы, как /, ~, -, _ и т. д.), например, пользователь может искать что-то на японском или греческом языке или использовать символы.

    Передача ключевого слова поиска в качестве переменной сеанса также требует осторожности. Рассмотрим такой сценарий: пользователь открыл несколько страниц результатов, но после этого все страницы будут иметь доступ к последнему сохраненному ключевому слову сеанса. Кроме того, сохранение ключевого слова поиска в сеансе требует координации со стороны разработчика, например, когда следует уничтожить переменную сеанса и т. д.

    05.02.2015
  • Было бы полезно, если бы вы разбили этот текст на абзацы (разделенные двумя символами новой строки), так как его трудно читать. 05.02.2015
  • Новые материалы

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..