Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как лучше передать значение?
 
 автор: Dizels   (18.03.2010 в 11:36)   письмо автору
 
 

Ситуация такая, есть база данных:
рубрика1  товар1
рубрика2  товар2
рубрика1  товар3
рубрика3  товар4
рубрика4  товар5
рубрика3  товар6
рубрика2  товар7
рубрика1  товар8

На странице вывожу список категорий таким запросом:
$zapros = "SELECT DISTINCT rub FROM pen";

т.е. выводится такой список рубрик:
рубрика1
рубрика2
рубрика3
рубрика4

Вот, теперь собственно нужно сделать, чтобы при нажатии на рубрику1 выводить товары только из рубрики1 а вот как лучше передать данные - не могу сообразить. До этого у меня все время была отдельная таблица с рубриками и их уникальным идентификатором, через него и выводил. Но тут по идее нужно записать значение рубрики в переменную и сравнивать ее со всеми записями в БД и выводить те записи, где значения идентичны. Но, вот как собственно передать это значение?

  Ответить  
 
 автор: Slo_Nik   (18.03.2010 в 12:13)   письмо автору
 
   для: Dizels   (18.03.2010 в 11:36)
 

если я правильно понял, то название рубрики делать ссылкой
<a href='example.php?id=id_рубрики'>рубрика1</a>

из базы получить можно
$zapros = "SELECT * FROM pen WHERE id_рубрики = id_рубрики";

  Ответить  
 
 автор: Dizels   (18.03.2010 в 12:16)   письмо автору
 
   для: Slo_Nik   (18.03.2010 в 12:13)
 

В том то и проблема, что нету id_рубрики

  Ответить  
 
 автор: Slo_Nik   (18.03.2010 в 12:19)   письмо автору
 
   для: Dizels   (18.03.2010 в 12:16)
 

передай тогда через get имя рубрики и сравнивай при выводе из базы

  Ответить  
 
 автор: Dizels   (18.03.2010 в 12:41)   письмо автору
 
   для: Slo_Nik   (18.03.2010 в 12:19)
 

А это не будет поводом для sql-инъекций? я просто подумал, что так делать очень не безопасно + к тому же - рубрики имеют вид: Бренд\Promo\ - т.е. часть текста на русском, часть на английском - поэтому урл - некрасивый выходит, да и поисковые машины думаю на такие урлы будут не очень хорошо смотреть, хотелось бы что-то другое придумать.

  Ответить  
 
 автор: Trianon   (18.03.2010 в 14:10)   письмо автору
 
   для: Dizels   (18.03.2010 в 12:16)
 

>В том то и проблема, что нету id_рубрики

Нужно сделать, чтоб было.

  Ответить  
 
 автор: oliss   (18.03.2010 в 12:47)   письмо автору
 
   для: Dizels   (18.03.2010 в 11:36)
 

>Ситуация такая, есть база данных:
>рубрика1 товар1
>рубрика2 товар2
>рубрика1 товар3

Может все-таки это таблица?

  Ответить  
 
 автор: Dizels   (18.03.2010 в 12:51)   письмо автору
 
   для: oliss   (18.03.2010 в 12:47)
 

Да - таблица, думаю это и так было понятно ;) Лучше подскажите по сути вопроса :)

  Ответить  
 
 автор: Dizels   (18.03.2010 в 13:48)   письмо автору
 
   для: Dizels   (18.03.2010 в 12:51)
 

>передай тогда через get имя рубрики и сравнивай при выводе из базы

Это не вариант, так как рубрика состоит и текста как на русском, так и на английском языке - и поэтому урл будет очень не красивый

  Ответить  
 
 автор: Dizels   (18.03.2010 в 15:00)   письмо автору
 
   для: Dizels   (18.03.2010 в 13:48)
 


// Составляем список категорий
$zapros = "SELECT DISTINCT rub FROM pen";
    if($p = mysql_query($zapros))
        {            
            // Так как запрос возвращает несколько строк, применяем цикл
            while($gf = mysql_fetch_array($p))
            {
                $cat_name = $gf['rub'];
                $cat_nam = mysql_real_escape_string($cat_name);
                print $cat_name;
                
                    // добавляем рубрику
                    $ty = "INSERT INTO pen_cat VALUES (NULL, '$cat_nam')";                                
                    if(mysql_query($ty))
                    {
                        echo "Рубрики добавлены в БД<br>";
                    }
                
            }
        }

Вот.
Дальше в файле вывода рубрик формирую ссылки:
$zapros = "SELECT * FROM pen_cat";
            if($p = mysql_query($zapros))
            {            
                // Так как запрос возвращает несколько строк, применяем цикл
                while($f = mysql_fetch_array($p))
                {
                    echo "<a href='index.php?id=".$f['id']."'>".$f['name']."</a><br>";                        
                }
            }

В index.php проверяю на наличие передачи данных:
if ($_GET['id'])
    {
}

Но вот собственно как поступать дальше?

  Ответить  
 
 автор: Slo_Nik   (18.03.2010 в 15:30)   письмо автору
 
   для: Dizels   (18.03.2010 в 15:00)
 

