X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Сохранение переменной
Kristofer
Kristofer
Topic Starter сообщение 21.4.2009, 11:04; Ответить: Kristofer
Сообщение #1


Здравствуйте
есть index.html, в котором форма содержит текстовое поле с именем search_query
содержание этого поля передается в скрипт php, после нажатия кнопки submit
затем идет сортировка в бд и показ найденых значений, по запросу вида:
SELECT * FROM page WHERE id='$search_query' OR tf='$search_query' OR ts='$search_query'
проблема:
постраничный вывод в скрипте работает, он выдает кучу страниц с найденными результами, те вида - 1 2 3 4 --->
при нажатии на ссылку 2 или 3 или любую другую, скрипт выдает ошибку что он не знает такой переменной как $search_query и отказывается работать
вопрос:
как ее сохранить при передаче от index.html к скрипту.php в теле и оставить в текстовом поле

index.html
<html>
<head>
<title></title>
<link rev="made" href="mailto:">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta name="author" content="">
<meta name="keywords" content="">
<meta name="description" content="">
</head>
<body>
<center>
<form action="search.php" method="post">
<input type="text" name="search_query" maxlength="25" size="15">
<input type="submit" name="submit" value="ОК">
</form>
</center>
</body>
</html>


search.php
[PHP]
<html>
<head>
<title></title>
<link rev="made" href="">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta name="author" content="">
<meta name="keywords" content="">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body>
<form action="search.php" method="post">
<input type="text" name="search_query" maxlength="25" size="15" value="">
<input type="submit" name="submit" value="ОК">
</form>
<?php
echo "Вы искали слово - <b>$search_query</b><br><br>";
require('paging.inc.php');
$host='localhost';
$user='root';
$passwd='root';
$db_name='pages';
$_DB = new mysqli($host,$user,$passwd,$db_name);
mysqli_query($_DB, 'SET NAMES cp1251');
$_PAGING = new Paging($_DB);
$r = $_PAGING->get_page("SELECT * FROM page WHERE id='$search_query' OR tf='$search_query' OR ts='$search_query'");
while($row = $r->fetch_assoc())
{
echo $row['id'].'&nbsp;&nbsp;';
echo $row['tf'].'&nbsp;&nbsp;';
echo $row['ts'];
echo '<br>';
}
echo '<br><br>';
echo $_PAGING->get_result_text().' страниц.';
echo '<br>';
echo $_PAGING->get_prev_page_link().''.$_PAGING->get_page_links().''.$_PAGING->get_next_page_link();
?>
</body>
</html>
[/PHP]

paging.inc.php
[PHP]
<?php
class Paging
{
private $page_size = 2;
private $link_padding = 10;
private $page_link_separator = ' ';
private $next_page_text = '--->';
private $prev_page_text = '<---';
private $result_text_pattern = 'Показано с %s по %s из %s';
private $page_var = 'p';
private $db;
private $q;
private $total_rows;
private $total_pages;
private $cur_page;

public function __construct($db, $q='', $page_var='p')
{
$this->db = $db;
if ($q) $this->set_query($q);
$this->page_var = $page_var;
$this->cur_page = isset($_GET[$this->page_var]) && (int)$_GET[$this->page_var] > 0 ? (int)$_GET[$this->page_var] : 1;
}
public function set_query($q)
{
$this->q = $q;
}
public function set_page_size($page_size)
{
$this->page_size = abs((int)$page_size);
}
public function set_link_padding($padding)
{
$this->link_padding = abs((int)$padding);
}
public function get_page($q='')
{
if ($q) $this->set_query($q);
$r = $this->db->query( $this->query_paging($this->q) );
$this->total_rows = array_pop($this->db->query('SELECT FOUND_ROWS()')->fetch_row());
if ($this->page_size !== 0) $this->total_pages = ceil($this->total_rows/$this->page_size);
return $r;
}
public function get_result_text()
{
$start = (($this->cur_page-1) * $this->page_size)+1;
$end = (($start-1+$this->page_size) >= $this->total_rows)? $this->total_rows:($start-1+$this->page_size);
return sprintf($this->result_text_pattern, $start, $end, $this->total_rows);
}
public function get_page_links()
{
if ( !isset($this->total_pages) ) return '';
$page_link_list = array();
$start = $this->cur_page - $this->link_padding;
if ( $start < 1 ) $start = 1;
$end = $this->cur_page + $this->link_padding-1;
if ( $end > $this->total_pages ) $end = $this->total_pages;
if ( $start > 1 ) $page_link_list[] = $this->get_page_link( $start-1, $start - 2 > 0 ? '...' : '' );
for ($i=$start; $i <= $end; $i++) $page_link_list[] = $this->get_page_link( $i );
if ( $end + 1 < $this->total_pages ) $page_link_list[] = $this->get_page_link( $end +1, $end + 2 == $this->total_pages ? '' : '...' );
if ( $end + 1 <= $this->total_pages ) $page_link_list[] = $this->get_page_link( $this->total_pages );
return implode($this->page_link_separator, $page_link_list);
}
public function get_next_page_link()
{
return isset($this->total_pages) && $this->cur_page < $this->total_pages ? $this->get_page_link( $this->cur_page + 1, $this->next_page_text ) : '';
}
public function get_prev_page_link()
{
return isset($this->total_pages) && $this->cur_page > 1 ? $this->get_page_link( $this->cur_page - 1, $this->prev_page_text ) : '';
}
private function get_page_link($page, $text='')
{
if (!$text) $text = $page;
if ($page != $this->cur_page)
{
$reg = '/((&|^)'.$this->page_var.'=)[^&#]*/';
$url = '?'.( preg_match( $reg, $_SERVER['QUERY_STRING'] ) ? preg_replace($reg, '${1}'.$page, $_SERVER['QUERY_STRING']) : ( $_SERVER['QUERY_STRING'] ? $_SERVER['QUERY_STRING'].'&' : '' ).$this->page_var.'='.$page);
return '<a href="'.$url.'">'.$text.'</a>';
}
return '<span>'.$text.'</span>';
}
private function query_paging()
{
$q = $this->q;
if ($this->page_size != 0)
{
$start = ($this->cur_page-1) * $this->page_size;
$q = preg_replace('/^SELECT\s+/i', 'SELECT SQL_CALC_FOUND_ROWS ', $this->q)." LIMIT {$start},{$this->page_size}";
}
return $q;
}
}
?>
[/PHP]
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Kristofer
Kristofer
Topic Starter сообщение 21.4.2009, 11:28; Ответить: Kristofer
Сообщение #2


