#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:
Вам понадобятся как минимум две переменные сеанса:
- Список массивов
- Счетчик индекса (смещения)
- (необязательно) счетчик «Элементов на страницу», но это может быть жестко запрограммировано
Начните с массива элементов в сеансе и индекса 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 — не могли бы вы показать мне, как это можно сделать без использования сеанса?