Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Нужен совет

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: планирование сайта
Nikola
Отправлено: 14 Августа, 2009 - 16:36:27
Post Id



Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Авг. 2009  
Откуда: Одесса, Украина


Помог: 0 раз(а)




Здравствуйте. Прошу совета по организации сайта. Только начал изучать PHP, опыта нет.
Хочу создать кулинарный сайт такого плана: пользователь вводит ингредиенты и делает запрос, а в ответ получает рецепты блюд, состоящие из указанных пользователем ингредиентов. Пользователь может добавлять рецепты.
Количество ингредиентов, которые введет пользователь, не известно. Список всех ингредиентов есть в базе, планирую его загружать в select, мыслю в сторону того, что пользователь выбирает в select ингредиент и жмет кнопку добавить, таким образом выбираются основные ингредиенты и отображаются в каком ни будь элементе (пусть текстарей). Затем пользователь нажимает кнопку запроса и производится поиск в базе рецептов, состоящих из указанных пользователем ингредиентов.

Не прошу писать код, просто нужен совет, как это организовать.
 
 Top
Ch_chov
Отправлено: 14 Августа, 2009 - 19:57:42
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Посчтитай примерно сколько всего ингредиентов будет.
Выпадающий список будет огромный...
Разбей ингредиенты на категории: овощи, мясо, рыба и т.д. Для каждой категории сделай свой выпадающий список, который кстати можно сделать с множественным выбором (MULTIPLE).
 
 Top
Nikola
Отправлено: 14 Августа, 2009 - 20:39:54
Post Id



Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Авг. 2009  
Откуда: Одесса, Украина


Помог: 0 раз(а)




Ch_chov
Идею понял большее спасибо, остается вопрос о том, как это писать в базу а затем каким запросом искать совпадение ингредиентов.
 
 Top
EuGen Администратор
Отправлено: 15 Августа, 2009 - 15:46:21
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




На входе у Вас (то есть у Вашего скрипта) будет список ингридиентов, которые ввел пользователь - вне зависимости от того, каким образом ввел.
В БД их хранить целесообразно как обычно - парой: идентификатор-значение. В данном случае значением будет просто название.
Рецепты - тоже таблица. С отношением "многие-ко-многим" с таблицей ингридиентов.
Организовать можно так - сама таблица рецептов - есть просто такой же список строк "идентификатор-значение". То есть номер рецепта-название рецепта.
Затем сделаете таблицу-связку, где будете хранить идентификатор рецепта-идентификатор ингридиента.
Для примера (не силен в кулинарной области) - есть рецепт "Яичница". В нее входят ингридиенты "яйцо", "молоко". Вот как будет выглядеть:
recepts
CODE (text):
скопировать код в буфер обмена
  1.  
  2. +-----------+---------+
  3. | recept_id |  title  |
  4. +-----------+---------+
  5. |     1     | Яичница |
  6. +-----------+---------+
  7.  


ingridients
CODE (text):
скопировать код в буфер обмена
  1.  
  2. +---------------+--------+
  3. | ingridient_id | title  |
  4. +---------------+--------+
  5. |       1       |  Яйцо  |
  6. +---------------+--------+
  7. |       2       | Молоко |
  8. +---------------+--------+
  9.  


recepts_ingridients
CODE (text):
скопировать код в буфер обмена
  1.  
  2. +-----------+---------------+
  3. | recept_id | ingridient_id |
  4. +-----------+---------------+
  5. |     1     |       1       |
  6. +-----------+---------------+
  7. |     1     |       2       |
  8. +-----------+---------------+
  9.  

Соответственно при поиске - нужно в таблице recepts_ingridients найти все идентификаторы рецептов, которые попадут в условие пользователя. Другими словами, мы найдем рецепты, в которые входит хотя бы один из указанных ингридиентов (слабое условие).

Вообще почитайте про теорию реляционных БД. Специально не привожу подхода на случай, если нужны рецепты, в которые входят все из указанных ингридиентов (задача чуть сложнее, найдете сами).


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Nikola
Отправлено: 15 Августа, 2009 - 22:17:23
Post Id



Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Авг. 2009  
Откуда: Одесса, Украина


