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

Форум PHP

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

 

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

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

тема: другие новости по теме 4
 
 автор: hitball   (08.03.2010 в 09:42)   письмо автору
 
 

Данная тема является продолжением темы
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>

  Ответить  
 
 автор: sim5   (08.03.2010 в 10:34)   письмо автору
 
   для: hitball   (08.03.2010 в 09:42)
 

Миледи, еще раз с праздником!

Вам в пору перименовать тему как "Продолжаем варить борщ" :)
Да, именно так - пользователь должен выбирать из списка существующих ингридиентов (коли у вас есть их таблица), а не писать их скопом в одном поле. Кроме этого, ведь такой список точно будет приличным по объему, а значит их надо как-то тоже разделить по неким признакам, ну не предлагать же пользователю портянку длиной огромной. Кроме этого, даже если вы разделите этот список, например, по алфавиту, то все равно велика вероятность, что в одном списке могут оказаться ингридиенты, которые входят в рецепт вводимый пользователем, значит список должен быть с мультивыбором, а его имя отражать массив, то есть:
<select name="cat[]" multiple>
только не cat[], а ingridients[], речь идет ведь о ингридиентах, о их выборе для рецепта, а вот выбор категории, в которую будет помещен этот рецепт, уже просто списком <select name="cat">.
Это будут гораздо удобней, нежели многократное раскрытие списка, его прокрутка и выбор нужного.
Для максимума удобства придется задействовать JavaScript, думаю, что в вашем случае без него просто не обойтись, иначе...
Вполне оправдано в вашем случае будет применение jQuery, в котором есть и все необходимое для обмена данными с сервером посредством механизма Ajax, причем в jQuery это просто для вас, как кодера. jQuery поможет легко организовать вывод выбранного в списках в форму и удалениее из нее (при необходимости), ведь кроме указания продуктов рецепта, необходимо еще указывать их количество, причем в разных единицах: граммы, литры, штуки или кусочки...
Кстати, немаловажная деталь в рецептах (особенно для женщин следящих за фигурой своей), это калорийность блюда, следовательно таблица ингридиентов могла бы содержать и поле, в котором бы указывались калории на грамм продукта, что позволило бы с легкостью посчитать общую калорийность блюда.

  Ответить  
 
 автор: hitball   (08.03.2010 в 11:56)   письмо автору
 
   для: sim5   (08.03.2010 в 10:34)
 

Спасибо большое. Вы уже заставляете меня краснеть)
написала так
 <select name="ingridients[]" multiple> 

Вполне оправдано в вашем случае будет применение jQuery, в котором есть и все необходимое для обмена данными с сервером посредством механизма Ajax, причем в jQuery это просто для вас, как кодера.

Ajax, jQuery - мне эти термины ничего не говорят, я никогда с ними не работала(

  Ответить  
 
 автор: sim5   (08.03.2010 в 12:05)   письмо автору
 
   для: hitball   (08.03.2010 в 11:56)
 

Пидется познакомиться. С такой структурой базы, которой вам придется управлять, без подобных инструментов обойтись трудно, что в конечном итоге будет неудобным для пользователя.
Ajax, это, говоря просто, механиз обмены данных сервер <--> клиент, без пререзагрузки страницы уже отданной клиенту. jQuery запросы и обработка Ajax выглядит просто, кроме этого jQuery позволяет работать с DOM объектами страницы, если можно так выразиться, более естественно, освобождая разработчика от рутины.

  Ответить  
 
 автор: hitball   (08.03.2010 в 12:29)   письмо автору
 
   для: 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); 
?>


