Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Неправильно передаются данные по ссылке

21K
09 февраля 2008 года
mjc66
15 / / 17.08.2007
Проблема в следующем, передаю по ссылке на страницу вывода номенклатуры, данные об "id" и "name":
 
Код:
<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>");
                }
}
?>

А вот код постраничного вывода товара с навигацией, на примере одной из групп товара ('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;  
?>

Поиск построен таким образом, что в результате могут быть найдены наименования относящиеся к различным группам, при переходе по ссылкам из колонки 'Группа таваров' ('group_production') - проблем нет, а вот при переходе по любой из ссылок в колонке 'Наименование товара' ('name') должен совершаться переход на страницу где это наименование расположено, с учетом постраничного вывода, а это к сожалению не происходит, т.к. незнаю. как это организовать, знаний по PHP явно маловато.
31K
10 февраля 2008 года
Yarosl@w
18 / / 23.01.2008
Я конешно не уверен, что проблема в етом, но мне кажется, что правильнее будет вместо етого:
 
Код:
<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>");
369
11 февраля 2008 года
Kesano
451 / / 09.10.2007
вот как должно гененрироваться:

 
Код:
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> '); // выводим по одному.
  }

В результате получим:
 
Код:
123

вот такой вывод...

может где какую запятую пропустил... писал от руки... но вообще это рабочий код.
21K
11 февраля 2008 года
t3s
26 / / 12.03.2007
попробуй старым дедовским пхп-дебаггером, именуемом print :)
поочередно принтом выведи по одной переменной - сразу увидишь где ошибка
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог