|
|
|
| Как предать переменную $_POST, полученную из формы типа "список" на следующую страницу для корректной реализации постраничной навигации?
При работе приведенного ниже кода. первая страница выводится в полном соотвествии с задуманным. Когда переходишь на любую из последующих страниц с результатами поиска, то выводятся не следующие по порядку несколько выбранных строк, а все содержимое таблицы полностью. То бишь создается ощущение, что запрос идет "пустой", без передачи нужных критериев отбора записей.
Переменная сеанса тоже не передается.
Код (основа взята из книги "MySQL на примерах"):
<?php
//Пытаюсь изобразить сеанс
//Устанавливаю переменные сеанса
session_start();
$theme = $_POST['theme_'];
$_SESSION['theme']= $theme ;
// Устанавливаю связь с сервером Мускул
require_once("connect.php");
//число позиций на странице
$pnumber = 3;
// Проверяем, передан ли номер текущей страницы
if(isset($_GET['page']))
$page = $_GET['page'];
else $page = 1;
// Начальная позиция
$start = ($page - 1)*$pnumber;
// Создаю запрос и извлекаю данные из таблицы по критерию отбора с ограничением вывода на 1 страницу
$query = "SELECT * FROM `articles` WHERE `theme` LIKE '%".$theme."%' LIMIT $start, $pnumber";
$result= mysql_query($query);
//То же самое только без ограничения для подсчета общего кол-ва найденных статей
$query1 = "SELECT * FROM `articles` WHERE `theme` LIKE '%".$theme."%' ";
$result1= mysql_query($query1);
$num_row = mysql_num_rows($result1);
// Вывожу результат
if ($result)
echo "<h2>Результат поиска:</h2>";
echo "В разделе <font size='4'><b><i>".$theme."</i></b></font> найдено
<font size='4'><b>" .$num_row. "</b></font> статей (-и).<br>";
while ($row = mysql_fetch_array($result))
{echo "<p><table width=75% border='0'>
<tr> <td width='30'></td>
<td width='250'>Название статьи:</td>
<td><strong>".$row ['art_name']."</strong></td>
</tr>
<tr><td width='30'></td>
<td width='250'>Автор: </td>
<td> <strong>".$row ['autor']."</strong></td>
</tr>
<tr> <td width='30'></td>
<td width='250'>Резюме статьи:</td>
<td><i>".$row ['art_dcrb']."</i></td>
</tr>
<tr> <td width='30'></td>
<td width='250'>Дата добавления:</td>
<td><strong>".$row ['inser_data']."</strong></td>
</tr>
<tr> <td width='30'></td>
<td width='250'><a href=".$row ['art_url'].">Читать статью >>></a></td>
<td><strong></strong></td>
</tr>
</table><br>";
}
echo "<p><p><a href='../search_art.php'>Искать еще!</a><br><br><br>";
// Количество страниц
$query = "SELECT COUNT(*) FROM articles WHERE `theme` LIKE '%".$theme."%'";
$tot = mysql_query($query);
if(!$tot) exit(mysql_error());
$total = mysql_result($tot,0);
$number = (int)($total/$pnumber);
if((float)($total/$pnumber) - $number != 0) $number++;
// Постраничная навигация
for($i = 1; $i <= $number; $i++)
{
if($i != $number)
{
if($page == $i)
{
echo "[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."] ";
}
else
{
echo "<a href=$_SERVER[PHP_SELF]?page=".$i.">[".
(($i - 1)*$pnumber + 1)."-".
$i*$pnumber."]</a> ";
}
}
else
{
if($page == $i)
{
echo "[".(($i - 1)*$pnumber + 1)."-".($total - 1)."] ";
}
else
{
echo "<a href=$_SERVER[PHP_SELF]?page=".$i.">[".
(($i - 1)*$pnumber + 1)."-".
$total."]</a> ";
}
}
}
?> | |
|
|
|
|
|
|
|
для: Phyto
(15.06.2008 в 14:03)
| | Придется параметры запроса передавать либо GET-параметрами (в ссылках навигации),
либо держать их в сессии. Сам по себе набор переменных полей формы в get-запрос не уйдет.
Вопрос не имеет никакого отношения к MySQL. | |
|
|
|
|
|
|
|
для: Trianon
(15.06.2008 в 14:11)
| | Спасибо за ответ!
То, о чем Вы говорите, я понимаю и сам. Я не понимаю, почему значение $_SESSION['theme'], которой я присвоил $theme = $_POST['theme_'], не передается с сессией на следующую страницу?
Так как Вопрос не имеет никакого отношения к MySQL, должен ли я с ним перейти в форум РНР? | |
|
|
|
|
|
|
|
для: Phyto
(15.06.2008 в 15:30)
| | >То, о чем Вы говорите, я понимаю и сам. Я не понимаю, почему значение $_SESSION['theme'], которой я присвоил $theme = $_POST['theme_'], не передается с сессией на следующую страницу?
Если следующую страницу выводит тот скрипт, который Вы привели в первом сообщении,
то эти две строки
$theme = $_POST['theme_'];
$_SESSION['theme']= $theme ;
|
значение в сессии затирают. Поскольку массив $_POST при GET-запросе будет пустым.
>Так как Вопрос не имеет никакого отношения к MySQL, должен ли я с ним перейти в форум РНР?
нет...модераторы захотят - перенесут. | |
|
|
|
|
|
|
|
для: Trianon
(15.06.2008 в 15:50)
| | Как же мне удержать значение переменной в сессии при генерации новых страниц? | |
|
|
|
|
|
|
|
для: Phyto
(15.06.2008 в 16:28)
| |
if(isset($_POST['theme']))
$_SESSION['theme'] = $_POST['theme'];
$theme = $_SESSION['theme']
|
| |
|
|
|
|
|
|
|
для: Trianon
(15.06.2008 в 17:16)
| | Невыразимая благодарность - It`s works! | |
|
|
|