|
|
|
| Данная тема является продолжением темы
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=71840
Нет, не бред, но если у вас ингридиенты рецептов, это отдельная таблица в базе, то ваша форма не соответствует этому условию.
|
Вы хотите скачать, что мне нужно создать в форме еще такую графу?
Ингридиенты я сама выбирать должна, да? при добавлении рецепта?
<p><label>Выберите ингридиенты<br> <select name="cat">
<? $result = mysql_query("SELECT title,id FROM ingridients",$db);
if (!$result)
{echo "<p>Запрос на выборку данных из базы не прошел.
Напишите об этом администратору X@ukr.net <br> <strong>Код ошибки:</strong></p>";
exit(mysql_error()); }
if (mysql_num_rows($result) > 0)
{$myrow = mysql_fetch_array($result);
do {printf ("<option value='%s'>%s</option>",$myrow["id"],$myrow["title"]); }
while ($myrow = mysql_fetch_array($result)); }
else { echo "<p>Информация по запросу не может быть извлечена в таблице нет записей.</p>";
exit(); } ?> </select> </label> </p>
|
| |
|
|
|
|
|
|
|
для: hitball
(08.03.2010 в 09:42)
| | Миледи, еще раз с праздником!
Вам в пору перименовать тему как "Продолжаем варить борщ" :)
Да, именно так - пользователь должен выбирать из списка существующих ингридиентов (коли у вас есть их таблица), а не писать их скопом в одном поле. Кроме этого, ведь такой список точно будет приличным по объему, а значит их надо как-то тоже разделить по неким признакам, ну не предлагать же пользователю портянку длиной огромной. Кроме этого, даже если вы разделите этот список, например, по алфавиту, то все равно велика вероятность, что в одном списке могут оказаться ингридиенты, которые входят в рецепт вводимый пользователем, значит список должен быть с мультивыбором, а его имя отражать массив, то есть:
<select name="cat[]" multiple>
только не cat[], а ingridients[], речь идет ведь о ингридиентах, о их выборе для рецепта, а вот выбор категории, в которую будет помещен этот рецепт, уже просто списком <select name="cat">.
Это будут гораздо удобней, нежели многократное раскрытие списка, его прокрутка и выбор нужного.
Для максимума удобства придется задействовать JavaScript, думаю, что в вашем случае без него просто не обойтись, иначе...
Вполне оправдано в вашем случае будет применение jQuery, в котором есть и все необходимое для обмена данными с сервером посредством механизма Ajax, причем в jQuery это просто для вас, как кодера. jQuery поможет легко организовать вывод выбранного в списках в форму и удалениее из нее (при необходимости), ведь кроме указания продуктов рецепта, необходимо еще указывать их количество, причем в разных единицах: граммы, литры, штуки или кусочки...
Кстати, немаловажная деталь в рецептах (особенно для женщин следящих за фигурой своей), это калорийность блюда, следовательно таблица ингридиентов могла бы содержать и поле, в котором бы указывались калории на грамм продукта, что позволило бы с легкостью посчитать общую калорийность блюда. | |
|
|
|
|
|
|
|
для: sim5
(08.03.2010 в 10:34)
| | Спасибо большое. Вы уже заставляете меня краснеть)
написала так
<select name="ingridients[]" multiple>
|
Вполне оправдано в вашем случае будет применение jQuery, в котором есть и все необходимое для обмена данными с сервером посредством механизма Ajax, причем в jQuery это просто для вас, как кодера.
|
Ajax, jQuery - мне эти термины ничего не говорят, я никогда с ними не работала( | |
|
|
|
|
|
|
|
для: hitball
(08.03.2010 в 11:56)
| | Пидется познакомиться. С такой структурой базы, которой вам придется управлять, без подобных инструментов обойтись трудно, что в конечном итоге будет неудобным для пользователя.
Ajax, это, говоря просто, механиз обмены данных сервер <--> клиент, без пререзагрузки страницы уже отданной клиенту. jQuery запросы и обработка Ajax выглядит просто, кроме этого jQuery позволяет работать с DOM объектами страницы, если можно так выразиться, более естественно, освобождая разработчика от рутины. | |
|
|
|
|
|
|
|
для: sim5
(08.03.2010 в 12:05)
| | Извините, что отклоняюсь от темы, но возможно прошлый механизм организации книги будет понятнее и проще сделать без этих непонятных терминов)
Расскажу в кратце...
На самом деле у меня уже есть небольшая книга кулинарных рецептов.
Организованая НЕ так как предлагал oliss.
Просто у меня особый случай) Нет админки. Все данные я заношу через PMA...
Там у меня 3 таблицы.
book_eda - это таблица содержащая все рецепты
id int(6) auto_increment
title varchar(255)
meta_k varchar(255)
meta_d varchar(255)
description text
text text
view int(10)
alt varchar(255)
titleimg varchar(255)
cat int(7) (здесь я просто указываю номер
категории из таблицы caterories)
ingridient text (здесь япишу подробный список ингридиентов.
К примеру так
Куриное бедро без кожи, маленькая луковица, маленькая морковь,
лавровый лист, перец горошком, зелень, 4 яйца.
Для домашней лапши: 140 гр. муки, 1 яйцо, 30 гр воды, 4гр соли )
inger text ( здесь я выбираю основные
ингридиенты из графы ingridient, которые будут в форме поиска как на сайте ivon)
mini_img varchar(255)
|
структура таблицы book_eda_key - таблица связки
key_id int(11) (id основных ингридиентов из таблицы key_eda)
obj_id int(11) (id рецепта из таблицы book_eda )
структура таблицы key_eda
id int(11)
word varchar(255) (основные ингридиенты inger)
|
для этого писалась форма поиска
<?php
$ingr='';
$r = mysql_query ("SELECT `id` ,`word` FROM `key_eda` ",$db);
while ($mr = mysql_fetch_assoc($r))
{
$ingr.='<label title="'.htmlspecialchars($mr['word']).'">
<input name="ingredient['.intval($mr['id']).']" value="1" type="checkbox">'.htmlspecialchars($mr['word']).'</input ></label><br/>';
}
?>
<span >Выберите ингредиенты</span>
<form action="" method="post">
<?php echo $ingr; ?>
<input class="button" name="submit" value="Поиск" type="submit">
</form>
<?php
echo'<pre>';
print_r($_POST);
?>
|
но здесь я застопорилась с обработчиком и все( | |
|
|
|
|
|
|
|
для: hitball
(08.03.2010 в 12:29)
| | Если вы сами вводите рецепты, и пользователи к этому никоим образом не будут причастны, то это несколько меняет дело. Но...
Вот у вас рецепт, как раз описывающий его ингридиенты:
Куриное бедро без кожи, маленькая луковица, маленькая морковь,
лавровый лист, перец горошком, зелень, 4 яйца.
В нем все его ингридиенты, это строка. Зачем тогда вообще таблица ингридиентов, если она с самим рецептом не связана? Таблица посика для вашего рецепта должна быть обычным полем ввода, где пользователь будет вводить, например, луковица, морковь... то есть поиск будет текстовый, а не по id, как на указанном вами сайте, так как в вашем рецепте информации о неких ID не содержится.
Дело не в админке как таковой, прежде чем ее писать, у вас должна быть ораганизована таблица, от структуры которой будет зависеть организация и формы админки, и формы посика и другое. У вас же сейчас таблица либо не организована как следует, либо она имеет лишнее, от чего и путаница происходит в вопросах/ответах. | |
|
|
|
|
|
|
|
для: sim5
(08.03.2010 в 12:45)
| | да, я сама буду заносить рецепты в базу, возможно сделаю просто форму для отправки рецептов мне на почту.
у меня в таблице book_eda есть 2 столбца ingridient (здесь я пишу подробный список ингридиентов. Куриное бедро без кожи, маленькая луковица... ) и столбец inger (в него я вручную заношу основные ингридиенты из столбца ingridient (морковь, телятина, курица...))
Ингридиенты из столбца inger специальным скриптом заносятся в таблицу ингридиентов по которой строится форма поиска по ингридиентам key_eda и в таблицу связки book_eda_key.
Вроде бы все же упорядочено? | |
|
|
|
|
|
|
|
для: hitball
(08.03.2010 в 13:04)
| | Не понял смысла этого копирования, вернее дублирования ингридиентов в другом поле.
Я не повар, но я так представляю. В некой категории блюд, рецепт, который начинается кратким описанием. Далее идет состав его, причем не куриное бедро без кожи и маленькая луковица, а:
мясо курицы
лук
....
А вот уже далее, в описание "технологии" приготовления этого блюда:
Взять куриное бедро, без кожи, одну маленькую луковицу....
Следующим, это рекомендации как подавать блюдо на стол:
Блюдо подается охлажденным. Принимать блюдо рекомендуется под "Шато Петрюс" урожая 2005 г....
Ингридиенты, это не просто некое дублирующее поле в таблице рецептов, это таблица, с полями описывающими продукты рецептов, например, мясо:
id category name calorie info
1 1 мясо курицы 50
2 1 говядина 100
....
категория овощей:
3 2 лук 10
4 2 чеснок 10
...
то есть, id ингридиента, категория ингридиентов (для сортировки), наименование, калорийность в грамме, и возможно даже некая интересно-огородная информация о продукте (info).
В этом случае состав рецепта будет выглядеть так:
1 (мясо курицы, количество не указано, в данном рецепте, в ином случае можно вывести калорийную составляющую этого продукта в рецепте, и общую для блюда).
3 (лук)
....
и т.д.
То есть сами рецепты, это наборы id соответствующих игридиентов, а не текстовое поле, тогда и форма поиска по id выглядит вполне логично. | |
|
|
|
|
|
|
|
для: sim5
(08.03.2010 в 13:49)
| | понимаю, что хорошему программисту это дублирование кажеться абсурдом, но мне оно нужно для того, чтобы не мучиться с таблицами размерностей, если я буду еще и о них думать, то запутаюсь окончательно((( мне легче так все наполнить)
к тому же основных ингридиентов, которые должны быть в форме, у меня не больше 20 штук | |
|
|
|
|
|
|
|
для: hitball
(08.03.2010 в 14:43)
| | Ну при чем тут программирование на этапе представления данных в таблице. До программирования пока далеко )
Содержимое вашей сумочки можно ведь тоже двояко описать, а как лучше, будет зависеть от целей. ;-) | |
|
|
|
|
|
|
|
для: hitball
(08.03.2010 в 14:43)
| | добрый день! в одном из обсуждений этой темы встречался такой код
$sql = "
SELECT t3.*
FROM book_key t1
JOIN book_key t2 ON t1.key_id = t2.key_id
JOIN books t3 ON t2.obj_id = t3.id
WHERE t1.obj_id = ". (int)($myrow['id']). " LIMIT 4
";
|
подскажите, пожалуйста как запретить вывод по id новости под которой выводятся похожие, а то получается, что новость к которой выводятся похожие, тоже выводится в списке...
заранее спасибище! | |
|
|
|
|
|
|
|
для: hitball
(19.10.2012 в 16:09)
| | А чем определяется похожесть? Или ее предстоит определить? | |
|
|
|
|
|
|
|
для: confirm
(19.10.2012 в 16:31)
| | похожесть определяется за счет строки kluch в таблицу books
были созданы 2 таблицы для связки и заполнены ключами из таблицы books
CREATE TABLE `key` (
`id` int(11) NOT NULL auto_increment,
`word` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE `word`(`word`)
);
CREATE TABLE `book_key` (
`key_id` int(11) NOT NULL,
`obj_id` int(11) NOT NULL,
PRIMARY KEY (`key_id`,`obj_id`)
);
|
for($res = my("SELECT * FROM books"); $row = mysql_fetch_assoc($res); )
{
$id = $row['id'];
$list = explode(',', $row['kluch']);
foreach($list as $word)
add_key(trim($word), $id, "key", "book_key");
}
function add_key($word, $id, $keytable, $linktable)
{
$word = "'".mysql_escape_string($word)."'";
$id = intval($id);
$key_id = myi("INSERT IGNORE INTO `$keytable` (`word`) VALUES ($word)");
if(!$key_id)
$key_id = my1("SELECT id FROM `$keytable` WHERE `word` = $word");
$key_id = intval($key_id);
my("INSERT INTO `$linktable` (key_id, obj_id) VALUES($key_id, $id)");
}
|
| |
|
|
|
|
|
|
|
для: hitball
(19.10.2012 в 16:35)
| | Значит либо выбирайте уникальные значения по этому ключу, либо те у которых эти ключи не равны. Хотя все это за гранью моего понимания - каким образом некий добавленный ключ может определить похожесть?
"Мама мыла раму" и "Мать вымыла окно" - слова разные, но суть одна, значит можно считать, что похоже. Но определить это, это несколько сложнее операция, чем добавления какого-то ключа не известно по какому признаку. Но мало того, ведь эти два предложения могут быть только что добавленными, и оба являются свежими новостями. Встает вопрос, а какое из низ имеет больше шансов быть показанным и на каком основании, если они похожи? | |
|
|
|
|