В админ панели при добавлении новости, нужно зделать чтоб пользователь мог выбрать категорию для новости,
сделал выпадающее меню для выбора категории, но как подключить его к базе данных MySql незнаю...
то есть чтоб в выпадающем списке выбирались категории которые есть в БД в табличке categories.
И при сохранении новости, в таблицу категории,
была внесена запись, к какой категории принадлежит новость.
<p>
<label>Выберетите категорию<br />
<select name="category" size="1" id="category">
<option value="add_новость.php" selected="selected">Категория 1</option>
<option value="aadd_новость.php">Категория 2 </option>
<option value="add_новость.php">Категория 3</option>
<option value="add_новость.php">Категория 4</option>
<option value="add_новость.php">Категория 5</option>
<option value="add_новость.php">Категория 6</option>
</select>
</label>
</p>
Вот такой код написал... как с БД соединить помогите
Спустя 16 часов, 14 минут, 12 секунд (8.02.2010 - 13:55) AmberLEX написал(а):
Нужны две таблицы в БД по идее: одна с категориями, другая с новостями.
В таблице новостей поле cid, например, которое указывает к какой категории относится новость (поле cid в таблице новостей = полю id в таблице категорий)
Читаешь из ДБ категории и строишь из них выпадающий список. В таблицу новостей (в поле cid) сохраняешь id выбранной категории из списка. Типа того.
А когда читаешь новости, то в запросе where cid новости = id категории.
В таблице новостей поле cid, например, которое указывает к какой категории относится новость (поле cid в таблице новостей = полю id в таблице категорий)
Читаешь из ДБ категории и строишь из них выпадающий список. В таблицу новостей (в поле cid) сохраняешь id выбранной категории из списка. Типа того.
А когда читаешь новости, то в запросе where cid новости = id категории.
Спустя 9 минут, 6 секунд (8.02.2010 - 14:04) Tokugava написал(а):
мамачка!!! Спасибо за помощ... но я оканчательно запуталсо...
Может быть знаете какой нибудь кусочек кода... хоть примерно посмотреть что к чему. Я недавно на PHP пытаться писать сайты начал... с БД страшно путаюсь.
В частности что вписывать как ссылку в value="add_новость.php" я даже представить не могу
Может быть знаете какой нибудь кусочек кода... хоть примерно посмотреть что к чему. Я недавно на PHP пытаться писать сайты начал... с БД страшно путаюсь.
В частности что вписывать как ссылку в value="add_новость.php" я даже представить не могу
Спустя 1 минута, 52 секунды (8.02.2010 - 14:06) AmberLEX написал(а):
<select name="cid">
<option value="0" selected>Категория не выбрана</option>
<?php
$res = mysql_query("SELECT id, name FROM news");
while ($row = mysql_fetch_assoc($res)) {
echo '<option value="'.$row['id'].'">'.$row['name'].'</option>';
}
?>
</select>
Спустя 1 минута, 12 секунд (8.02.2010 - 14:07) AmberLEX написал(а):
Цитата |
Может быть знаете какой нибудь кусочек кода... |
Откуда я знаю что у тебя уже есть? Какие таблицы?
Спустя 2 минуты, 5 секунд (8.02.2010 - 14:09) Tokugava написал(а):
Цитата |
while |
Это из массива DO WHILE? ... Тоесть с помощю do while делать выборку из БД пока там что то есть...? Понял спасибо БОЛЬШОЕ!!!
Спустя 2 минуты, 32 секунды (8.02.2010 - 14:12) Tokugava написал(а):
Цитата |
Откуда я знаю что у тебя уже есть? Какие таблицы? |
Табличка categories имеет поле ID, name(имя катег.) discription(описание)
Табличка produkts имеет ID,name,meta_k,meta_d,discription(описание), text(полное описалово)
Спустя 3 минуты, 38 секунд (8.02.2010 - 14:15) AmberLEX написал(а):
Цитата |
Тоесть с помощю do while |
- цикл while, do-while - это из какой-то старой книжки)
Спустя 2 минуты, 33 секунды (8.02.2010 - 14:18) Tokugava написал(а):
Цитата |
do-while - это из какой-то старой книжки) |
Видео уроки Евг. Попова
Спустя 3 минуты (8.02.2010 - 14:21) Kuliev написал(а):
Цитата (Tokugava @ 8.02.2010 - 16:18) | ||
Видео уроки Евг. Попова |
в топку ПОПОВА.....
Спустя 9 минут, 54 секунды (8.02.2010 - 14:31) AmberLEX написал(а):
А при чем тут новости? ))) Ну не важно.
В этом случае вообще, чтобы были категории и товары (или статьи, новости) нужно определять к какой категории относится товар. Для этого делается две таблицы: категорий и товара.
Categories:
Products:
Т.е. cid указывет на принадлежность товара к категории.
Чтобы выбрать товары категории cat_name_2, например, запрос будет типа такого:
$id = 2;
"SELECT * FROM Products WHERE cid=$id"
Т.е. если в админке нужно сохранить товар, то из выпадающего списка нужно взять id выбранной категории и сохранить его в Products в поле cid
В этом случае вообще, чтобы были категории и товары (или статьи, новости) нужно определять к какой категории относится товар. Для этого делается две таблицы: категорий и товара.
Categories:
id cat_name
1 cat_name_1
2 cat_name_2
3 cat_name_3
Products:
id cid product_name
1 1 product_1_1
2 2 product_2_1
3 2 product_2_2
4 2 product_2_3
5 3 product_3_1
6 3 product_3_2
Т.е. cid указывет на принадлежность товара к категории.
Чтобы выбрать товары категории cat_name_2, например, запрос будет типа такого:
$id = 2;
"SELECT * FROM Products WHERE cid=$id"
Т.е. если в админке нужно сохранить товар, то из выпадающего списка нужно взять id выбранной категории и сохранить его в Products в поле cid
Спустя 3 часа, 31 минута, 32 секунды (8.02.2010 - 18:02) Tokugava написал(а):
AmberLEX
спасибо за помощ окончательно все понял. И правда все работает
Но вот незадача... Kuliev походу был прав насчет цикла DO WHILE...
Есть вот такой код:
на страничке каталога все категории отображаются корректно как и задумал...
и имеют ссылки вида хттп://site.ru/view_categories.php?id=1, 2, 3 ... и т д.
И при нажатии на такую ссылку попадаю на страничку view_categories.php где циклом (do while ) выводятсо данные из таблички produkts, но проблема интересная появилась ...
Неважно какую я категорию выбираю (тоесть: view_categories.php?id=1 или view_categories.php?id=2 итд) ...
выводитсо товар из 1 категории
вот такой код в страничке view_categories.php:
Мне кажется здесь do while не подходит... а как зделать иначе незнаю. Перерыл пол инета (условно конечно... но рылсо долго, пол рабочего дня) так и не нашел решение, как сделать чтоб на страничке выводилсо товар только той категории, какой нужен.
Тоесть в страничке view_categories.php?id=1 выводился товар или новость категории с id=1 или там 2.
в страничке view_categories.php?id=2 выводился товар или новость категории с id=3 или 4,5,6 ... итд.
Если есть еще терпение обьяснить тупице типа меня помогите пожалуста, ссылочкой на почитать по теме, или куском кода с коментами (как у Попова ) Буду очень благодарен.
P.S. Писать движок взялся, свой первый, а знаний только видеоуроки Попова, но на примерах что то понимать легче, а на практике ещё легче.
спасибо за помощ окончательно все понял. И правда все работает
Но вот незадача... Kuliev походу был прав насчет цикла DO WHILE...
Есть вот такой код:
<?php
$result = mysql_query ("SELECT id, name, discription FROM categories",$db);
$myrow = mysql_fetch_array($result);
do {
printf ("
<table width='740' border='0' align='center' cellpadding='0' cellspacing='0' class='katalog'>
<tr>
<td width='360' height='20' align='left' valign='top' class='bg_category'><div class='name_title'> Категория: | <a href='view_categories.php?id=%s'> %s</a> | </div>
</td>
</tr>
<tr>
<td colspan='2'>%s</td>
</tr>
</table><br>",$myrow["id"], $myrow["name"], $myrow["discription"]);
}
while ($myrow = mysql_fetch_array($result));
?>
на страничке каталога все категории отображаются корректно как и задумал...
и имеют ссылки вида хттп://site.ru/view_categories.php?id=1, 2, 3 ... и т д.
И при нажатии на такую ссылку попадаю на страничку view_categories.php где циклом (do while ) выводятсо данные из таблички produkts, но проблема интересная появилась ...
Неважно какую я категорию выбираю (тоесть: view_categories.php?id=1 или view_categories.php?id=2 итд) ...
выводитсо товар из 1 категории
вот такой код в страничке view_categories.php:
<!--выводим с помощью ду вайл все из таблицы produkts где id = категории-->
<?php
$result = mysql_query ("SELECT * FROM produkts WHERE categories = 1",$db);
$myrow = mysql_fetch_array($result);
do {
printf ("
%s - name
<br>
%s -categories
<br>
%s - meta_k
<br>
%s - meta_d
<br>
%s - diskription
<br>",$myrow["name"], $myrow["categories"], $myrow["meta_k"], $myrow["meta_d"], $myrow["diskription"]);
}
while ($myrow = mysql_fetch_array($result));
?>
Мне кажется здесь do while не подходит... а как зделать иначе незнаю. Перерыл пол инета (условно конечно... но рылсо долго, пол рабочего дня) так и не нашел решение, как сделать чтоб на страничке выводилсо товар только той категории, какой нужен.
Тоесть в страничке view_categories.php?id=1 выводился товар или новость категории с id=1 или там 2.
в страничке view_categories.php?id=2 выводился товар или новость категории с id=3 или 4,5,6 ... итд.
Если есть еще терпение обьяснить тупице типа меня помогите пожалуста, ссылочкой на почитать по теме, или куском кода с коментами (как у Попова ) Буду очень благодарен.
P.S. Писать движок взялся, свой первый, а знаний только видеоуроки Попова, но на примерах что то понимать легче, а на практике ещё легче.
Спустя 11 минут, 24 секунды (8.02.2010 - 18:14) DedMorozzz написал(а):
Пользуйся. Кулиёву спасибо передашь
Спустя 1 час, 12 минут, 34 секунды (8.02.2010 - 19:26) AmberLEX написал(а):
Так у тебя 1 жестко и прописано )))
"SELECT * FROM produkts WHERE categories = 1"
В view_categories.php?id=1 ты принимаешь параметр
"SELECT * FROM produkts WHERE categories = 1"
В view_categories.php?id=1 ты принимаешь параметр
$id = (int)$_GET['id'];
$result = mysql_query ("SELECT * FROM produkts WHERE categories = $id", $db);
Спустя 20 минут, 35 секунд (8.02.2010 - 19:47) AmberLEX написал(а):
А про do-while в справке посмотри, там такого нет и близко (тут например http://php.su/functions/?mysql-fetch-array)
$myrow = mysql_fetch_array($result); потом идет цикл do...
а если у тебя нет ни одного ряда в БД - цикл выполнится и выдаст ошибку.
(можно здесь http://phpclub.ru/detail/article/phpmistake_2) почитать, правда написано не очень вразумительно.
mysql_fetch_array - возвращает ассоциативный массив, численный или оба сразу, в зависимости от параметра. По умолчанию - оба. Зачем тебе оба массива, если используешь только ассоциативный?
Я использую mysql_fetch_assoc - возвращает только ассоциативный массив.
или так тогда:
$myrow = mysql_fetch_array($result); потом идет цикл do...
а если у тебя нет ни одного ряда в БД - цикл выполнится и выдаст ошибку.
(можно здесь http://phpclub.ru/detail/article/phpmistake_2) почитать, правда написано не очень вразумительно.
mysql_fetch_array - возвращает ассоциативный массив, численный или оба сразу, в зависимости от параметра. По умолчанию - оба. Зачем тебе оба массива, если используешь только ассоциативный?
Я использую mysql_fetch_assoc - возвращает только ассоциативный массив.
или так тогда:
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
...
}
Спустя 1 час, 16 минут, 33 секунды (8.02.2010 - 21:03) qpayct написал(а):
и здесь попов.... знаменитый я смотрю дядя на вашем форуме
Спустя 10 часов, 48 минут, 43 секунды (9.02.2010 - 07:52) Kuliev написал(а):
Цитата (qpayct @ 8.02.2010 - 23:03) |
и здесь попов.... знаменитый я смотрю дядя на вашем форуме |
Он вообще супер-мега популярен на таких форумах, потому что все хотят научиться быстро программировать не вникая в суть, а просто копипастят ГОВНОКОД господина ПОПОВА, а потом спрашивают что у них не работает и почему.
Спустя 13 часов, 23 минуты, 55 секунд (9.02.2010 - 21:16) Tokugava написал(а):
Покопалсо я малость и понял...что нифига не понял
Вернее понял что функция mysql_fetch_array() мне не подходит потомучто берет и возвращает все массивы и численный и ассоциативный... понял что в моем случае подходит mysql_fetch_assoc ... потомучто мне вроде как нужен только ассоциативный...
Проблема заключается в том что при выборе категории пользователем он попадает на страничку view_categories.php... а там один и тот же код для всего. Только категории разные.. вот рисунка
на рисунке страничка katalog.php в нее с помощью do while выводятся категории.
Стоит задача в файле view_categories.php показывать пользователю только те товары и новости что находятся в определенной категории, которую он выбрал.
Ссылки нарисованы на картинке. Проблема в том что с моим кривым кодом, когда пользователь просматривает ЛЮБУЮ категорию, ему из базы достает ВЕСЬ товар и новости, а не только тот который в той категории которую он выбрал.
Файл то один! View_categories.php и только ?id=... разные.
И как сие реализовать, какой функцией... не представляю...
Вернее понял что функция mysql_fetch_array() мне не подходит потомучто берет и возвращает все массивы и численный и ассоциативный... понял что в моем случае подходит mysql_fetch_assoc ... потомучто мне вроде как нужен только ассоциативный...
Проблема заключается в том что при выборе категории пользователем он попадает на страничку view_categories.php... а там один и тот же код для всего. Только категории разные.. вот рисунка
на рисунке страничка katalog.php в нее с помощью do while выводятся категории.
Стоит задача в файле view_categories.php показывать пользователю только те товары и новости что находятся в определенной категории, которую он выбрал.
Ссылки нарисованы на картинке. Проблема в том что с моим кривым кодом, когда пользователь просматривает ЛЮБУЮ категорию, ему из базы достает ВЕСЬ товар и новости, а не только тот который в той категории которую он выбрал.
Файл то один! View_categories.php и только ?id=... разные.
И как сие реализовать, какой функцией... не представляю...
Спустя 2 часа, 46 минут, 56 секунд (10.02.2010 - 00:03) AmberLEX написал(а):
Вот ты написал кучу инфы, по которой все равно не понятно, что там у тебя творится
По идее у тебя два файла:
view_categories.php - в котором ты выводишь названия категорий (со ссылкой на файл, в котором будешь выводть товары этой категории)
Офисная мебель (ссылка такая: site.ru://view_products.php?id=1)
Детская мебель (ссылка такая: site.ru://view_products.php?id=2)
По нажатии на ссылку ты попадаешь в файл view_products.php в котором выводишь все товары этой категории
По идее у тебя два файла:
view_categories.php - в котором ты выводишь названия категорий (со ссылкой на файл, в котором будешь выводть товары этой категории)
$result = mysql_query ("SELECT * FROM categories");Выходит типа этого:
while ($row = mysql_fetch_assoc($result)) {
echo '<a href="site.ru://view_products.php?id=' . $row['category_id'] . '">' . $row['category_name'] . '</a><br />';
}
Офисная мебель (ссылка такая: site.ru://view_products.php?id=1)
Детская мебель (ссылка такая: site.ru://view_products.php?id=2)
По нажатии на ссылку ты попадаешь в файл view_products.php в котором выводишь все товары этой категории
$id = (int)$_GET['id']; // принимаешь параметрЭто при условии, что у тебя две таблицы типа того, как я писал ранее. (т.е. в таблице с товарами находится поле cat_id, которое определяет какой категории товар)
$result = mysql_query ("SELECT * FROM products WHERE cat_id = $id");
while ($row = mysql_fetch_assoc($result)) {
echo $row['product_name'] . '<br />';
}
Цитата |
Стоит задача в файле view_categories.php показывать пользователю только те товары и новости что находятся в определенной категории |
Потому как во view_categories.php вроде нелогично показывать товары или новости.
А вообще попробуй сначала самый простой код: сделай БД с двумя таблицами
categories (category_id, category_name)
products (product_id, cat_id, product_name)
Создай эти два файла view_categories.php и view_products.php (ну естественно все необходимые приготовления для работы с ДБ) и проверь как все работает (должны работать т.е. улови смысл на минимальном коде вначале, а потом уже усложняй.
А вообще попробуй сначала самый простой код: сделай БД с двумя таблицами
categories (category_id, category_name)
products (product_id, cat_id, product_name)
Создай эти два файла view_categories.php и view_products.php (ну естественно все необходимые приготовления для работы с ДБ) и проверь как все работает (должны работать т.е. улови смысл на минимальном коде вначале, а потом уже усложняй.
Спустя 8 часов, 48 минут, 9 секунд (10.02.2010 - 08:51) Tokugava написал(а):
Цитата |
Потому как во view_categories.php вроде нелогично показывать товары или новости. |
Вероятно нелогично... но дело в том что я имел ввиду когда называл файл именно view_categories.php, просмотреть товары и новости ИМЕННО этой категории. Тоесть в этом файле из БД должны вытягиватсо только товары категории "офисная мебель", например... и выводится кратким описанием. По нажатии на какойнибудь товар осуществляется переход на полное описание товара, тоесть на страничку view_produkts.php. Вот.
Спустя 22 минуты, 10 секунд (10.02.2010 - 09:13) qpayct написал(а):
Цитата (Kuliev @ 9.02.2010 - 06:52) | ||
Он вообще супер-мега популярен на таких форумах, потому что все хотят научиться быстро программировать не вникая в суть, а просто копипастят ГОВНОКОД господина ПОПОВА, а потом спрашивают что у них не работает и почему. |
их надо убивать пока они маленькие
Спустя 1 час, 4 минуты, 2 секунды (10.02.2010 - 10:17) AmberLEX написал(а):
Ну смысл я написал, пробуй)))
Спустя 5 часов, 2 минуты, 24 секунды (10.02.2010 - 15:20) Tokugava написал(а):
Попробовал... вроде работает но где то закралась ошибка
Вот такой нарисовался код на view_categories.php, и он работает посути только изменил названия из БД.
А вот такой на view_products.php...
и чего то он мне чистый лист кажет... хотя в БД данные есть, и с базой вроде соединен...
глянул в поисковую строку браузера и вот такой мне странный ужос нарисовало:
http://localhost/site.ru/view_products.php?id=$id1
$id = (int)$_GET['id']; // принимаешь параметр - вот тут я немного не понял как читать выражение... прочитал так: Переменная ID = (целое)$_GET(типо получить ID из базы Оо)['id']
...Вобщем чую что загвоздка тут. А найти ошибку я так и не смог, вроде все правильно... пол дня колупался и не дошло
Добавлено...
Есть прогресс... попробовал менять параметр у $id = (int)$_GET['id'];
на ['name'] и тому подобное... стал выдавать ошибку...
Но хоть не белый лист и на том спасибо
Вот такой нарисовался код на view_categories.php, и он работает посути только изменил названия из БД.
<?php
$db=mysql_connect("localhost","admin-mebel","123",$db);
mysql_select_db ("irbit-mebel",$db);
$result = mysql_query ("SELECT * FROM categories");
while ($row = mysql_fetch_assoc($result)) {
echo '<a href="view_products.php?id=$id' . $row['id'] . '">' . $row['name'] . '</a><br />';
}
?>
А вот такой на view_products.php...
<?php
$db=mysql_connect("localhost","admin-mebel","123",$db);
mysql_select_db ("irbit-mebel",$db);
$id = (int)$_GET['id']; // принимаешь параметр
$result = mysql_query ("SELECT * FROM produkts WHERE id = $id");
while ($row = mysql_fetch_assoc($result)) {
echo $row['name'] . '<br />';
}
?>
и чего то он мне чистый лист кажет... хотя в БД данные есть, и с базой вроде соединен...
глянул в поисковую строку браузера и вот такой мне странный ужос нарисовало:
http://localhost/site.ru/view_products.php?id=$id1
$id = (int)$_GET['id']; // принимаешь параметр - вот тут я немного не понял как читать выражение... прочитал так: Переменная ID = (целое)$_GET(типо получить ID из базы Оо)['id']
...Вобщем чую что загвоздка тут. А найти ошибку я так и не смог, вроде все правильно... пол дня колупался и не дошло
Добавлено...
Есть прогресс... попробовал менять параметр у $id = (int)$_GET['id'];
на ['name'] и тому подобное... стал выдавать ошибку...
Но хоть не белый лист и на том спасибо
Спустя 7 часов, 5 минут, 39 секунд (10.02.2010 - 22:25) AmberLEX написал(а):
echo '<a href="view_products.php?id=$id' . $row['id'] . '">' . $row['name'] . '</a><br />';
//исправь на
echo '<a href="view_products.php?id=' . $row['id'] . '">' . $row['name'] . '</a><br />';
то я копировал и id=$id затусовалось
Спустя 1 час, 3 минуты, 3 секунды (10.02.2010 - 23:28) AmberLEX написал(а):
Не знаю от куда ты изучать начал php, но думаю нужно с основ начать. Ты выходить сразу чуть-ли не БД с товарами и категориями делать начал )
Что такое $_GET, echo, как строки формируются.
Например:
Выведет на экран
Т.е. то, что в одинарных кавычках - выводится как есть. Точка - типа конкатенация строк. Выходит что тут строка формируется из трех частей.
Т.е.
Вот эта часть строки
'<a href="view_products.php?id=$id' так и выведется с $id и присоединит значение из массива $row['id'] и выйдет вот такая ссылка: http://localhost/site.ru/view_products.php?id=$id1. Что делать? Убрать $id
Что такое $_GET, echo, как строки формируются.
Например:
$a = 'Билл Гейтс';
echo 'Привет, ' . $a . '. Ты балбес!';
Выведет на экран
Привет, Билл Гейтс. Ты балбес!
Т.е. то, что в одинарных кавычках - выводится как есть. Точка - типа конкатенация строк. Выходит что тут строка формируется из трех частей.
Т.е.
echo '<a href="view_products.php?id=$id' . $row['id'] . '">' . $row['name'] . '</a><br />';
Вот эта часть строки
'<a href="view_products.php?id=$id' так и выведется с $id и присоединит значение из массива $row['id'] и выйдет вот такая ссылка: http://localhost/site.ru/view_products.php?id=$id1. Что делать? Убрать $id
Цитата |
Переменная ID = (целое)$_GET(типо получить ID из базы Оо)['id'] |
$id = (int)$_GET['id']; // принимаешь параметр
берет переменную из глобального массива $_GET, приводит ее к целому типу и присваивает переменной $id.
После нажатия на эту ссылку view_products.php?id=1 в массив $_GET запишется id=>1 Вот ты его от туда и достаешь.
Просто дальше сложнее будет, а не понимая основ потом запутаешься и будешь ловить элементарные ошибки: там точку не поставил, там еще че-то не дописал, а там вообще не очень понимаю как функция работает. C увеличением кода будет вообще сложно отлавливать что и где не так.
ЗЫ
Цитата |
Есть прогресс... smile.gif попробовал менять параметр у $id = (int)$_GET['id']; на ['name'] и тому подобное... стал выдавать ошибку... |
Тут можно было подумать и после $id = (int)$_GET['id']; посмотреть, что в $id находится, например вывести на экран echo $id; и смореть меняется она или нет.
А ['name'] в $_GET нет, т.к. ты ее не передавал туда))
Содержимое массива можно так смотреть:
Пока не вникнешь дотошно как и что и какая буква значит ловить тебе ошибки долго)))
А ['name'] в $_GET нет, т.к. ты ее не передавал туда))
Содержимое массива можно так смотреть:
echo '<pre>';Возьми просто поэкспериментируй со строкой и параметрами, передай и ['name']
print_r ($_GET);
echo '</pre>';
[php]echo '<a href="view_products.php?id=' . $row['id'] . '&name=' . $row['name'] . '">' . $row['name'] . '</a><br />';
Пока не вникнешь дотошно как и что и какая буква значит ловить тебе ошибки долго)))
Спустя 15 часов, 47 минут, 53 секунды (11.02.2010 - 15:16) Tokugava написал(а):
Пасиба большое с ID я разобрался... почитал на irbise, а по повду точек и прочего... просто у г-на Попова об этом ни гугу... (знаю знаю... "говнокод "),
я пристаю тут ко всем с распросами, потому что у меня сроки поджимают с сайтом... по нетрезвости писанулся слепить (дурак был знаю ), но теперь вот приходится отдуватсо...
Наконец я понял как сформировать вопрос. А каков вопрос таков ответ... не верно я вопросы задавал... не туда и заехал.
Разбиралсо тут как все таки сделать так чтоб при выборе категории, выводился товар только той категории которую выбрал юзер... и вдруг эврика!
Так как ссылки категорий выводятся типа view_categories.php?id=число... , а товар имеет в БД столбец cat_id, я подумал:
А почему не использовать конструкцию if else для сравнения категорий и вывода того что нужно?
Тоесть... если view_categories.php?id=1
то выводятсо только те товары из БД которые имеют столбец cat_id со значением 1
если 2 то 2 и т. д.
Возможно ли это на php реализовать?
Тоесть чтоб сравнивались ID в табличке categories и cat_id в табличке produkts и если они равны то с помощью echo выводились в цикле?
С if else сталкивалсо очень мало... разгребу с сайтом проблему, и займусь углубленным изучением php... оказываетсо это так интересно
я пристаю тут ко всем с распросами, потому что у меня сроки поджимают с сайтом... по нетрезвости писанулся слепить (дурак был знаю ), но теперь вот приходится отдуватсо...
Наконец я понял как сформировать вопрос. А каков вопрос таков ответ... не верно я вопросы задавал... не туда и заехал.
Разбиралсо тут как все таки сделать так чтоб при выборе категории, выводился товар только той категории которую выбрал юзер... и вдруг эврика!
Так как ссылки категорий выводятся типа view_categories.php?id=число... , а товар имеет в БД столбец cat_id, я подумал:
А почему не использовать конструкцию if else для сравнения категорий и вывода того что нужно?
Тоесть... если view_categories.php?id=1
то выводятсо только те товары из БД которые имеют столбец cat_id со значением 1
если 2 то 2 и т. д.
Возможно ли это на php реализовать?
Тоесть чтоб сравнивались ID в табличке categories и cat_id в табличке produkts и если они равны то с помощью echo выводились в цикле?
С if else сталкивалсо очень мало... разгребу с сайтом проблему, и займусь углубленным изучением php... оказываетсо это так интересно
Спустя 2 часа, 14 минут, 59 секунд (11.02.2010 - 17:31) AmberLEX написал(а):
Цитата |
Так как ссылки категорий выводятся типа view_categories.php?id=число... , а товар имеет в БД столбец cat_id, я подумал: А почему не использовать конструкцию if else для сравнения категорий и вывода того что нужно? |
Зачем тебе if? У тебя в запрос подставляется $id, он и так выберет товары с cat_id=$id и выведет их в цикле while
PS
Строка, которая находится в двойных кавычках, в отличие от одинарных, анализируется на наличие в ней переменных, т.е. вместо $id туда подставится значение.
Можно и по-другому записать
$result = mysql_query ("SELECT * FROM produkts WHERE cat_id = $id");
while ($row = mysql_fetch_assoc($result)) {
echo $row['name'] . '<br />';
}
PS
Строка, которая находится в двойных кавычках, в отличие от одинарных, анализируется на наличие в ней переменных, т.е. вместо $id туда подставится значение.
Можно и по-другому записать
$result = mysql_query ("SELECT * FROM produkts WHERE cat_id=" . $id);т.е. добавить через точку.
Спустя 12 часов, 30 минут, 14 секунд (12.02.2010 - 06:01) Tokugava написал(а):
И правда... сегодня попробую вечером реализовать... AmberLEX жаль живем далеко друг от друга... за твое терпение мне бы месяц пришлось тебя пивом (или газировкой) поить.
К сожалению могу только большущее спасибо сказать.
К сожалению могу только большущее спасибо сказать.
Цитата |
Зачем тебе if? У тебя в запрос подставляется $id, он и так выберет товары с cat_id=$id и выведет их в цикле while |
Попробовал так и сделать вывел товары категории с id=1 (как и задумано), но только какую категорию не выберу везде выводит товары одной и той же категории.
М... как бы обьяснить... бесспорно выберет только товары одной категории... но проблема то немного в другом... попробую объяснить по порядку.
Имеется файл katalog.php, в нем прописан код который циклично выводит из БД все категории. При открытии в браузере файла katalog.php, пользователь видит названия категорий в столбик.
Названия категорий в браузере отображаются как ссылки на файл view_categories.php?id=(число). Где число, ID категории в БД в табличке categories.
При нажатии на категорию пользователь должен попасть на страничку где ему отобразятся товары находящиеся в этой категории.
Например юзер выбрал категорию "офисная мебель" нажал на ссылку и ему открылась страничка на которой отображены товары находящиеся в категории "офисная мебель".
Проблема в том что при нажатии на категорию любую, выводятся ВСЕ товары так как файл то один view_categories.php изменяется только вот это место ?id=(число).
Поэтому из базы вытягивается ВЕСЬ товар, на какую бы категорию юзер не нажал.
Для этого и нужно сравнить id категории, тоесть как заканчивается ссылка view_categories.php?id=(число). И ID товара.
И если ID категории (?id=(число)) совпадают с id товара, выводит на экран. Если нет то не выводит.
Поетому я и подумал что IF ELSE поможет сравнить и вывести то что нужно а не все подряд.
Файл то один а вывдить в зависимости от выбора юзера должен разное.
Спустя 4 часа, 13 минут, 48 секунд (12.02.2010 - 10:15) AmberLEX написал(а):
Не понимаю в чем проблема. Файл и должен быть один, ты на него попадаешь всякий раз, когда нажимаешь на какую-либо категорию, но каждый раз с другим параметром $id=(число). В этом файле берется этот параметр и подставляется в запрос. Параметр разный, в зависимости от выбранной категории, поэтому и запрос будет разный и выводить должен товары категории в зависимости от принятого $id=(int)$_GET['id'];
1. Проверь саму базу, может у тебя там и так товары одной категории (у всех товаров cat_id=1).
2. После $id=(int)$_GET['id']; поставь echo $id; и посмотри меняется ли она когда ты нажимаешь на разные категории (может $id всегда = 1)
3. Попробуй ставить в запрос жестко cat_id, сначала 1, потом 2 - если товары разные, значит запрос работает правильно и товары в БД разных категорий, соотв. проблема в $id
Если не выйдет, заархивируй то, что ты там наваял и выложи файл, я гляну. Мне аж интересно, там два файла и 10 строчек кода, что там может не работать)))
1. Проверь саму базу, может у тебя там и так товары одной категории (у всех товаров cat_id=1).
2. После $id=(int)$_GET['id']; поставь echo $id; и посмотри меняется ли она когда ты нажимаешь на разные категории (может $id всегда = 1)
3. Попробуй ставить в запрос жестко cat_id, сначала 1, потом 2 - если товары разные, значит запрос работает правильно и товары в БД разных категорий, соотв. проблема в $id
$result = mysql_query ("SELECT * FROM produkts WHERE cat_id = 2");
while ($row = mysql_fetch_assoc($result)) {
echo $row['name'] . '<br />';
}
Если не выйдет, заархивируй то, что ты там наваял и выложи файл, я гляну. Мне аж интересно, там два файла и 10 строчек кода, что там может не работать)))
Спустя 5 часов, 12 минут, 36 секунд (12.02.2010 - 15:28) Tokugava написал(а):
Заработало!!
Все работает спасибо!!!
... А как теперь все что выводит в табличку засунуть
Есть такая табличка... а как в нее все запихать что то непонимаю...
Если с do while все ясно? с помощью такой штуки %s то с этим кодом что то не пойму...
Все работает спасибо!!!
... А как теперь все что выводит в табличку засунуть
Есть такая табличка... а как в нее все запихать что то непонимаю...
Если с do while все ясно? с помощью такой штуки %s то с этим кодом что то не пойму...
<?php
$id = (int)$_GET['id']; // принимаешь параметр
$result = mysql_query ("SELECT * FROM categories");
while ($row = mysql_fetch_assoc($result))
<table width='740' border='0' align='center' cellpadding='0' cellspacing='0' class='katalog'>
<tr>
<td width='360' height='20' align='left' valign='top' class='bg_category'><div class='name_title'> Категория: |echo '<a href="view_products.php?id=' . $row['id'] . '">'| </div>
</td>
</tr>
<tr>
<td colspan='2'>%s</td>
</tr>
</table><br>",$row["id"], $row["name"], $row["discription"]);
}
?>
Спустя 1 час, 28 минут, 21 секунда (12.02.2010 - 16:56) AmberLEX написал(а):
Заработало! А было то что, сказал бы?
<?phpЗачем тут $id, если он не используется? Сотри что ли.
$id = (int)$_GET['id']; // принимаешь параметр
$result = mysql_query ("SELECT * FROM categories");
while ($row = mysql_fetch_assoc($result))
Цитата |
А как теперь все что выводит в табличку засунуть |
Тут же давали ссылку http://phpforum.ru/index.php?showtopic=219...=0entry205655
И выкинь ты этого Попова) с его %s.
Я через echo вывожу
echo '
<table>
<tr>
<td>Категория | <a href="view_products.php?id=' . $row['id'] . '">' . $row['name'] . '</a></td>
</tr>
<tr>
<td>' . $row['discription'] . '</td>
</tr>
</table>
';
Я в echo использую одинарные кавычки и конкатенирую через точку. Тогда в коде html параметры тегов можно писать с двойными кавычками, например тот же
echo '<td width="360" height="20" align="left" valign="top" class="bg_category">';, что более привычно.
//или
echo '<a href="view_products.php?id=' . $row['id'] . '">Название категории</a>';
И массивы $row["name"] пишу как $row['name'].
Спустя 17 часов, 43 минуты, 5 секунд (13.02.2010 - 10:39) Tokugava написал(а):
Спасибо за терпение, все работает! Последний вопрос можно ?
Какая то непонятная проблема с добавлением через админку, нового наименования... все вроде правильно написано... а товар не добавляется... вот что я написал:
Это файл обработчик..
куча хтмл кода с дизайном... далее:
Собственно пишет: Заполнены не все поля, продукт не добавлен. Вернитесь назад и проверте все ли поля заполнены.
Поля заполнял все...
Думал из за категорий... они выбераются из выпадающего меню вот так:
Пробовал убрать проверку на категории, на meta_d, meta_k... все равно пишет что не добавлено. Все ведь правильно что ему надо то?
Какая то непонятная проблема с добавлением через админку, нового наименования... все вроде правильно написано... а товар не добавляется... вот что я написал:
Это файл обработчик..
<?php include ("connect.php");
if (isset ($_POST['title'])) {$name = $_POST['title'];}
if (isset ($_POST['name'])) {$name = $_POST['name'];}
if (isset ($_POST['categories'])) {$category = $_POST['categories'];}
if (isset ($_POST['meta_k'])) {$name = $_POST['meta_k'];}
if (isset ($_POST['meta_d'])) {$name = $_POST['meta_d'];}
if (isset ($_POST['discription'])) {$discription = $_POST['discription'];}
if (isset ($_POST['text'])) {$text = $_POST['text'];}
куча хтмл кода с дизайном... далее:
<?php
if (isset($name) && isset($diskription) && isset($text))
{
/* пишем занести в БД */
$result = mysql_query ("INSERT INTO produkts (title,name,meta_k,meta_d,categories,diskription,text) VALUES ('$title','$name','$meta_k','$meta_d','$diskription','$text')");
if ($result == 'true') {echo "<p>Товар добавлен!</P>";}
else {echo "<p>Товар не добавлен, ошибка! Возможно проблемы на хостинге.</P>";}
}
else
{
echo "<p>Заполнены не все поля, продукт не добавлен.<br> Вернитесь назад и проверте все ли поля заполнены.</p>";
}
?>
Собственно пишет: Заполнены не все поля, продукт не добавлен. Вернитесь назад и проверте все ли поля заполнены.
Поля заполнял все...
Думал из за категорий... они выбераются из выпадающего меню вот так:
<label>Выберетите категорию<br />
<select name="id">
<option value="0" selected>Категория не выбрана</option>
<?php
$res = mysql_query("SELECT id, name FROM categories");
while ($row = mysql_fetch_array($res)) {
echo '<option value="'.$row['id'].'">'.$row['name'].'</option>';
}
?>
</select>
Пробовал убрать проверку на категории, на meta_d, meta_k... все равно пишет что не добавлено. Все ведь правильно что ему надо то?
Спустя 1 день, 1 час, 37 минут, 53 секунды (14.02.2010 - 12:17) AmberLEX написал(а):
Цитата |
Последний вопрос можно |
- о-о-чень сомневаюсь.
Ну, во-первых, прежде, чем добавлять значение в БД, его нужно обязательно экранировать:
Если это целое число, то вместо mysql_real_escape_string его нужно привести к целому типу:
{...} - для одного оператора не обязательны.
Во-вторых. Ты в запросе написал 7 полей, а добавляешь 6 значений - они должны соответствовать. Отсутствует categories (это, как я понял, id выбранной категории) тогда нужно еще и его дописать
То что ты добавил include ("connect.php"); - это хорошо. Наверное надоело писать код одинаковый
Я бы тебе очень рекомендовал вместо твоего, написать туда это:
Посмотри сам:
1. Все основное для работы с БД находится в одном файле и подключается инклюдом в начале всех твоих файлов, где нужна работа с БД.
2. У тебя определены константы настройки к БД. Т.е. ты меняешь их в этом файле и все, не нужно исправлять их в каждом файле, где ты работаешь с БД (ну это ты уже понял сделав у себя инклюд)
3. Если устанвить соединение с MySQL не выйдет - выведет сообщение. Если выбрать БД MySQL не выйдет - выведет сообщение.
4. Ты теперь для запроса везде используешь свою функцию mysqlQuery вместо mysql_query. Теперь везе вместо
5. Ну и вместо длинной mysql_real_escape_string пишешь escapeString
Тогда будет примерно так:
Ну, во-первых, прежде, чем добавлять значение в БД, его нужно обязательно экранировать:
if (isset($_POST['title'])) $name = mysql_real_escape_string($_POST['title']);
Если это целое число, то вместо mysql_real_escape_string его нужно привести к целому типу:
if (isset($_POST['id'])) $id = (int)$_POST['id'];И так для каждого поля.
{...} - для одного оператора не обязательны.
Во-вторых. Ты в запросе написал 7 полей, а добавляешь 6 значений - они должны соответствовать. Отсутствует categories (это, как я понял, id выбранной категории) тогда нужно еще и его дописать
if (isset($_POST['id'])) $id = (int)$_POST['id'];вместо
if (isset ($_POST['categories'])) $category = $_POST['categories'];Ты же из выпадающего списка передаешь значение $row['id'] категории (<select name="id">, value="'.$row['id'].'"). Вот это значение и запишется в id, его $_POST - ом и принимать надо. Ну и в запрос, соответственно добавить через запятую после '$meta_d', '$id'.
То что ты добавил include ("connect.php"); - это хорошо. Наверное надоело писать код одинаковый
Я бы тебе очень рекомендовал вместо твоего, написать туда это:
<?phpТогда вообще цивильно будет! И везде его использовать, где нужна работа с БД. Менять только настройки с БД В принципе там все понятно.
/**
* Настройки БД (определяем константы)
* тут меняем на свои
*/
// Сервер БД
define('DBHOST', 'localhost');
// Пользователь БД
define('DBUSER', 'root');
// Пароль БД
define('DBPASS', '');
// Название БД
define('DBNAME', 'admin-mebel');
/**
* Ошибки (определяем константы)
*/
define("DB_NO_CONNECT", "В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.");
define("DB_NO_SELECT", "В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно.");
/**
* Функция для запроса к БД MySQL.
*/
function mysqlQuery($sql)
{
// Посылаем запрос БД
$res = mysql_query($sql, DBCONNECT);
// Если нет ошибок возвращаем результат
if($res)
return $res;
// Если есть ошибки - выводим сообщение
else
{
$trace = debug_backtrace();
die('
<div style="font-family: Courier New; color: #CC0000; text-align: left">
<b>Ошибка MySQL! </b><br />
<b>Код ошибки:</b> ' . mysql_errno() . '<br />
<b>Сообщение:</b> ' . mysql_error() . '<br />
<b>Запрос:</b><pre>' . $trace[0]['args'][0] . '</pre><br />
<b>Функция:</b> ' . $trace[0]['function'] . '<br />
<b>Файл:</b> ' . $trace[0]['file'] . '<br />
<b>Строка:</b> ' . $trace[0]['line'] . '</div>');
}
}
/**
* Подключение и установка кодировок соединения
*/
// Устанавливаем соединение с MySQL сервером или выводим ошибку и прерываем работу
$db_connect = mysql_connect(DBHOST, DBUSER, DBPASS) or die(DB_NO_CONNECT);
// Сохраняем указатель на соединение
define('DBCONNECT', $db_connect);
// Выбираем БД MySQL или выводим ошибку и прерываем работу
mysql_select_db(DBNAME, DBCONNECT) or die(DB_NO_SELECT);
// Установка кодировок соединения (если нужно, раскомментировать)
// mysqlQuery('SET NAMES cp1251');
// mysqlQuery('SET CHARACTER SET cp1251');
// mysqlQuery('SET COLLATION_CONNECTION="cp1251_general_ci"');
/**
* Функция обработки литеральных констант для SQL (экранирование)
*/
function escapeString($data)
{
$data = mysql_real_escape_string($data);
return $data;
}
Посмотри сам:
1. Все основное для работы с БД находится в одном файле и подключается инклюдом в начале всех твоих файлов, где нужна работа с БД.
2. У тебя определены константы настройки к БД. Т.е. ты меняешь их в этом файле и все, не нужно исправлять их в каждом файле, где ты работаешь с БД (ну это ты уже понял сделав у себя инклюд)
3. Если устанвить соединение с MySQL не выйдет - выведет сообщение. Если выбрать БД MySQL не выйдет - выведет сообщение.
4. Ты теперь для запроса везде используешь свою функцию mysqlQuery вместо mysql_query. Теперь везе вместо
$result = mysql_query("...");пишешь
$result = mysqlQuery("...");В чем прикол? Если у тебя в запросе будет ошибка - тебе выведет подробную информацию об ошибке. Т.е. легче понять в чем проблема и не нужно каждый раз писать эту ерунду:
if ($result == 'true') {echo "<p>Товар добавлен!</P>";}И наверняка проблема не в хостинге, а в коде И эта функция: mysqlQuery напишет в чем проблема и в какой строке.
else {echo "<p>Товар не добавлен, ошибка! Возможно проблемы на хостинге.</P>";}
5. Ну и вместо длинной mysql_real_escape_string пишешь escapeString
Тогда будет примерно так:
if (isset($name) && isset($diskription) && isset($text))Т.е. достаточно написать $result = mysqlQuery("..."); и если в запросе ошибка, то эта функция ее покажет. Заодно и посмотришь как выведет сообщение об ошибке
{
// Добавляем в БД
$result = mysqlQuery("
INSERT INTO produkts (title,name,meta_k,meta_d,categories,diskription,text)
VALUES ('$title','$name','$meta_k','$meta_d','$diskription','$text')
");
}
else
{
echo '<p>Не заполнены поля "Название", "Описание", "Текст"</p>';
}
Цитата |
Собственно пишет: Заполнены не все поля, продукт не добавлен. Вернитесь назад и проверте все ли поля заполнены. |
Не сомневаюсь, что ты намудрил снова с файлами и ничего никуда не передается))) Какой файл, какая форма с кучей дизайна, где обрабатывается?
Спустя 57 минут, 45 секунд (14.02.2010 - 13:15) AmberLEX написал(а):
Офигеть, отредактировал! Манал я его править теперь.
_____________
人類の敵
Чем умнее человек, тем легче он признает себя дураком!