Следующий и предыдущий в PHP

#php #mysql

#php #mysql

Вопрос:

Я не уверен, делал ли кто-нибудь что-то подобное раньше.

Вот сценарий: я загружаю результат mysql в массив PHP, который затем добавляется в сеанс. Я хочу иметь возможность нажимать две кнопки (предыдущий / следующий) для просмотра результатов. Возможно ли это?

Вот мой код:

 include('config.php');

$con = mysql_connect($host, $username, $password); 

if(!$con)
{
    die('Could not connect: ' . mysql_error()); 
}

mysql_select_db('members', $con) or die(mysql_error());

$sql = "SELECT * FROM people where status like 'married' ";  
$result = mysql_query($sql);

while($row = mysql_fetch_array($result))
{
    $result_array[] = $row['id'];
}

return $result_array;

session_start();
$_SESSION['theResult'] = $result_array; 

mysql_close($con);
  

Комментарии:

1. Вам нужен разбиение на страницы с 1 элементом на страницу.

2. @Mike — Правильно, у меня есть страница, на которой отображается результат, и при нажатии кнопок (предыдущий / следующий) должен отображаться другой результат.

Ответ №1:

непроверенный, но будет ли что-то вроде этого работать??

 $_SESSION["current"] = $_SESSION["current"] || 0;
if(isset($_POST["move"])) {
   if($_POST["move"] == "prev") {
        echo $_SESSION['theResult'][$_SESSION["current"] == 0 ? 0 : $_SESSION["current"]--];
   } else if($_POST["move"] == "next") {
        echo $_SESSION['theResult'][$_SESSION["current"] == count($_SESSION['theResult'])-1 ? count($_SESSION['theResult'])-1 : $_SESSION["current"]  ];
   }

}
  

Комментарии:

1. Спасибо, ваш код выглядит вполне уместно, сейчас попробую и сообщу вам, что он работает.

Ответ №2:

Вам понадобятся как минимум две переменные сеанса:

  1. Список массивов
  2. Счетчик индекса (смещения)
  3. (необязательно) счетчик «Элементов на страницу», но это может быть жестко запрограммировано

Начните с массива элементов в сеансе и индекса 0. Кнопка «далее» увеличивает смещение на N (где N — количество элементов, отображаемых на странице). Prev уменьшает его. (Все время проверяя, чтобы убедиться, что у нас достаточно элементов, когда будет выполнен переход). Итак, например, если у вас был список из 10 элементов, и мы хотели показать три на странице:

 $_SESSION['item'] = array('a','b','c','d','e','f','g','h','i','j');
$_SESSION['offset'] = 0;
$itemsPerPage = 3;
  

Любой вызов next / prev изменится $_SESSION['offset'] на $itemsPerPage величину (положительно или отрицательно). Затем отображение элементов является вопросом:

 $end = $_SESSION['offset']   $itemsPerPage;
if ($end >= sizeof($_SESSION['items']))
{
  // never go past the number of items we have
  $end = sizeof($_SESSION['items']) - 1;
}
for ($i = $_SESSION['offset']; $i < $end; $i  ){
  //output $_SESSION['items'][$i];
}
  

Для отображения одного элемента $itemsPerPage становится спорным, все, что вам нужно отследить $_SESSION['offset'] , это отобразить элемент из массива сеанса с этим сохраненным смещением. например

 $currentItem = $_SESSION['offset'];

//output $_SESSION['items'][$currentItem];
  

Комментарии:

1. Спасибо за удивительный пример, посмотрим, смогу ли я заставить его работать. Я это очень ценю 🙂

2. Почему переменные сеанса, а не номера страниц из строки запроса?

3. @MikeB: Без особой причины, просто сохранял его на основе сеанса. Но вполне возможно использовать $_GET переменную вместо переменной сеанса.

4. @mike-b — не могли бы вы показать мне, как это можно сделать без использования сеанса?