|
|
|
| Всем Привет! Есть форма передающая данные методом POST, есть обработчик который выводит данные постранично. Но работает только первая ссылка при переходе на следующие пишет не чего не найдено. Понял что POST данные теряются при переходе, нужно POST передать в SESSION, но не селен может подскажите. Заранее Спасибо.
<?php
// Коннект до базы данных
$link = mysql_connect('localhost', 'root', 'root');
if (!$link) die('Не могу соединиться с базой данных');
// Выбираем базу данных
mysql_select_db('test8', $link);
//Устанавливаем кодировку UTF8
mysql_query ("SET NAMES utf8");
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");
function mymenu($page, $count, $pages_count, $show_link)
{
// $show_link - это количество отображаемых ссылок;
// нагляднее будет, когда это число будет парное
// Если страница всего одна, то вообще ничего не выводим
session_start ();
if (!isset($_POST['country'])) $_SESSION['country'] = $_POST['country'];
if ($pages_count == 1) return false;
$sperator = ' '; // Разделитель ссылок; например, вставить "|" между ссылками
// Для придания ссылкам стиля
$style = 'style="color: #808000; text-decoration: none;"';
$begin = $page - intval($show_link / 2);
unset($show_dots); // На всякий случай :)
// Сам постраничный вывод
// Если количество отображ. ссылок больше кол. страниц
if ($pages_count <= $show_link + 1) $show_dots = 'no';
// Вывод ссылки на первую страницу
if (($begin > 2) && ($pages_count - $show_link > 2)) {
echo '<a '.$style.' href='.$_server['php_self'].'?page=1> |< </a> ';
}
for ($j = 0; $j <= $show_link; $j++) // Основный цикл вывода ссылок
{
$i = $begin + $j; // Номер ссылки
// Если страница рядом с началом, то увеличить цикл для того,
// чтобы количество ссылок было постоянным
if ($i < 1) continue;
// Подобное находится в верхнем цикле
if (!isset($show_dots) && $begin > 1) {
echo ' <a '.$style.' href='.$_server['php_self'].'?page='.($i-1).'><b>...</b></a> ';
$show_dots = "no";
}
// Номер ссылки перевалил за возможное количество страниц
if ($i > $pages_count) break;
if ($i == $page) {
echo ' <a '.$style.' ><b>'.$i.'</b></a> ';
} else {
echo ' <a '.$style.' href='.$_server['php_self'].'?page='.$i.'>'.$i.'</a> ';
}
// Если номер ссылки не равен кол. страниц и это не последняя ссылка
if (($i != $pages_count) && ($j != $show_link)) echo $sperator;
// Вывод "..." в конце
if (($j == $show_link) && ($i < $pages_count)) {
echo ' <a '.$style.' href='.$_server['php_self'].'?page='.($i+1).'><b>...</b></a> ';
}
}
// Вывод ссылки на последнюю страницу
if ($begin + $show_link + 1 < $pages_count) {
echo ' <a '.$style.' href='.$_server['php_self'].'?page='.$pages_count.'> >| </a>';
}
return true;
} // Конец функции
// Подготовка к постраничному выводу
$num = 1; // Количество отображаемых данных из БД
session_start ();
if (!isset($_POST['country'])) $_SESSION['country'] = $_POST['country'];
if (!empty($_GET['page']) || ($_GET['page'] <= 0)) {
$page = 1;
} else {
$page =(int) $_GET['page']; // Считывание текущей страницы
}
// Общее количество информации
$count = mysql_numrows(mysql_query("select event_subject, event_body from `phpbb_calendar_events`
WHERE event_subject='". $_POST['country'] ."' OR event_subject=event_body",$link)) or die('error! Записей не найденоoooo!');
$pages_count = ceil($count / $num); // Количество страниц
// Если номер страницы оказался больше количества страниц
if ($page > $pages_count) $page = $pages_count;
$start_pos = ($page - 1) * $num; // Начальная позиция, для запроса к БД
$numchar = 300;
// Извлекаем из URL текущую страницу
$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result = mysql_query("SELECT COUNT(*) FROM `phpbb_calendar_events`
WHERE event_subject='". $_POST['country'] ."'OR event_subject=event_body",$link);
$rgPosts = mysql_fetch_row($result);
$posts=$rgPosts[0];
$total = intval(($posts - 1) / $num) + 1;
$page = intval($page);
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
$start = $page * $num - $num;
$result = mysql_query("SELECT * FROM `phpbb_calendar_events`
WHERE event_subject='". $_POST['country'] ."' OR event_subject=event_body LIMIT $start, $num",$link) or die (mysql_error());
$table = "<table border=3 width=30% align=center>\n";
while ( $i = mysql_fetch_assoc($result))
{
$table .= "<tr>\n";
$table .= "<td>".$i['event_subject']."</td>\n";
$table .= "<td>".$i['event_body']."</td>\n";
$table .= "</tr>\n";
}
$table .= "</table>\n";
echo $table;
mymenu($page, $count, $pages_count, 10);
?>
|
| |
|
|
|
|
|
|
|
для: tstas
(17.09.2011 в 23:43)
| | Примерно так, как делеаете вы, только лучше session_start() вынести из тела функции. Вообще говоря, там где используется постраничная навигация принято данные передавать методом GET, чтобы посетители имели возможность сослаться на любую страницу постраничной навигации. | |
|
|
|
|
|
|
|
для: cheops
(18.09.2011 в 07:19)
| | session_start() вынес, поставил первой строкой, пробовал менять POST на GET, но без результатов. Как то надо сессию дописать, наверно проверку и в ссылки, но не знаю как. Спасибо. | |
|
|
|
|
|
|
|
для: tstas
(18.09.2011 в 15:54)
| | вникните в то что тут написано :)
<?
if (!isset($_POST['country'])) $_SESSION['country'] = $_POST['country'];
|
| |
|
|
|
|
|
|
|
для: sl1p
(18.09.2011 в 16:36)
| | Хотел прировнять $_POST['country'] к $_SESSION['country'], уже переделал $_SESSION['country'] = $_POST['country'];
Поставил в цикле echo $_SESSION['country'] выводит данные. Нужно передать в GET очевидно, но чего то туплю, не знаю. | |
|
|
|