отследил запрос при помощи echo
1 вариант
SELECT SQL_CALC_FOUND_ROWS * FROM page WHERE id='Книга' OR tf='Книга' OR ts='Книга' ORDER BY ts LIMIT 0,21 Книга 2
2 вариант с потерей переменной
SELECT SQL_CALC_FOUND_ROWS * FROM page WHERE id='' OR tf='' OR ts='' ORDER BY ts LIMIT 6,2
как видно запрашиваются несуществующие значения
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Гость_0_* Гость_0_*
сообщение 21.4.2009, 11:40; Ответить: Гость_0_*
Сообщение #3


первый раз у вас $search_query передается методом POST
поменяйте на GET

+ в каждый пейджинг добавьте еще один параметр search_query в который и передавайте свой запрос
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Galen
Galen
сообщение 21.4.2009, 11:42; Ответить: Galen
Сообщение #4


Чтобы сохранить значение переменной $search_query, его нужно вставить в форму с результатом.
У вас там на странице результата есть форма для поиска
<form action="search.php" method="post">
<input type="text" name="search_query" maxlength="25" size="15" value="">
<input type="submit" name="submit" value="ОК">
</form>

Вот или там в value прописать или добавить ещё hidden-поле где будете хранить значение переменной.

К сожалению разобраться в вашем коде пейджинга у меня разобраться не хватило терпения (видимо поэтому я считаю что его стоило бы заменить).
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Kristofer
Kristofer
Topic Starter сообщение 21.4.2009, 12:08; Ответить: Kristofer
Сообщение #5


<form action="search.php" method="GET">
<input type="text" name="search_query" maxlength="25" size="15" value="<?php print $search_query; ?>">
<input type="submit" name="submit" value="ОК">
</form>


после нажатия на ссылку ведущую на вторую страницу результатов, выдает в текстовом поле:
<br /><b>Notice</b>: Undefined variable: search_query in <b>C:\WEBServer\www\search.php</b> on line <b>13</b><br />


как описать в hidden я понятия не имею, не получается использовать
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Kristofer
Kristofer
Topic Starter сообщение 21.4.2009, 12:20; Ответить: Kristofer
Сообщение #6


все оказалось гораздо проще чем я думал
сделал методом тыка (аж стыдно)

в index.html поставил GET
<form action="search.php" method="GET">
<input type="text" name="search_query" maxlength="25" size="15">
<input type="submit" name="submit" value="OK">
</form>


а в search.php тож поставил GET и добавил hidden прописав его от балды (позже проверю, нужен или нет)
<form action="search.php" method="GET">
<input type="text" name="search_query" maxlength="25" size="15" value="<?php print $search_query; ?>">
<input type="submit" name="submit" value="ОК">
<input type="hidden" name="x" value="<?php $search_query ?>">
</form>


я не знаю правильно это или нет, но ОНО работает.
всем спасибо
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Kristofer
Kristofer
Topic Starter сообщение 21.4.2009, 12:23; Ответить: Kristofer
Сообщение #7


поле hidden убрал, все работает

блииииин... как все криво...:rolleyes: но работает!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Kristofer
Kristofer
Topic Starter сообщение 22.4.2009, 12:02; Ответить: Kristofer
Сообщение #8


а как построить SQL запрос таким образом чтобы он выбирал все записи начинающиеся с ... а не строго по введенному слову,
я пытался сделать но потерялся в кавычках
в общем при добавлении символа % он выбирает все слова вообще, игнорируя введенное.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Webmaster_hb
Webmaster_hb
сообщение 22.4.2009, 12:22; Ответить: Webmaster_hb
Сообщение #9


LIKE '2%'
выберет все что начинается с 2-ки
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Kristofer
Kristofer
Topic Starter сообщение 29.4.2009, 11:23; Ответить: Kristofer
Сообщение #10


во блин! совсем забыл про Like
спасибо

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Сохранение Payeer в профиле букса
0 weimar 1734 28.8.2016, 0:22
автор: weimar
Открытая тема (нет новых ответов) Сохранение размеров при зуме.
0 D0Rmid0nT 5600 12.12.2013, 0:00
автор: -D0Rmid0nT-
Открытая тема (нет новых ответов) Замена имени переменной в строке на ее значение
5 RayOfLight 11762 16.9.2010, 17:42
автор: -unnormal-


 



RSS Текстовая версия Сейчас: 26.4.2024, 7:40
Дизайн