Помог: 0 раз(а)




EuGen
Большое спасибо за помощь, дальше, я думаю, разберусь.
 
 Top
Nikola
Отправлено: 24 Августа, 2009 - 22:16:28
Post Id



Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Авг. 2009  
Откуда: Одесса, Украина


Помог: 0 раз(а)




Ну вот я слепил свой первый сайт http://kitchen[dot]50gigs[dot]net/www/index.php его конечно нужно дорабатывать и наполнить немного. В меню поиск можно искать блюда, правда есть только одна запись в базе, поэтому можно выбрать : тип-второе, продукты-молоко коровье, яйца куриные. В меню добавить можно добавить рецепт. Вот только кнопочки не изменяются при нажатии и наведении, но может это из-за моего медленного жпрс интернета.
Код кнопочки:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <a href="index.php"><img src="../../www/res/11.png"
  3. onMouseOut=" this.src='../../www/res/11.png' " onMouseOver="this.src='../../www/res/12.png' " onMouseDown=" this.src='../../www/res/13.png'"  width="180" height="35">
  4.  


Структура базы:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. DROP TABLE IF EXISTS `data`;
  3. CREATE TABLE `data` (
  4.   `id` int(10) unsigned NOT NULL auto_increment,
  5.   `id_r` int(10) unsigned NOT NULL default '0',
  6.   `id_p` int(10) unsigned NOT NULL default '0',
  7.   `id_t` int(10) unsigned NOT NULL default '0',
  8.   PRIMARY KEY  (`id`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
  10.  
  11. INSERT INTO `data` (`id`,`id_r`,`id_p`,`id_t`) VALUES
  12.  (1,1,25,2),
  13.  (2,1,21,2),
  14.  (3,6,1,2),
  15.  (4,6,2,2),
  16.  (5,6,6,2),
  17.  (6,6,23,2),
  18.  (7,6,25,2);
  19.  
  20.  
  21. DROP TABLE IF EXISTS `product`;
  22. CREATE TABLE `product` (
  23.   `id` int(10) unsigned NOT NULL auto_increment,
  24.   `name` varchar(45) NOT NULL default '',
  25.   `type` int(10) unsigned NOT NULL default '0',
  26.   PRIMARY KEY  (`id`)
  27. ) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
  28.  
  29.  
  30. /*!40000 ALTER TABLE `product` DISABLE KEYS */;
  31. INSERT INTO `product` (`id`,`name`,`type`) VALUES
  32.  (1,'говядина',1),
  33.  (2,'свинина',1),
  34.  (3,'курица',1),
  35.  (4,'окунь',2),
  36.  (5,'карась',2),
  37.  (6,'семга',2),
  38.  (7,'сельдь',2),
  39.  (8,'огурец',3),
  40.  (9,'помидор',3),
  41.  (10,'капуста',3),
  42.  (11,'буряк',3),
  43.  (12,'яблуко',4),
  44.  (13,'груша',4),
  45.  (14,'апельсин',4),
  46.  (15,'лимон',4),
  47.  (16,'вишня',5),
  48.  (17,'черешня',5),
  49.  (18,'виноград',5),
  50.  (19,'клубника',5),
  51.  (20,'вода',6),
  52.  (21,'молоко коровье',6),
  53.  (22,'молоко козье',6),
  54.  (23,'вино красное',6),
  55.  (24,'вино белое',6),
  56.  (25,'яйцо куриное',7);
  57.  
  58. DROP TABLE IF EXISTS `recept`;
  59. CREATE TABLE `recept` (
  60.   `id` int(10) unsigned NOT NULL auto_increment,
  61.   `name` varchar(45) NOT NULL default '',
  62.   `text` text NOT NULL,
  63.   PRIMARY KEY  (`id`)
  64. ) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
  65.  
  66. INSERT INTO `recept` (`id`,`name`,`text`) VALUES
  67.  (1,'яишница','яйца молоко коровье соль подсолнечное масло.
  68.  
  69. Рецепт...'),
  70.  (6,'test','    
  71.  
  72. sasdaassasdas\r\nasda\r\n\r\nas\r\nd\r\nas\r\nd\r\nasd\r\nas  
  73.  
  74.   ');
  75.  
  76.  
  77. DROP TABLE IF EXISTS `type`;
  78. CREATE TABLE `type` (
  79.   `id` int(10) unsigned NOT NULL auto_increment,
  80.   `name` varchar(45) NOT NULL default '',
  81.   PRIMARY KEY  (`id`)
  82. ) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
  83.  
  84.  
  85. INSERT INTO `type` (`id`,`name`) VALUES
  86.  (1,'первое'),
  87.  (2,'второе'),
  88.  (3,'закуска'),
  89.  (4,'выпечка'),
  90.  (5,'дисерт'),
  91.  (6,'напиток');
  92.  
  93.  
  94. DROP TABLE IF EXISTS `vid`;
  95. CREATE TABLE `vid` (
  96.   `id` int(10) unsigned NOT NULL auto_increment,
  97.   `name` varchar(45) NOT NULL default '',
  98.   PRIMARY KEY  (`id`)
  99. ) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
  100.  
  101.  
  102. INSERT INTO `vid` (`id`,`name`) VALUES
  103.  (1,'мясо'),
  104.  (2,'рыба'),
  105.  (3,'овощи'),
  106.  (4,'фрукты'),
  107.  (5,'ягоды'),
  108.  (6,'жидкости'),
  109.  (7,'другое');
  110.  


Еще раз большее спасибо за помощь, буду рад любой критике.
 
 Top
SAD Модератор
Отправлено: 24 Августа, 2009 - 22:24:19
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




bed, very bed.
десерт, а не дисерт
в продуктах разве не может быть выбор нескольких ингредиентов?
 
 Top
Nikola
Отправлено: 24 Августа, 2009 - 22:34:32
Post Id



Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Авг. 2009  
Откуда: Одесса, Украина


Помог: 0 раз(а)




SAD
За грамматические ошибки извиняюсь, поправлю, а вот продукты можно выбирать зажимая Ctrl.
 
 Top
SAD Модератор
Отправлено: 24 Августа, 2009 - 22:41:34
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




Nikola пишет:
продукты можно выбирать зажимая Ctrl

сразу и не догадаешься
 
 Top
Nikola
Отправлено: 24 Августа, 2009 - 22:47:09
Post Id



Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Авг. 2009  
Откуда: Одесса, Украина


Помог: 0 раз(а)




SAD пишет:
сразу и не догадаешься


Ну это нужно дописать, в таких случаях пишут что то типа: "для выбора нескольких элементов зажмите Ctrl".
 
 Top
SAD Модератор
Отправлено: 24 Августа, 2009 - 22:52:05
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




если честно, то дизайн выбора - не очень красив ,не удобен
 
 Top
Nikola
Отправлено: 24 Августа, 2009 - 22:55:10
Post Id



Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Авг. 2009  
Откуда: Одесса, Украина


Помог: 0 раз(а)




SAD пишет:
то дизайн выбора - не очень красив ,не удобен

В чем именно и как, на Ваш взгляд, было бы лучше ? Я только начал заниматься web программированием, поэтому буду рад совету.
 
 Top
SAD Модератор
Отправлено: 24 Августа, 2009 - 23:10:39
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




да я и сам начинающий, просто с точки зрения пользователя не удобно.может для продуктов использовать типа скрытые списки. ну вобщем я не советчик.
 
 Top
EuGen Администратор
Отправлено: 25 Августа, 2009 - 01:01:02
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




SAD пишет:
bed, very bed.

А еще указываете на грамматические ошибки, когда сами их допускаете.

Автор может использовать комбобокс


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Champion Супермодератор
Отправлено: 25 Августа, 2009 - 08:56:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




EuGen пишет:
SAD пишет:
bed, very bed.

А еще указываете на грамматические ошибки, когда сами их допускаете.
Может, он просто спать захотел?

А так, для первого сайта нормально. Функционал реализовывается, с БД простоые вещи смог выполнять. Теперь я бы отстранился от php и углубился в работу с БД, чтоб более уверено чувствовать такие вещи как вывод списков по категориям, добавление в БД из этих списков...
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB