[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Категории в админке
Tokugava
Помогите разобратся..

В админ панели при добавлении новости, нужно зделать чтоб пользователь мог выбрать категорию для новости,

сделал выпадающее меню для выбора категории, но как подключить его к базе данных 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 категории.

Спустя 9 минут, 6 секунд (8.02.2010 - 14:04) Tokugava написал(а):
ohmy.gif мамачка!!! Спасибо за помощ... но я оканчательно запуталсо... wacko.gif

Может быть знаете какой нибудь кусочек кода... хоть примерно посмотреть что к чему. Я недавно на PHP пытаться писать сайты начал... с БД страшно путаюсь. unsure.gif

В частности что вписывать как ссылку в value="add_новость.php" я даже представить не могу sad.gif

Спустя 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 - это из какой-то старой книжки)

Видео уроки Евг. Попова unsure.gif

Спустя 3 минуты (8.02.2010 - 14:21) Kuliev написал(а):
Цитата (Tokugava @ 8.02.2010 - 16:18)
Цитата
do-while - это из какой-то старой книжки)

Видео уроки Евг. Попова unsure.gif

laugh.gif в топку ПОПОВА.....

Спустя 9 минут, 54 секунды (8.02.2010 - 14:31) AmberLEX написал(а):
А при чем тут новости? ))) Ну не важно.
В этом случае вообще, чтобы были категории и товары (или статьи, новости) нужно определять к какой категории относится товар. Для этого делается две таблицы: категорий и товара.

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
спасибо за помощ окончательно все понял. И правда все работает biggrin.gif

Но вот незадача... Kuliev походу был прав насчет цикла DO WHILE... sad.gif

Есть вот такой код:
<?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 ph34r.gif ) выводятсо данные из таблички produkts, но проблема интересная появилась unsure.gif ...

Неважно какую я категорию выбираю (тоесть: view_categories.php?id=1 или view_categories.php?id=2 итд) ...

выводитсо товар из 1 категории blink.gif

вот такой код в страничке 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 не подходит... sad.gif а как зделать иначе незнаю. Перерыл пол инета (условно конечно... но рылсо долго, пол рабочего дня) так и не нашел решение, как сделать чтоб на страничке выводилсо товар только той категории, какой нужен.

Тоесть в страничке view_categories.php?id=1 выводился товар или новость категории с id=1 или там 2.

в страничке view_categories.php?id=2 выводился товар или новость категории с id=3 или 4,5,6 ... итд.

Если есть еще терпение обьяснить тупице типа меня помогите пожалуста, ссылочкой на почитать по теме, или куском кода с коментами (как у Попова smile.gif ) Буду очень благодарен.

P.S. Писать движок взялся, свой первый, а знаний только видеоуроки Попова, но на примерах что то понимать легче, а на практике ещё легче.

Спустя 11 минут, 24 секунды (8.02.2010 - 18:14) DedMorozzz написал(а):
Пользуйся. Кулиёву спасибо передашь smile.gif

Спустя 1 час, 12 минут, 34 секунды (8.02.2010 - 19:26) AmberLEX написал(а):
Так у тебя 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 - возвращает только ассоциативный массив.
или так тогда:

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
...
}

Спустя 1 час, 16 минут, 33 секунды (8.02.2010 - 21:03) qpayct написал(а):
и здесь попов.... знаменитый я смотрю дядя на вашем форуме biggrin.gif

Спустя 10 часов, 48 минут, 43 секунды (9.02.2010 - 07:52) Kuliev написал(а):
Цитата (qpayct @ 8.02.2010 - 23:03)
и здесь попов.... знаменитый я смотрю дядя на вашем форуме biggrin.gif

Он вообще супер-мега популярен на таких форумах, потому что все хотят научиться быстро программировать не вникая в суть, а просто копипастят ГОВНОКОД господина ПОПОВА, а потом спрашивают что у них не работает и почему.

Спустя 13 часов, 23 минуты, 55 секунд (9.02.2010 - 21:16) Tokugava написал(а):
Покопалсо я малость и понял...что нифига не понял unsure.gif
Вернее понял что функция mysql_fetch_array() мне не подходит потомучто берет и возвращает все массивы и численный и ассоциативный... понял что в моем случае подходит mysql_fetch_assoc ... потомучто мне вроде как нужен только ассоциативный...

Проблема заключается в том что при выборе категории пользователем он попадает на страничку view_categories.php... а там один и тот же код для всего. Только категории разные.. вот рисунка user posted image

на рисунке страничка katalog.php в нее с помощью do while выводятся категории.
Стоит задача в файле view_categories.php показывать пользователю только те товары и новости что находятся в определенной категории, которую он выбрал.

Ссылки нарисованы на картинке. Проблема в том что с моим кривым кодом, когда пользователь просматривает ЛЮБУЮ категорию, ему из базы достает ВЕСЬ товар и новости, а не только тот который в той категории которую он выбрал.

Файл то один! View_categories.php и только ?id=... разные.

И как сие реализовать, какой функцией... не представляю... dry.gif

Спустя 2 часа, 46 минут, 56 секунд (10.02.2010 - 00:03) AmberLEX написал(а):
Вот ты написал кучу инфы, по которой все равно не понятно, что там у тебя творится smile.gif
По идее у тебя два файла:
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']; // принимаешь параметр
$result = mysql_query ("SELECT * FROM products WHERE cat_id = $id");
while ($row = mysql_fetch_assoc($result)) {
echo $row['product_name'] . '<br />';
}
Это при условии, что у тебя две таблицы типа того, как я писал ранее. (т.е. в таблице с товарами находится поле cat_id, которое определяет какой категории товар)
Цитата
Стоит задача в файле view_categories.php показывать пользователю только те товары и новости что находятся в определенной категории
Потому как во view_categories.php вроде нелогично показывать товары или новости.

А вообще попробуй сначала самый простой код: сделай БД с двумя таблицами
categories (category_id, category_name)
products (product_id, cat_id, product_name)
Создай эти два файла view_categories.php и view_products.php (ну естественно все необходимые приготовления для работы с ДБ) и проверь как все работает (должны работать smile.gif т.е. улови смысл на минимальном коде вначале, а потом уже усложняй.

Спустя 8 часов, 48 минут, 9 секунд (10.02.2010 - 08:51) Tokugava написал(а):
Цитата
Потому как во view_categories.php вроде нелогично показывать товары или новости.

Вероятно нелогично... но дело в том что я имел ввиду когда называл файл именно view_categories.php, просмотреть товары и новости ИМЕННО этой категории. Тоесть в этом файле из БД должны вытягиватсо только товары категории "офисная мебель", например... и выводится кратким описанием. По нажатии на какойнибудь товар осуществляется переход на полное описание товара, тоесть на страничку view_produkts.php. Вот. rolleyes.gif

Спустя 22 минуты, 10 секунд (10.02.2010 - 09:13) qpayct написал(а):
Цитата (Kuliev @ 9.02.2010 - 06:52)
Цитата (qpayct @ 8.02.2010 - 23:03)
и здесь попов.... знаменитый я смотрю дядя на вашем форуме  biggrin.gif

Он вообще супер-мега популярен на таких форумах, потому что все хотят научиться быстро программировать не вникая в суть, а просто копипастят ГОВНОКОД господина ПОПОВА, а потом спрашивают что у них не работает и почему.

их надо убивать пока они маленькие ph34r.gif

Спустя 1 час, 4 минуты, 2 секунды (10.02.2010 - 10:17) AmberLEX написал(а):
Ну смысл я написал, пробуй)))

Спустя 5 часов, 2 минуты, 24 секунды (10.02.2010 - 15:20) Tokugava написал(а):
Попробовал... вроде работает но где то закралась ошибка ph34r.gif

Вот такой нарисовался код на view_categories.php, и он работает smile.gif посути только изменил названия из БД.

<?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 blink.gif

$id = (int)$_GET['id']; // принимаешь параметр - вот тут я немного не понял как читать выражение... прочитал так: Переменная ID = (целое)$_GET(типо получить ID из базы Оо)['id']

...Вобщем чую что загвоздка тут. А найти ошибку я так и не смог, вроде все правильно... пол дня колупался и не дошло sad.gif

Добавлено...
Есть прогресс... smile.gif попробовал менять параметр у $id = (int)$_GET['id'];
на ['name'] и тому подобное... стал выдавать ошибку... dry.gif
Но хоть не белый лист и на том спасибо sad.gif