но здесь я застопорилась с обработчиком и все(

  Ответить  
 
 автор: sim5   (08.03.2010 в 12:45)   письмо автору
 
   для: hitball   (08.03.2010 в 12:29)
 

Если вы сами вводите рецепты, и пользователи к этому никоим образом не будут причастны, то это несколько меняет дело. Но...

Вот у вас рецепт, как раз описывающий его ингридиенты:

Куриное бедро без кожи, маленькая луковица, маленькая морковь,
лавровый лист, перец горошком, зелень, 4 яйца.


В нем все его ингридиенты, это строка. Зачем тогда вообще таблица ингридиентов, если она с самим рецептом не связана? Таблица посика для вашего рецепта должна быть обычным полем ввода, где пользователь будет вводить, например, луковица, морковь... то есть поиск будет текстовый, а не по id, как на указанном вами сайте, так как в вашем рецепте информации о неких ID не содержится.

Дело не в админке как таковой, прежде чем ее писать, у вас должна быть ораганизована таблица, от структуры которой будет зависеть организация и формы админки, и формы посика и другое. У вас же сейчас таблица либо не организована как следует, либо она имеет лишнее, от чего и путаница происходит в вопросах/ответах.

  Ответить  
 
 автор: hitball   (08.03.2010 в 13:04)   письмо автору
 
   для: sim5   (08.03.2010 в 12:45)
 

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

у меня в таблице book_eda есть 2 столбца ingridient (здесь я пишу подробный список ингридиентов. Куриное бедро без кожи, маленькая луковица... ) и столбец inger (в него я вручную заношу основные ингридиенты из столбца ingridient (морковь, телятина, курица...))
Ингридиенты из столбца inger специальным скриптом заносятся в таблицу ингридиентов по которой строится форма поиска по ингридиентам key_eda и в таблицу связки book_eda_key.
Вроде бы все же упорядочено?

  Ответить  
 
 автор: sim5   (08.03.2010 в 13:49)   письмо автору
 
   для: 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 выглядит вполне логично.

  Ответить  
 
 автор: hitball   (08.03.2010 в 14:43)   письмо автору
 
   для: sim5   (08.03.2010 в 13:49)
 

понимаю, что хорошему программисту это дублирование кажеться абсурдом, но мне оно нужно для того, чтобы не мучиться с таблицами размерностей, если я буду еще и о них думать, то запутаюсь окончательно((( мне легче так все наполнить)
к тому же основных ингридиентов, которые должны быть в форме, у меня не больше 20 штук

  Ответить  
 
 автор: sim5   (08.03.2010 в 15:02)   письмо автору
 
   для: hitball   (08.03.2010 в 14:43)
 

Ну при чем тут программирование на этапе представления данных в таблице. До программирования пока далеко )
Содержимое вашей сумочки можно ведь тоже двояко описать, а как лучше, будет зависеть от целей. ;-)

  Ответить  
 
 автор: hitball   (19.10.2012 в 16:09)   письмо автору
 
   для: 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 новости под которой выводятся похожие, а то получается, что новость к которой выводятся похожие, тоже выводится в списке...
заранее спасибище!

  Ответить  
 
 автор: confirm   (19.10.2012 в 16:31)   письмо автору
 
   для: hitball   (19.10.2012 в 16:09)
 

А чем определяется похожесть? Или ее предстоит определить?

  Ответить  
 
 автор: hitball   (19.10.2012 в 16:35)   письмо автору
 
   для: 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)");  
}

  Ответить  
 
 автор: confirm   (19.10.2012 в 18:42)   письмо автору
 
   для: hitball   (19.10.2012 в 16:35)
 

Значит либо выбирайте уникальные значения по этому ключу, либо те у которых эти ключи не равны. Хотя все это за гранью моего понимания - каким образом некий добавленный ключ может определить похожесть?
"Мама мыла раму" и "Мать вымыла окно" - слова разные, но суть одна, значит можно считать, что похоже. Но определить это, это несколько сложнее операция, чем добавления какого-то ключа не известно по какому признаку. Но мало того, ведь эти два предложения могут быть только что добавленными, и оба являются свежими новостями. Встает вопрос, а какое из низ имеет больше шансов быть показанным и на каком основании, если они похожи?

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

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