Неправильно передаются данные по ссылке
Код:
<a href="'.$page[$t['group_production']].'?id='.$t['id'].'&name='.$t['name'].'">'.$t['name'].'</a>
В результате попадаю всегда на 1-ю страницу вывода наименований, где у меня организована постраничная навигация. Т.е. как я понимаю нужно сделать так:
Код:
<a href="'.$page[$t['group_production']].'?page='здесь должен генерироваться номер страницы совпадающий со значениями id и name'&id='.$t['id'].'&name='.$t['name'].'">'.$t['name'].'</a>
Строки эти взяты из срипта поиска товара, где поиск ведется по наименованию тавара ('name') из БД. Вот для наглядности весь его код:
Код:
<?php
include "config_mysql.php"; //соединение с MySQL
if (!function_exists('mysql_real_escape_string')){
function mysql_real_escape_string($value){
return addslashes($value);
}
}
//переменные
$page = array(
'ГСО (Государственные Стандартные Образцы)' => 'State_Standard_Samples.php',
'Душистые вещества (отдушки)' => 'Aromatic_substances.php',
'Индикаторные трубки' => 'Display_tubes.php',
'Индикаторы, красители' => 'Indicators_dyes.php',
'Лабораторное стекло и стеклоприборы (ареометры)' => 'Laboratory_glass/Areometers.php',
'Лабораторное стекло и стеклоприборы (изделия общего назначения)' => 'Laboratory_glass/General_purpose_products.php',
'Лабораторное стекло и стеклоприборы (мерные изделия)' => 'Laboratory_glass/Measured_products.php',
'Лабораторное стекло и стеклоприборы (приборы и аппараты, соединительные элементы, спиртовки, стекла предметные покровные)' => 'Laboratory_glass/Devices_and_devices.php',
'Лабораторное стекло и стеклоприборы (разное)' => 'Laboratory_glass/Miscellaneous.php',
'Лабораторное стекло и стеклоприборы (термометры бытовые)' => 'Laboratory_glass/Thermometers_household.php',
'Лабораторное стекло и стеклоприборы (термометры технические)' => 'Laboratory_glass/Thermometers_technical.php',
'Питательные среды для микробиологии' => 'Nutrient_mediums_for_microbiology.php',
'Растворители' => 'Solvents.php',
'Стандарт-титры (фиксаналы)' => 'Standards_credits.php',
'Тара фасовочная' => 'Container_packing.php',
'Техническая продукция' => 'Technical_production.php',
'Ткани технические' => 'Fabrics_technical.php',
'Тугоплавкие соединения' => 'Refractory_substances.php',
'Фильтры' => 'Filters.php',
'Химические реактивы' => 'Chemical_reactants.php',
'Хроматография' => 'Pure(Clean)_substances_for_a_chromatography.php'
); //массив ссылок на страницы групп товаров
@$id =$_GET['id'];
@$name = mysql_real_escape_string($_GET['name']);
@$group_production =$_GET['group_production'];
//checkboxes
if (empty($name)){
// не заполнено поле
print("<div class='search' align='center'>
<font color='#CC0000'><b>Необходимо заполнить поле поиска!</b></font></div>");
}
else {
if (isset($id)){
$srch='id';
} //id - имя столбца в таблице
if (isset($name)){
$srch='name';
} //name - имя столбца в таблице
if (isset($group_production)){
$srch='group_production';
} //group_production - имя столбца в таблице
@$query = "SELECT * FROM tovary WHERE $srch like '%".mysql_escape_string(addslashes($name))."%' ";
$result = mysql_query($query) or die('Ошибка запроса');
if (mysql_num_rows($result) == 0){
print("<div class='search' align='center'><font color='#CC0000'><b>По вашему запросу ничего не найдено! Попробуйте изменить запрос.</b></font></div>");
}
else {
print("<h1 align='center' class='search'>Результат поиска:</h1><table border='1' cellspacing='1' cellpadding='1' class='search'><tr><td width='70%' class='search_top' align='center'><b>Наименование товара</b></td><td width='30%' class='search_top' align='center'><b>Группа товаров</b></td></tr>");
// Переменная i следит чередование цвета
$i = 0;
while($t = @mysql_fetch_array($result)){
$i++;
$class = ($i % 2 == 0) ? "odd" : "even";
print(
<tr class="'.$class.'">
<td width="70%" class="search"><a href="'.$page[$t['group_production']].'?page='здесь должен генерироваться номер страницы совпадающий со значениями id и name'&id='.$t['id'].'&name='.$t['name'].'">'.$t['name'].'</td>
<td width="30%" class="search"><a class="1" href="'.$page[$t['group_production']].'">'.$t['group_production'].'</a></td>
</tr>');
}
print("</table>");
print("<h2 align='center' class='search'>Всего по запросу найдено <b>".mysql_num_rows($result)." наимен.</b></h2>");
}
}
?>
include "config_mysql.php"; //соединение с MySQL
if (!function_exists('mysql_real_escape_string')){
function mysql_real_escape_string($value){
return addslashes($value);
}
}
//переменные
$page = array(
'ГСО (Государственные Стандартные Образцы)' => 'State_Standard_Samples.php',
'Душистые вещества (отдушки)' => 'Aromatic_substances.php',
'Индикаторные трубки' => 'Display_tubes.php',
'Индикаторы, красители' => 'Indicators_dyes.php',
'Лабораторное стекло и стеклоприборы (ареометры)' => 'Laboratory_glass/Areometers.php',
'Лабораторное стекло и стеклоприборы (изделия общего назначения)' => 'Laboratory_glass/General_purpose_products.php',
'Лабораторное стекло и стеклоприборы (мерные изделия)' => 'Laboratory_glass/Measured_products.php',
'Лабораторное стекло и стеклоприборы (приборы и аппараты, соединительные элементы, спиртовки, стекла предметные покровные)' => 'Laboratory_glass/Devices_and_devices.php',
'Лабораторное стекло и стеклоприборы (разное)' => 'Laboratory_glass/Miscellaneous.php',
'Лабораторное стекло и стеклоприборы (термометры бытовые)' => 'Laboratory_glass/Thermometers_household.php',
'Лабораторное стекло и стеклоприборы (термометры технические)' => 'Laboratory_glass/Thermometers_technical.php',
'Питательные среды для микробиологии' => 'Nutrient_mediums_for_microbiology.php',
'Растворители' => 'Solvents.php',
'Стандарт-титры (фиксаналы)' => 'Standards_credits.php',
'Тара фасовочная' => 'Container_packing.php',
'Техническая продукция' => 'Technical_production.php',
'Ткани технические' => 'Fabrics_technical.php',
'Тугоплавкие соединения' => 'Refractory_substances.php',
'Фильтры' => 'Filters.php',
'Химические реактивы' => 'Chemical_reactants.php',
'Хроматография' => 'Pure(Clean)_substances_for_a_chromatography.php'
); //массив ссылок на страницы групп товаров
@$id =$_GET['id'];
@$name = mysql_real_escape_string($_GET['name']);
@$group_production =$_GET['group_production'];
//checkboxes
if (empty($name)){
// не заполнено поле
print("<div class='search' align='center'>
<font color='#CC0000'><b>Необходимо заполнить поле поиска!</b></font></div>");
}
else {
if (isset($id)){
$srch='id';
} //id - имя столбца в таблице
if (isset($name)){
$srch='name';
} //name - имя столбца в таблице
if (isset($group_production)){
$srch='group_production';
} //group_production - имя столбца в таблице
@$query = "SELECT * FROM tovary WHERE $srch like '%".mysql_escape_string(addslashes($name))."%' ";
$result = mysql_query($query) or die('Ошибка запроса');
if (mysql_num_rows($result) == 0){
print("<div class='search' align='center'><font color='#CC0000'><b>По вашему запросу ничего не найдено! Попробуйте изменить запрос.</b></font></div>");
}
else {
print("<h1 align='center' class='search'>Результат поиска:</h1><table border='1' cellspacing='1' cellpadding='1' class='search'><tr><td width='70%' class='search_top' align='center'><b>Наименование товара</b></td><td width='30%' class='search_top' align='center'><b>Группа товаров</b></td></tr>");
// Переменная i следит чередование цвета
$i = 0;
while($t = @mysql_fetch_array($result)){
$i++;
$class = ($i % 2 == 0) ? "odd" : "even";
print(
<tr class="'.$class.'">
<td width="70%" class="search"><a href="'.$page[$t['group_production']].'?page='здесь должен генерироваться номер страницы совпадающий со значениями id и name'&id='.$t['id'].'&name='.$t['name'].'">'.$t['name'].'</td>
<td width="30%" class="search"><a class="1" href="'.$page[$t['group_production']].'">'.$t['group_production'].'</a></td>
</tr>');
}
print("</table>");
print("<h2 align='center' class='search'>Всего по запросу найдено <b>".mysql_num_rows($result)." наимен.</b></h2>");
}
}
?>
А вот код постраничного вывода товара с навигацией, на примере одной из групп товара ('group_production'):
Код:
<?php
// Переменная хранит число товарных позиций выводимых на странице
$num = 30;
// Извлекаем из URL текущую страницу
$page = isset($_GET['page']) ? $_GET['page'] : 1;
// Определяем общее число товарных позиций в базе данных
$result = mysql_query("SELECT COUNT(*) FROM tovary");
$result = mysql_fetch_row($result);
// Находим общее число страниц
$total = intval(($result[0] - 1) / $num) + 1;
// Определяем начало товарных позиций для текущей страницы
$page = intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total = 22;
// Вычисляем начиная к какого номера
// следует выводить товарные позиции
$start = $page * $num - $num;
// Выбираем $num сообщений начиная с номера $start
$result = mysql_query("SELECT * FROM tovary WHERE group_production = 'Химические реактивы' ORDER BY name LIMIT $start, $num");
// В цикле переносим результаты запроса в массив
$i = 0;
while ($arResult = mysql_fetch_array($result)):
$i++;
?>
<tr class='cell_<?=($i%2)+1;?>'>
<td>
<?=$arResult['name'];?>
</td>
</tr>
<?endwhile;?>
</table>
<?php
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a title="В начало" class="1" href="Chemical_reactants.php?page=1"><<</a>
<a class="1" href="Chemical_reactants.php?page='. ($page - 1) .'"><Предыдущая</a> ';
// Проверяем нужны ли стрелки вперед
if ($page != $total = 22) $nextpage = ' <a class="1" href="Chemical_reactants.php?page='. ($page + 1) .'">Далее></a>
<a title="В конец" class="1" href="Chemical_reactants.php?page=' .$total. '">>></a>';
// Находим две ближайшие страницы с обоих краев, если они есть
if($page - 2 > 0) $page2left = ' <a class="1" href="Chemical_reactants.php?page='. ($page - 2) .'">'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a class="1" href="Chemical_reactants.php?page='. ($page - 1) .'">'. ($page - 1) .'</a> | ';
if($page + 2 <= $total) $page2right = ' | <a class="1" href="Chemical_reactants.php?page='. ($page + 2) .'">'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a class="1" href="Chemical_reactants.php?page='. ($page + 1) .'">'. ($page + 1) .'</a>';
// Вывод меню
echo @$pervpage.@$page2left.@$page1left.'<b>['.$page.']</b>'.@$page1right.@$page2right.@$nextpage;
?>
// Переменная хранит число товарных позиций выводимых на странице
$num = 30;
// Извлекаем из URL текущую страницу
$page = isset($_GET['page']) ? $_GET['page'] : 1;
// Определяем общее число товарных позиций в базе данных
$result = mysql_query("SELECT COUNT(*) FROM tovary");
$result = mysql_fetch_row($result);
// Находим общее число страниц
$total = intval(($result[0] - 1) / $num) + 1;
// Определяем начало товарных позиций для текущей страницы
$page = intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total = 22;
// Вычисляем начиная к какого номера
// следует выводить товарные позиции
$start = $page * $num - $num;
// Выбираем $num сообщений начиная с номера $start
$result = mysql_query("SELECT * FROM tovary WHERE group_production = 'Химические реактивы' ORDER BY name LIMIT $start, $num");
// В цикле переносим результаты запроса в массив
$i = 0;
while ($arResult = mysql_fetch_array($result)):
$i++;
?>
<tr class='cell_<?=($i%2)+1;?>'>
<td>
<?=$arResult['name'];?>
</td>
</tr>
<?endwhile;?>
</table>
<?php
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a title="В начало" class="1" href="Chemical_reactants.php?page=1"><<</a>
<a class="1" href="Chemical_reactants.php?page='. ($page - 1) .'"><Предыдущая</a> ';
// Проверяем нужны ли стрелки вперед
if ($page != $total = 22) $nextpage = ' <a class="1" href="Chemical_reactants.php?page='. ($page + 1) .'">Далее></a>
<a title="В конец" class="1" href="Chemical_reactants.php?page=' .$total. '">>></a>';
// Находим две ближайшие страницы с обоих краев, если они есть
if($page - 2 > 0) $page2left = ' <a class="1" href="Chemical_reactants.php?page='. ($page - 2) .'">'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a class="1" href="Chemical_reactants.php?page='. ($page - 1) .'">'. ($page - 1) .'</a> | ';
if($page + 2 <= $total) $page2right = ' | <a class="1" href="Chemical_reactants.php?page='. ($page + 2) .'">'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a class="1" href="Chemical_reactants.php?page='. ($page + 1) .'">'. ($page + 1) .'</a>';
// Вывод меню
echo @$pervpage.@$page2left.@$page1left.'<b>['.$page.']</b>'.@$page1right.@$page2right.@$nextpage;
?>
Поиск построен таким образом, что в результате могут быть найдены наименования относящиеся к различным группам, при переходе по ссылкам из колонки 'Группа таваров' ('group_production') - проблем нет, а вот при переходе по любой из ссылок в колонке 'Наименование товара' ('name') должен совершаться переход на страницу где это наименование расположено, с учетом постраничного вывода, а это к сожалению не происходит, т.к. незнаю. как это организовать, знаний по PHP явно маловато.
Код:
<a href="'.$page[$t['group_production']].'?id='.$t['id'].'&name='.$t['name'].'">'.$t['name'].'</a>
написать вот ето:
Код:
echo("<a href='".$page[$t["group_production"]]."?id=".$t["id"]."&name=".$t["name"]."'>".$t["name"]."</a>");
Код:
echo ('<a href="?page='.($page-1).'&name='.$t["name"].'"> Предыдущая страница</a> <a href="?page='.($page+1).'&name='.$t["name"].'"> Следующая страница</a> ');
А ещё нужно разобраться как страницы считать...
Код:
if(!isset($page) || $page<0) // защита от дурака\мудака
{ page="0"; }
$start=$page*10; // с какой позиции читать результат....
$sql="SELECT * from table limit $start, 10"; // пускаем по 10 результатов.
$result=mysql_query($sql); // делаем запрос
$rows=mysql_num_rows($result); // узнаём сколько результатов из запроса
////// дальше делаешь вывод как тебе нравится..
// После вывода результатов
$sql2="SELECT * from table"; // Повторное обращение к базе, чтобы узнать сколько ВСЕГО результатов по запросу, без limit.
$result2=mysql_query($sql2); // Чтоб было понятно что это другой запрос - используем переменную с индексом "2"
$rows2=mysql_num_rows($result2); // считаем сколько всего релевантных (подходящих по запросу) элементов.
$pages = ceil($rows2/10); // округляем в сторону большего чтобы узнать коль-во страниц всего.
for($i=0; $i<$pages; $i++) // выводим их в цикле
{ $k=$i+1; // чтобы указывать номер страницы
echo ('<a href="?page='.$i.'"> '.$k.'</a> '); // выводим по одному.
}
{ page="0"; }
$start=$page*10; // с какой позиции читать результат....
$sql="SELECT * from table limit $start, 10"; // пускаем по 10 результатов.
$result=mysql_query($sql); // делаем запрос
$rows=mysql_num_rows($result); // узнаём сколько результатов из запроса
////// дальше делаешь вывод как тебе нравится..
// После вывода результатов
$sql2="SELECT * from table"; // Повторное обращение к базе, чтобы узнать сколько ВСЕГО результатов по запросу, без limit.
$result2=mysql_query($sql2); // Чтоб было понятно что это другой запрос - используем переменную с индексом "2"
$rows2=mysql_num_rows($result2); // считаем сколько всего релевантных (подходящих по запросу) элементов.
$pages = ceil($rows2/10); // округляем в сторону большего чтобы узнать коль-во страниц всего.
for($i=0; $i<$pages; $i++) // выводим их в цикле
{ $k=$i+1; // чтобы указывать номер страницы
echo ('<a href="?page='.$i.'"> '.$k.'</a> '); // выводим по одному.
}
В результате получим:
Код:
123
вот такой вывод...
может где какую запятую пропустил... писал от руки... но вообще это рабочий код.
поочередно принтом выведи по одной переменной - сразу увидишь где ошибка