Спустя 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 = 'Билл Гейтс';
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 нет, т.к. ты ее не передавал туда))
Содержимое массива можно так смотреть:
echo '<pre>';
print_r ($_GET);
echo '</pre>';
Возьми просто поэкспериментируй со строкой и параметрами, передай и ['name']
[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, а по повду точек и прочего... просто у г-на Попова об этом ни гугу... (знаю знаю... "говнокод smile.gif "),
я пристаю тут ко всем с распросами, потому что у меня сроки поджимают с сайтом... по нетрезвости писанулся слепить (дурак был знаю biggrin.gif ), но теперь вот приходится отдуватсо...

Наконец я понял как сформировать вопрос. А каков вопрос таков ответ... не верно я вопросы задавал... не туда и заехал.

Разбиралсо тут как все таки сделать так чтоб при выборе категории, выводился товар только той категории которую выбрал юзер... и вдруг эврика!

Так как ссылки категорий выводятся типа 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 сталкивалсо очень мало... sad.gif разгребу с сайтом проблему, и займусь углубленным изучением php... оказываетсо это так интересно blink.gif

Спустя 2 часа, 14 минут, 59 секунд (11.02.2010 - 17:31) AmberLEX написал(а):
Цитата
Так как ссылки категорий выводятся типа view_categories.php?id=число... , а товар имеет в БД столбец cat_id, я подумал:
А почему не использовать конструкцию if else для сравнения категорий и вывода того что нужно?
Зачем тебе if? У тебя в запрос подставляется $id, он и так выберет товары с cat_id=$id и выведет их в цикле while
$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 жаль живем далеко друг от друга... за твое терпение мне бы месяц пришлось тебя пивом (или газировкой) поить. rolleyes.gif
К сожалению могу только большущее спасибо сказать.



Цитата

Зачем тебе 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
$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 написал(а):
Заработало!! laugh.gif
Все работает спасибо!!!
... А как теперь все что выводит в табличку засунуть blink.gif

Есть такая табличка... а как в нее все запихать что то непонимаю...
Если с do while все ясно? с помощью такой штуки %s то с этим кодом что то не пойму... dry.gif

<?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 написал(а):
Заработало! А было то что, сказал бы? smile.gif
<?php 
$id = (int)$_GET['id']; // принимаешь параметр
$result = mysql_query ("SELECT * FROM categories");
while ($row = mysql_fetch_assoc($result))
Зачем тут $id, если он не используется? Сотри что ли.
Цитата
А как теперь все что выводит в табличку засунуть

Тут же давали ссылку http://phpforum.ru/index.php?showtopic=219...=0&#entry205655
И выкинь ты этого Попова) с его %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 написал(а):
Спасибо за терпение, все работает! Последний вопрос можно wub.gif ?
Какая то непонятная проблема с добавлением через админку, нового наименования... все вроде правильно написано... а товар не добавляется... вот что я написал:
Это файл обработчик..

<?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... все равно пишет что не добавлено. sad.gif Все ведь правильно что ему надо то? dry.gif

Спустя 1 день, 1 час, 37 минут, 53 секунды (14.02.2010 - 12:17) AmberLEX написал(а):
Цитата
Последний вопрос можно
biggrin.gif - о-о-чень сомневаюсь.
Ну, во-первых, прежде, чем добавлять значение в БД, его нужно обязательно экранировать:
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"); - это хорошо. Наверное надоело писать код одинаковый smile.gif
Я бы тебе очень рекомендовал smile.gif вместо твоего, написать туда это:
<?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;
}
Тогда вообще цивильно будет! И везде его использовать, где нужна работа с БД. Менять только настройки с БД wink.gif В принципе там все понятно.
Посмотри сам:
1. Все основное для работы с БД находится в одном файле и подключается инклюдом в начале всех твоих файлов, где нужна работа с БД.
2. У тебя определены константы настройки к БД. Т.е. ты меняешь их в этом файле и все, не нужно исправлять их в каждом файле, где ты работаешь с БД (ну это ты уже понял сделав у себя инклюд)
3. Если устанвить соединение с MySQL не выйдет - выведет сообщение. Если выбрать БД MySQL не выйдет - выведет сообщение.
4. Ты теперь для запроса везде используешь свою функцию mysqlQuery вместо mysql_query. Теперь везе вместо
$result = mysql_query("...");
пишешь
$result = mysqlQuery("...");
В чем прикол? Если у тебя в запросе будет ошибка - тебе выведет подробную информацию об ошибке. Т.е. легче понять в чем проблема и не нужно каждый раз писать эту ерунду:
if ($result == 'true') {echo "<p>Товар добавлен!</P>";}
else {echo "<p>Товар не добавлен, ошибка! Возможно проблемы на хостинге.</P>";}
И наверняка проблема не в хостинге, а в коде smile.gif И эта функция: mysqlQuery напишет в чем проблема и в какой строке.
5. Ну и вместо длинной mysql_real_escape_string пишешь escapeString

Тогда будет примерно так:
if (isset($name) && isset($diskription) && isset($text))
{
// Добавляем в БД
$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>';
}
Т.е. достаточно написать $result = mysqlQuery("..."); и если в запросе ошибка, то эта функция ее покажет. Заодно и посмотришь как выведет сообщение об ошибке smile.gif
Цитата
Собственно пишет: Заполнены не все поля, продукт не добавлен. Вернитесь назад и проверте все ли поля заполнены.
Не сомневаюсь, что ты намудрил снова с файлами и ничего никуда не передается))) Какой файл, какая форма с кучей дизайна, где обрабатывается?

Спустя 57 минут, 45 секунд (14.02.2010 - 13:15) AmberLEX написал(а):
Офигеть, отредактировал! Манал я его править теперь.


_____________
人類の敵
Чем умнее человек, тем легче он признает себя дураком!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.