сделай как говорил Trianon, да и я тебе в своём ответе писал про id _рубрики.
в таблице с категориями добавь вторичный ключ, который будет равный id _рубрики и при выборке из БД ориентируйся на это значение. так будет проще...
если я правильно понял, то при передачи через get значения id в условии WHERE проверяй id_рубрики к которой принадлежит категория

if($_GET['id']){
$query= "SELECT * FROM `table` WHERE `id` = '".$_GET['id']."'";
}

  Ответить  
 
 автор: Dizels   (18.03.2010 в 15:49)   письмо автору
 
   для: Slo_Nik   (18.03.2010 в 15:30)
 

Можно подробнее?
Сейчас у меня: 2 таблицы - с категориями и товарами.
Таблица категорий:
id   name
1    category1
2    category2
3    category3

Таблица товаров:
id     name       category
1      tovar1       category1
2      tovar2       category2
3      tovar3       category1
4      tovar4       category3
5      tovar5       category1

Как добавить вторичный ключ?

P.S. то ли я чего-то не понимаю, то ли вы неправильно понимаете что я пишу)

  Ответить  
 
 автор: Slo_Nik   (18.03.2010 в 16:46)   письмо автору
 
   для: Dizels   (18.03.2010 в 15:49)
 

в таблицу с товарами, добавить id_категори, вместо category добавить столбец с именем id_категории
Таблица категорий:

id_category   name 
1                     category1 
2                     category2 
3                     category3


Таблица товаров:

id     name       id_category 
1      tovar1       3
2      tovar2       1
3      tovar3       1
4      tovar4       2 
5      tovar5       2

вот тут id_category и есть вторичный ключ.
в таблице с категориями id_category является первичным ключом и устанавливает уникальность записи.
при таком разкладе, при попытке вывести наименование товаров, для первой категории выведет 1 товар для второй и третьей по две позиции товара.
и ни какой путаницы не произойдёт...
естественно, что первичный ключ таблицы категорий id_category должен быть снабжён атрибутом AUTO_INCREMENT
Тогда при переходе по ссылке

echo "<a href='index.php?id=".$f['id_category']."'>".$f['name']."</a><br>";

на странице index делаем запрос к базе

if($_GET['id_category']){
$query= "SELECT * FROM `table` WHERE `id_category` = '".$_GET['id']."'";
}

  Ответить  
 
 автор: Dizels   (18.03.2010 в 19:10)   письмо автору
 
   для: Slo_Nik   (18.03.2010 в 16:46)
 

Тогда вопрос такой:
как в таблицу с товарами добавить столбец id_category ? Ведь тут нужно тоже самое сравнение проводить с таблицей категорий по названию категории. Как это реализовать? И собственно нужен ли тогда этот столбец?

  Ответить  
 
 автор: Dizels   (18.03.2010 в 19:21)   письмо автору
 
   для: Dizels   (18.03.2010 в 19:10)
 

>вместо category добавить столбец с именем id_категории
увы, но не могу, так как данные в этой таблице формируются из xml-файла и там записано именно название рубрики, а не ее порядковый номер. Именно из-за этого собственно вся проблема и началась, что нужно преобразовать имеющиеся данные.

  Ответить  
 
 автор: Slo_Nik   (18.03.2010 в 20:22)   письмо автору
 
   для: Dizels   (18.03.2010 в 19:21)
 

>увы, но не могу, так как данные в этой таблице формируются из xml-файла и там записано именно название рубрики, а не ее порядковый номер.

во-первых, с этого и надо было начинать...

во-вторых, ну и что, что отсутствует id категории? как формируются записи в таблице с названиями категорий?

  Ответить  
 
 автор: Dizels   (18.03.2010 в 20:42)   письмо автору
 
   для: Slo_Nik   (18.03.2010 в 20:22)
 

>как формируются записи в таблице с названиями категорий?
Примерно вот так:
// Парсим файл 
$xml = simplexml_load_file($filename);     
foreach ($xml->item as $item) 
{
$tov_rubr = $item->tov_rubr;
        foreach ($tov_rubr as $rubr)
        {
            $rrr = $tov_rubr->rubr;
        }  
$rrr = iconv("UTF-8", "windows-1251", $rrr);
$y = "INSERT INTO pen VALUES (NULL,
                                '$tov_id',
                                '$tov_name',
                                '$rrr')";                                
if(mysql_query($y))
    {
        echo "Данные добавлены в БД<br>";
    }

  Ответить  
 
 автор: Slo_Nik   (18.03.2010 в 21:18)   письмо автору
 
   для: Dizels   (18.03.2010 в 20:42)
 

таблица с названиями категорий как формируется, а не таблица с товарами?

  Ответить  
 
 автор: Slo_Nik   (18.03.2010 в 20:19)   письмо автору
 
   для: Dizels   (18.03.2010 в 19:10)
 

>как в таблицу с товарами добавить столбец id_category ?
как и любой другой столбец...

> Ведь тут нужно тоже самое сравнение проводить с таблицей категорий по названию категории.

у каждой категории товара есть свой id, уникальный ключ, неповторяемый...
если удалить категорию из базы, потом занести новую категорию, то id новой категории ни когда не будет равным удалённому id...
при этом, название категории может измениться, прийдётся менять содержимое столбца category в таблице товаров...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования