|
|
|
| Что значит откуда взялись эти данные в таблице?
данные о книгах я заношу прямо через phpmyadmin.
У меня нет панели администратора, если вы это имеете ввиду. | |
|
|
|
|
|
|
|
для: hitball
(13.08.2009 в 12:47)
| | Ну по большому счету тогда имеет смысл озаботиться тем, чтобы сделать скрипт с формой и обработчиком, заносящий данные о книгах в таблицу и/или позволяющий изменять эти данные.
Фрагмент кода, вынесенный Вами в key.php, предназначался для применения именно в контексте такого скрипта.
Хотя ничто не мешает Вам точно также заносить данные о ключах и о соответствии ключей книгам через phpMyAdmin.
Просто неудобно это, по-моему... | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 12:54)
| | Как это должно выглядеть?
Чем заполнять поля?
key_id
obj_id
word
Что менять в Вашем коде, если я буду вручную заполнять все таблицы? | |
|
|
|
|
|
|
|
для: hitball
(13.08.2009 в 12:56)
| | Вы в таблицу key с помощю PMA заглядывали?
Там есть непонятные для Вас строки? | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 12:59)
| | Думаю следующим вопросом повергну Вас в шок. Что такое РМА??? | |
|
|
|
|
|
|
|
для: hitball
(13.08.2009 в 13:02)
| | >Думаю следующим вопросом повергну Вас в шок. Что такое РМА???
Это я повергну в шок ответом.
Это phpMyAdmin | |
|
|
|
|
|
|
|
для: hitball
(13.08.2009 в 12:56)
| | >Что менять в Вашем коде, если я буду вручную заполнять все таблицы?
Тогда мой код (я про функцию add_key()) вообще не нужен.
Этот код лишь создает запись в таблице key о новом ключевом слове (словосочетании то есть) и создает запись в таблице book_key запись о том, что этот ключ имеет отношение к указанной книге.
Если всё это Вы будете делать руками через PMA - addkey() и все функции которые она вызывает - не потребуются. | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 13:06)
| | Мне уже даже неудобно задавать вам вопросы...
вы меня совершенно запутали.
Если я удалю эту функцию, то что же останется??? | |
|
|
|
|
|
|
|
для: hitball
(13.08.2009 в 13:30)
| | Аська у Вас есть?
Сделаю исключение. | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 13:32)
| | Вот
416135484 | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 13:32)
| | Ого ))) | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 12:54)
| | >О... это не конь в вакууме. Это газенваген какой-то...
Вы пошутили, я пошутил... Чего не скажешь в шутейном разговоре...(с)
довелось мне тут поковырять Data Life Engine... и что же я там вижу?
<?
$db->query( "SELECT id, title, date, category, alt_name, flag FROM " . PREFIX . "_post
WHERE MATCH (title, short_story, full_story, xfields) AGAINST ('$body')
AND id != " . $row['id'] . " AND approve='1'" . $where_date . " LIMIT " . $config['related_number'] );
|
а ты говоришь конь... | |
|
|
|
|
|
|
|
для: Loki
(21.08.2009 в 17:11)
| | да... конь... | |
|
|
|
|
|
|
|
для: Trianon
(21.08.2009 в 23:51)
| | Добрый день!
Хочу продолжить эту тему и задать следующий вопрос:
как вывести книги по ключевым словам (ключевые слова уже занесены с помощью скрипта в сообтетствующие таблицы.
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)");
}
|
)
[codeCREATE 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`)
);][/code]
Приведу кусочек разговора, чтобы напомнить о чем шла речь:
теперь о том, как собственно выбирать книги по словам.
Что нам известно изначально?
Слово? Книга?
книга
по номеру?
да
К примеру 125
тогда можно выбрать список номеров ключей, которые ей соответствуют.
SELECT key_id FROM book_key WHERE obj_id = 125
или список номеров книг, в которых указаны такие ключи
SELECT t2.obj_id
FROM book_key t1
JOIN book_key t2 ON t1.key_id = t2.key_id
WHERE t1.obj_id = 125
или даже список самих таких книг
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 = 125
Понятное дело, что в php-код потребуется включить фрагмент, который такой запрос SQL-серверу издаст, и который потом его ответ в виде таблички на странице изобразит.
|
Вопрос в следующем, как вывести книги по ключевым словам, когда информация о книге выводятся таким образом:
<?php
include ("blocks/bd.php"); /*соединяемся с базой*/
if (isset($_GET['id'])) {$id = $_GET['id'];}
if (!isset($id)) {$id = 1;}
$result = mysql_query ("SELECT * FROM books WHERE id='$id'",$db);
if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору 1@ukr.net <br><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);
$new_view = $myrow["view"] + 1;
$update = mysql_query ("UPDATE books SET view='$new_view' WHERE id='$id'",$db);
}
else
{
echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<?
printf ("
<h2 font-size:18px; font-weight:bold; class='view_title'>%s</h2>
<img alt='%s' title='%s' class='mini_books' align='left' src='%s'>
<p class='lesson_left'><span class='lesson_add'>Автор: %s</span></br>
<span class='lesson_add'>Дата добавления: %s</span><br>
<span class='lesson_add'>Просмотров: %s</span></br>
<span class='lesson_add'>Размер: %s Кб</span></br>
<span class='lesson_add'>Закачек: %s</span>
<p class='lesson_left'>%s</p>
<span class='lesson_add'><a target='_blank' rel='nofollow' style='font-size:12px; text-align:left; font-weight:bold; color:#cc0000' href='download.php?id=%s'>Скачать '%s'</a></span></p> <p class='lesson_left'>%s</p>
<p class='lesson_left'>%s</p>",$myrow["title"],$myrow["alt"],$myrow["titleimg"],$myrow["mini_img"],$myrow["author"],$myrow["date"],$myrow["view"],$myrow["size"],$myrow["zaka"],$myrow["text"],$myrow["id"],$myrow["title"],$myrow["link_ru"],$myrow["link_ua"]);
?>
</body> </html>
|
| |
|
|
|
|
|
|
|
для: hitball
(02.02.2010 в 23:15)
| | Если именно со мной, то боюсь, лимит на исключения слегка исчерпан. | |
|
|
|
|
|
|
|
для: Trianon
(02.02.2010 в 23:32)
| | я и не говорю о исключениях, я же к вам в гости в icq не стучусь...
ну не могу я понять этот код, хоть головой об стенку
или даже выбрать список самих таких книг
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 = 125
|
| |
|
|
|
|
|
|
|
для: hitball
(03.02.2010 в 01:20)
| | JOIN
http://www.javenue.info/post/20
http://www.mysql.ru/docs/man/JOIN.html | |
|
|
|
|
|
|
|
для: Trianon
(03.02.2010 в 02:04)
| | спасибо за ссылки!
но не понятно нужно ли расшифровывать значения t1, t2, t1.key_id, t2.key_id, t3, t2.obj_id, t3.id ?
и моя страница с книгами создается динамически, я не могу написать WHERE t1.obj_id = 125, так как для каждой созданой страницы свой номер книги... | |
|
|
|
|
|
|
|
для: hitball
(03.02.2010 в 11:40)
| | Главная проблема ВСЕХ программ - дурное проектирование. Ваша - не исключение. Зачем хранить списки ключевых слов для определенной книги отдельно от самой книги? Добавить в таблицу с книгами столбец key_words, в котором будут храниться списки ключевых слов через запятую - и проблема будет решена в разы проще. Плюс избавитесь от головоломных запросов с JOIN-ами и скрипт будет работать быстрее.
И еще:
Код:
if (isset($_GET['id'])) {$id = $_GET['id'];}
if (!isset($id)) {$id = 1;}
$result = mysql_query ("SELECT * FROM books WHERE id='$id'",$db);
|
Я бы программиста за такой код уволила. Предварительно сломав руки, что б такое больше не писал. Я даже не беру в расчет общую корявость - за одно только пренебрежение к безопасности запросов. В первой строке $id = $_GET['id'] срочно замените на
Код:
| |
|
|
|
|
|
|
|
для: vikari
(06.02.2010 в 14:19)
| | >Главная проблема ВСЕХ программ - дурное проектирование. Ваша - не исключение. Зачем хранить списки ключевых слов для определенной книги отдельно от самой книги? Добавить в таблицу с книгами столбец key_words, в котором будут храниться списки ключевых слов через запятую - и проблема будет решена в разы проще. Плюс избавитесь от головоломных запросов с JOIN-ами и скрипт будет работать быстрее.
Дурное проектирование - это как раз то, что предлагаете Вы. Поля со списками, разделенными неважно чем - отсутствие даже первой нормальной формы, и как следствие - невозможность применять индексы для отбора данных по ключевым словам,
невозможность эффективно корректировать неправильно написанные ключевые слова, избыточность и потенциальная инконсистентность данных.
Это помимо проблемы конфликта символа разделителя с символами текста ключа.
Марш читать теорию реляционных БД. | |
|
|
|
|
|
|
|
для: vikari
(06.02.2010 в 14:19)
| | Касательно проблемы опасных запросов.
>Код:
>if (isset($_GET['id'])) {$id = $_GET['id'];}
>if (!isset($id)) {$id = 1;}
>$result = mysql_query ("SELECT * FROM books WHERE id='$id'",$db);
>...
>В первой строке $id = $_GET['id'] срочно замените на
Код, конечно, аховый (как любой код, требующий magic_quotes)
Но менять я бы советовал не столько первую, сколько последнюю строку.
Вы знаете, сколько строк между ними вставят, и какое значение к моменту генерации запроса этот $id в конечном итоге получит?
Нет. И я не знаю.
Поэтому, если не используются варианты с плэйсхолдерами, то писать следует так:
$result = mysql_query ("SELECT * FROM books WHERE id=" . (int) $id,$db);
|
Здесь наблюдается узкая локальность влияния ошибки.
$id до этой строки может оказаться любым. Запрос будет гарантирован безопасным так или иначе, пока строку не изменят. Именно эту строку - с запросом, а не абы какую. | |
|
|
|
|
|
|
|
для: Trianon
(06.02.2010 в 15:13)
| | Vikari, спасибо за то, что вызвались мне помочь!
Trianon, Вам тоже спасибо!
У Вас не появилась свободная минутка, чтобы ответить на мой вопрос?
но не понятно нужно ли расшифровывать значения t1, t2, t1.key_id, t2.key_id, t3, t2.obj_id, t3.id ?
и моя страница с книгами создается динамически, я не могу написать WHERE t1.obj_id = 125, так как для каждой созданой страницы свой номер книги...
|
| |
|
|
|
|
|
|
|
для: hitball
(06.02.2010 в 15:43)
| | >но не понятно нужно ли расшифровывать значения t1, t2, t1.key_id, t2.key_id, t3, t2.obj_id, t3.id ?
не понял вопроса.
Кому нужно?
Что значит "расшифровывать"?
>и моя страница с книгами создается динамически, я не могу написать WHERE t1.obj_id = 125, так как для каждой созданой страницы свой номер книги...
Что мешает подставить вместо 125 переменную? | |
|
|
|
|
|
|
|
для: Trianon
(06.02.2010 в 21:31)
| | Ура, вы со мной говорите, а я уже думала, что достала Вас своими вопросами!
Мне понятно что такое t ... t2, t1... мне нужно их заменить на что-то свое? | |
|
|
|
|
|
|
|
для: hitball
(06.02.2010 в 21:37)
| | В смысле - нужно ли сделать более информативными имена алиасов?
Если это Вам поможет ориентироваться в коде запроса - сделайте, конечно. | |
|
|
|
|
|
|
|
для: Trianon
(06.02.2010 в 22:16)
| | Я совершенно не представляю как вставить этот код на мою страницу view_books.php
Вот что у меня получилось, но "это" не работает(((
<p align="left" class="style1110" ><strong>Посмотреть похожие книги</strong></p>
<?
$result46 = mysql_query("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' = $t1.obj_id",$db);
if (!$result46)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору r@ukr.net <br><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows($result46) > 0)
{
$myrow46 = mysql_fetch_array($result46);
do
{
printf ("<div align='left'>
<a class='h4' style='color:#7f817e; text-align:left; margin-left:23px; font-family:Tahoma; font-size:11px; font-weight:bold;' href='view_books.php?id=%s'>%s</a><br></div>
",$myrow46["id"], $myrow46["title"]);
}
while ($myrow46 = mysql_fetch_array($result46));
}
else
{
echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
}
?>
|
| |
|
|
|
|
|
|
|
для: hitball
(08.02.2010 в 15:13)
| | Давайте попробуем сперва отделить мух от котлет.
Запрос в PhpMyAdmin проходит?
И выводит ли он необходимую информацию? | |
|
|
|
|
|
|
|
для: Trianon
(08.02.2010 в 15:54)
| | Добрый день)))
на странице просто выводится
Информация по запросу не может быть извлечена. В таблице нет записей.
|
и в коде перепутаны скобки, я их переставила уже
$result46 = mysql_query("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 = '$t1.obj_id'",$db)
|
| |
|
|
|
|
|
|
|
для: hitball
(08.02.2010 в 15:58)
| | Добрый день.
Вы не ответили на вопрос.
Это могло случиться потому что
1) Вы не поняли его либо
2) посчитали несущественным.
Если 1.
Уверяю Вас ничего зазорного в том, чтобы спросить одно из
а) как в PhpMyadmin выполнить запрос?
б) как установить и настроить phpMyAdmin на локальном компьютере?
в) как узнать адрес phpMyAdmin на хостинге?
г) что такое phpMyAdmin и зачем он мне?
так вот - ничего зазорного в этом нет.
А без хоть какого-нибудь клиента-обозревателя базы данных (коим является эта программа) отлаживать любые запросы - пытка адова.
Если 2, то опять же смею заметить, что несущественных вопросов (даже если они таковыми кажутся) я не задаю.
Еще один вопрос.
Зачем Вы вытягиваете код скрипта / SQL-запроса, пытаясь вытянуть его в одну строку?
Окно при этом не вмещает текст, возникает горизонтальная прокрутка, кнопка "ответить" улетает за границу видимой части, отвечать на вопрос становится сложно.
Не делайте так, пожалуйста.
Код, чтобы его можно было глядеть, по ширине должен влезать в формат листа. | |
|
|
|
|
|
|
|
для: Trianon
(08.02.2010 в 16:37)
| | я действительно, не поняла вопроса. Замечаю, что мозг работает периодами... Извините
MySQL вернула пустой результат (т.е. ноль строк). ( запрос занял 0.0008 сек. )
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 = '$t1.obj_id'
LIMIT 0 , 30
|
| |
|
|
|
|
|
|
|
для: hitball
(08.02.2010 в 16:46)
| | Вот вместо этой строчки
$result46 = mysql_query("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 = '$t1.obj_id'",$db);
|
Напишите следующее
$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 = '". $t1.obj_id . "'
";
echo "<hr><pre>".htmlspecialchars($sql)."</pre><hr>\r\n"; // эта строка будет показывать текст запроса
$result46 = mysql_query($sql,$db);
|
А еще стоит включить полную диагностику ошибок в начале программы
error_reporting(A_ALL|E_NOTICE);
|
Это , кстати можно, и стоит сделать для всего отладочного комплекта apache/php , которым Вы пользуетесь. Строкой в php.ini (либо в .htaccess)
Похоже, у Вас не выводятся предупреждения о неопределенных переменных.
Ошибки многие советуют подавлять, чтобы они не портили вид сайта.
В боевом режиме это и вправду дельный совет.
В учебном - наоборот.
Поймите, не замечая собственных ошибок, Вы не сможете выяснить, почему программа работает не так, как Вы хотите. | |
|
|
|
|
|
|
|
для: Trianon
(08.02.2010 в 16:58)
| | На странице простовыводится сам код
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 = 'obj_id'
|
если ввожу в РМА код
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 = '". $t1.obj_id . "'
|
выдает
MySQL вернула пустой результат (т.е. ноль строк). ( запрос занял 0.0008 сек. )
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 = '". $t1.obj_id . "'
LIMIT 0 , 30
|
сейчас страница с выводом книг выглядит вот так.
<?php include ("blocks/bd.php"); /*соединяемся с базой*/
if (isset($_GET['id'])) {$id = $_GET['id'];}
if (!isset($id)) {$id = 1;}
$result = mysql_query ("SELECT * FROM books WHERE id='$id'",$db);
if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору w@ukr.net <br><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);
$new_view = $myrow["view"] + 1;
$update = mysql_query ("UPDATE books SET view='$new_view' WHERE id='$id'",$db);
}
else
{
echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta name="content-type" content="text/html; charset=windows-1251" />
<meta name="Description" content="<?php echo $myrow['meta_d']; ?>" />
<meta name="Keywords" content="<?php echo $myrow['meta_k']; ?>" />
<title><?php echo $myrow['title']; ?></title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="main_border">
<!--Подключаем шапку-->
<? include("blocks/header.php"); ?>
<td ><div align="center">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<!--левую часть-->
<? include ("blocks/lefttd.php"); ?>
<td width="100%" valign="top"><p>
<?
printf ("
<h2 font-size:18px; font-weight:bold; class='view_title'>%s</h2>
<img alt='%s' title='%s' class='mini_books' align='left' src='%s'>
<p class='lesson_left'><span class='lesson_add'>Автор: %s</span></br>
<span class='lesson_add'>Дата добавления: %s</span><br>
<span class='lesson_add'>Просмотров: %s</span></br>
<span class='lesson_add'>Размер: %s Кб</span></br>
<span class='lesson_add'>Закачек: %s</span>
<p style='font-size:10px; text-align:left; color:#808080;'><span style='font-weight:bold; color:#808080;'>Книга найдена по ключевым словам:</span> %s</p>
<p class='lesson_left'>%s</p>
<span class='lesson_add'><a target='_blank' rel='nofollow' style='font-size:12px; text-align:left; font-weight:bold; color:#cc0000' href='download.php?id=%s'>Скачать '%s'</a></span></p> <p class='lesson_left'>%s</p>
<p class='lesson_left'>%s</p>",$myrow["title"],$myrow["alt"],$myrow["titleimg"],
$myrow["mini_img"],$myrow["author"],$myrow["date"],$myrow["view"],$myrow["size"],
$myrow["zaka"],$myrow["kluch"],$myrow["text"],$myrow["id"],$myrow["title"],$myrow["link_ru"],
$myrow["link_ua"]);
?>
<p align="left" class="style1110" style="color:#696b68;"><strong>Посмотреть похожие книги</strong></p>
<?
$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 = '". $t1.obj_id . "'
";
echo "<hr><pre>".htmlspecialchars($sql)."</pre><hr>\r\n"; // эта строка будет показывать текст запроса
$result46 = mysql_query($sql,$db);
if (!$result46)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору w@ukr.net <br><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows($result46) > 0)
{
$myrow46 = mysql_fetch_array($result46);
do
{
printf ("<div align='left'>
<a class='h4' style='color:#7f817e; text-align:left; margin-left:23px; font-family:Tahoma; font-size:11px; font-weight:bold;' href='view_books.php?id=%s'>%s</a><br></div>
",$myrow46["id"], $myrow46["title"]);
}
while ($myrow46 = mysql_fetch_array($result46));
}
else
{
echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
}
?>
</td>
<div align="center">
<? include("blocks/pravtd.php"); ?>
</div>
</tr>
</table>
</div></td>
</tr>
<? include ("blocks/footer.php")?>
</table>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: hitball
(08.02.2010 в 17:15)
| | Понятно.
Строку
WHERE t1.obj_id = '". $t1.obj_id . "'
|
поменяйте, пожалуйста, на строку
WHERE t1.obj_id = ". (int)($myrow['id']). "'
|
Если всё пойдет корректно , то перед echo "<hr><pre>"... можете поставить // | |
|
|
|
|
|
|
|
для: Trianon
(08.02.2010 в 18:16)
| | не получается, вот что пишет:
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 = 1'
Запрос на выборку данных из базы не прошел. Напишите об этом администратору w@ukr.net
Код ошибки:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 5
|
И спасибо за совет про php.ini
у меня этого файла нет, надо изучать как его создать | |
|
|
|
|
|
|
|
для: hitball
(08.02.2010 в 18:27)
| | сорри. Вот так:
WHERE t1.obj_id = ". (int)($myrow['id']). "
|
Последний апостроф - лишний. | |
|
|
|
|
|
|
|
для: Trianon
(08.02.2010 в 19:22)
| | СПАСИБО Вам, о Великий Мастер Trianon!
Вы меня снова осчастливили! Сейчас сделаю красивый вывод под книгами и начну со статьями и программами!
Потом вернусm к php.ini ))) | |
|
|
|
|
|
|
|
для: hitball
(08.02.2010 в 19:37)
| | Добрый день! еще один вопрос по теме возник, как в этот код встроить вывод не больше 10 книг?
пыталась через ORDER BY DESC LIMIT 10, но ошибку пишет( | |
|
|
|
|
|
|
|
для: hitball
(10.02.2010 в 14:33)
| | LIMIT 10 верно написан.
Что такое ORDER BY DESC ? | |
|
|
|
|
|
|
|
для: Trianon
(10.02.2010 в 22:02)
| | ой, извините, я уже разобралась. Спасибо за то, что ответили! | |
|
|
|
|
|
|
|
для: hitball
(10.02.2010 в 22:50)
| | у меня тут идея фикс появилась. очень нужен ваш совет в реализации.
я создала на сайте кулинарную книгу с рецептами.
Хочу сделать поиск по ингридиентам (эта графа ingridient в БД выглядит также как в книгах поле kluch с ключевыми словами, пишутся ингридиенты через запятую).
id int(6)
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)
ingridient text
mini_img varchar(255)
|
Если я буду использовать ваш скрипт для создания таблиц с ключевыми словами по ингридиентам, как мне организовать поиск, чтобы пользователь мог выбрать нужные рецепты по ингридиентам (как здесь http://ivona.bigmir.net/cooking/recipes), и по названию? | |
|
|
|
|
|
|
|
для: hitball
(10.02.2010 в 23:04)
| | >(эта графа ingridient в БД выглядит также как в книгах поле kluch с ключевыми словами, пишутся ингридиенты через запятую).
Тогда это явно не ко мне.
Я устал уже повторять что в БД через запятую независимо индексируемые данные не хранят.
Вариант доп. таблицы, которая аменяет такие цепи я Вам показал.
Не хотите - дело Ваше. Но я тогда всяко не при чем. | |
|
|
|
|
|
|
|
для: Trianon
(11.02.2010 в 00:46)
| | Так я же говорю, что вынесла уже из таблицы book_eda с помощью вашего скрипта ключевые слова в таблицу с ключевыми словами key_eda и таблицу связки book _eda_key.
А что мне теперь сделать, чтобы работал поиск по названиям рецептов (title из таблицы book_eda ) и по ингридиентам ingridient ? | |
|
|
|
|
|
|
|
для: hitball
(11.02.2010 в 01:06)
| | Определиться с видами поисковых запросов.
Определиться со структурой таблиц.
Написать скрипт, выводящий форму поиска.
Написать скрипт, который обрабатывает запрос из этой формы. | |
|
|
|
|
|
|
|
для: Trianon
(11.02.2010 в 09:53)
| | Добрый день! Продолжу доставать Вас своими вопросами)
1. Мне не очень понятно, что такое виды запросов.
2. Структуры таблиц
структура таблицы book_eda
id int(6)
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)
ingridient text
mini_img varchar(255)
|
структура таблицы book_eda_key
key_id int(11)
obj_id int(11)
|
структура таблицы key_eda
id int(11)
word varchar(255)
|
3. Написать скрипт, выводящий форму поиска.
4. Написать скрипт, который обрабатывает запрос из этой формы.
Последние пункты вообще целина непаханая...
Я так понимаю, что в третьем пункте должна быть форма с названиями ингридиентов + поисковая строка для поиска по title рецептов? Данные вписанные пользователем в форму должны передаваться в скрипт поиска? | |
|
|
|
|
|
|
|
для: hitball
(11.02.2010 в 12:48)
| | Вид поискового запроса - это набор полей формы, которые нужно заполнить, чтобы вызвать требуемую реакцию поискового движка.
Например, кто-то может захотеть искать блюда, в которые входит молоко.
Кто-то - блюда, в которые входит мясо.
А кто-то - блюда в которые входит молоко, но не входит мясо, или входит мясо кроме свинины, но не входит молоко.
В зависимости от того, какие поисковые запросы должен реализовывать движок, изрядно зависит сложность его построения. | |
|
|
|
|
|
|
|
для: hitball
(11.02.2010 в 12:48)
| | >Я так понимаю, что в третьем пункте должна быть форма с названиями ингридиентов + поисковая строка для поиска по title рецептов?
Вот и попробуйте её изобразить.
Хотя бы визуально. | |
|
|
|
|
|
|
|
для: Trianon
(11.02.2010 в 22:58)
| | Хорошо. Допустим у меня будет такой список ингридиентов, что мне делать дальше?
Рыба
Говядина
Телятина
Свинина
Курица
Фарш
Яйца
Морепродукты
Огурцы
Помидоры
Капуста
Картофель
Морковь
Лук
Зелень
Гречка
Рис
Вермишель
Крупа
Мука
Молоко
Сыр
Творог
Фрукты
Ягоды
|
| |
|
|
|
|
|
|
|
для: hitball
(12.02.2010 в 12:04)
| | Вам придется изобразить форму.
А также написать, что должен выводить сайт при нажатии на кнопку "поиск" .
В смысле - рецепты, удовлетворяющие каким условиям. | |
|
|
|
|
|
|
|
для: Trianon
(12.02.2010 в 12:51)
| | вот такая форма вышла.
При нажатии на кнопку поиск должны выводится рецепты с ингридиентами накоторых пользователь поставил галочку.
Мне хотелось бы, чтобы внизу под этой формой и под кнопкой пуск была еще графа поиск по названию блюда. Но как это сделать мне вообще не понятно. Все рецепты леат в таблице book_eda.
<p><span >Выберите ингредиенты:</span>
<form action="" method="GET">
</p>
<table width="100%" border="0" cellpadding="2" cellspacing="0">
<col width="33%" />
<col width="33%" />
<col width="33%" />
<tbody>
<tr>
<td width="33%" ><label title="рыба"><input name="riba" value="riba" type="checkbox" />Рыба</label></td>
<td width="33%" ><label title="свинина"><input name="pig" value="pig" type="checkbox" />Свинина</label></td>
<td width="33%" ><label title="говядина"><input name="govydina" value="govydina" type="checkbox" />Говядина</label></td>
</tr>
<tr>
<td width="33%" ><label title="курица"><input name="chiken" value="chiken" type="checkbox" />Курица</label></td>
<td width="33%" ><label title="телятина"><input name="telatina" value="telatina" type="checkbox" />Телятина</label></td>
<td width="33%" ><label title="фарш"><input name="farsh" value="farsh" type="checkbox" />Фарш</label></td>
</tr>
<tr>
<td width="33%" ><label title="Зелень"><input name="zelen" value="zelen" type="checkbox"> Зелень</label></td>
<td width="33%" ><label title="Капуста"><input name="kapusta" value="kapusta" type="checkbox"> Капуста</label></td>
<td width="33%" ><label title="Картофель"><input name="potatos" value="potatos" type="checkbox"> Картофель</label></td>
</tr>
<tr>
<td width="33%" ><label title="Кефир"><input name="kefir" value="kefir" type="checkbox"> Кефир</label></td>
<td width="33%" ><label title="Крупы"><input name="krupa" value="krupa" type="checkbox"> Крупы</label></td>
<td width="33%" ><label title="Лук"><input name="luk" value="luk" type="checkbox"> Лук</label></td>
</tr>
<tr>
<td width="33%" ><label title="Вермишель"><input name="vermishel" value="vermishel" type="checkbox"> Вермишель</label></td>
<td width="33%" ><label title="Молоко"><input name="milk" value="milk" type="checkbox"> Молоко</label></td>
<td width="33%" ><label title="Морепродукты"><input name="more" value="more" type="checkbox">Морепродукты</label></td>
</tr>
<tr>
<td width="33%" ><label title="Мука"><input name="muka" value="muka" type="checkbox"> Мука</label></td>
<td width="33%" ><label title="Яйца"><input name="egg" value="egg" type="checkbox">Яйца </label></td>
<td width="33%" ><label title="Огурцы"><input name="ogurc" value="ogurc" type="checkbox"> Огурцы</label></td>
</tr>
<tr> <td width="33%" ><label title="Помидоры"><input name="tomat" value="tomat" type="checkbox"> Помидоры</label></td>
<td width="33%" ><label title="Фрукты"><input name="frukt" value="frukt" type="checkbox"> Фрукты</label></td>
<td width="33%" ><label title="Сыр"><input name="sir" value="sir" type="checkbox"> Сыр</label></td>
</tr>
<tr>
<td width="33%" ><label title="Творог"><input name="tvorog" value="tvorog" type="checkbox"> Творог</label></td>
<td width="33%" ><label title="Тесто"><input name="testo" value="testo" type="checkbox"> Тесто</label></td>
<td width="33%" ><label title="Фарш"><input name="farsh" value="farsh" type="checkbox"> Фарш</label></td>
</tr>
<tr>
<td width="33%" ><label title="гречка"><input name="grecka" value="grecka" type="checkbox" />Гречка</label></td>
<td width="33%" ><label title="морковь"><input name="morkov" value="morkov" type="checkbox" />Морковь</label></td>
<td width="33%" ><label title="рис"><input name="ris" value="ris" type="checkbox" />Рис</label></td>
</tr>
</tbody>
</table>
<div ></div>
<input class="vmid beg_button_small" name="submit" value="Поиск" type="submit">
</form>
|
| |
|
|
|
|
 4.9 Кб |
|
|
для: hitball
(12.02.2010 в 14:15)
| | Изобразить, значит, это так: (см. аттач)
И как оно должно работать ?
По поводу последнего абзаца (08.02.2010 в 16:37) Вы не сделали ничего до сих пор. | |
|
|
|
|
|
|
|
для: Trianon
(12.02.2010 в 14:37)
| |
<p><span >Выберите ингредиенты:</span>
<form action="" method="GET"></p>
<table width="100%" border="0" cellpadding="2" cellspacing="0">
<col width="33%" />
<col width="33%" />
<col width="33%" />
<tbody>
<tr>
<td width="33%" ><label title="рыба"><input name="riba" value="riba" type="checkbox" />Рыба</label></td>
<td width="33%" ><label title="свинина"><input name="pig" value="pig" type="checkbox" />Свинина</label></td>
<td width="33%" ><label title="говядина"><input name="govydina" value="govydina" type="checkbox" />Говядина</label></td>
</tr>
<tr>
<td width="33%" ><label title="курица"><input name="chiken" value="chiken" type="checkbox" />Курица</label></td>
<td width="33%" ><label title="телятина"><input name="telatina" value="telatina" type="checkbox" />Телятина</label></td>
<td width="33%" ><label title="фарш"><input name="farsh" value="farsh" type="checkbox" />Фарш</label></td>
</tr>
<tr>
<td width="33%" ><label title="Зелень"><input name="zelen" value="zelen" type="checkbox"> Зелень</label></td>
<td width="33%" ><label title="Капуста"><input name="kapusta" value="kapusta" type="checkbox"> Капуста</label></td>
<td width="33%" ><label title="Картофель"><input name="potatos" value="potatos" type="checkbox"> Картофель</label></td>
</tr>
<tr>
<td width="33%" ><label title="Кефир"><input name="kefir" value="kefir" type="checkbox"> Кефир</label></td>
<td width="33%" ><label title="Крупы"><input name="krupa" value="krupa" type="checkbox"> Крупы</label></td>
<td width="33%" ><label title="Лук"><input name="luk" value="luk" type="checkbox"> Лук</label></td>
</tr>
<tr>
<td width="33%" ><label title="Вермишель"><input name="vermishel" value="vermishel" type="checkbox"> Вермишель</label></td>
<td width="33%" ><label title="Молоко"><input name="milk" value="milk" type="checkbox"> Молоко</label></td>
<td width="33%" ><label title="Морепродукты"><input name="more" value="more" type="checkbox">Морепродукты</label></td>
</tr>
<tr>
<td width="33%" ><label title="Мука"><input name="muka" value="muka" type="checkbox"> Мука</label></td>
<td width="33%" ><label title="Яйца"><input name="egg" value="egg" type="checkbox">Яйца </label></td>
<td width="33%" ><label title="Огурцы"><input name="ogurc" value="ogurc" type="checkbox"> Огурцы</label></td>
</tr>
<tr>
<td width="33%" ><label title="Помидоры"><input name="tomat" value="tomat" type="checkbox"> Помидоры</label></td>
<td width="33%" ><label title="Фрукты"><input name="frukt" value="frukt" type="checkbox"> Фрукты</label></td>
<td width="33%" ><label title="Сыр"><input name="sir" value="sir" type="checkbox"> Сыр</label></td>
</tr>
<tr>
<td width="33%" ><label title="Творог"><input name="tvorog" value="tvorog" type="checkbox"> Творог</label></td>
<td width="33%" ><label title="Тесто"><input name="testo" value="testo" type="checkbox"> Тесто</label></td>
<td width="33%" ><label title="Фарш"><input name="farsh" value="farsh" type="checkbox"> Фарш</label></td>
</tr>
<tr>
<td width="33%" ><label title="гречка"><input name="grecka" value="grecka" type="checkbox" />Гречка</label></td>
<td width="33%" ><label title="морковь"><input name="morkov" value="morkov" type="checkbox" />Морковь</label></td>
<td width="33%" ><label title="рис"><input name="ris" value="ris" type="checkbox" />Рис</label></td>
</tr>
</tbody>
</table>
<div ></div>
<input class="vmid beg_button_small" name="submit" value="Поиск" type="submit">
</form>
|
| |
|
|
|
|
|
|
|
для: hitball
(12.02.2010 в 14:15)
| | Trianon хотел сказать вам что, кроме формы надо написать:
1 Обработчик формы (работа в цикле с чекбоксами)
2 Запрос в БД (поиск блюд) на получение данных ,согласно выбранным чекбоксам
3 Вывод в браузер данных(в цикле) [самих блюд ] из БД | |
|
|
|
|
|
|
|
для: oliss
(12.02.2010 в 14:48)
| | Это Вы спешите.
Оно конечно всё это нужно,
только неспеша, последовательно.
Для начала стоит определиться, что должен выдать поисковик, если помечены к примеру крупы, гречка и сыр, и написано внизу "картошка"..
Рецепты из гречки?
Рецепты из любой крупы, кроме гречки?
Драники с гречкой?
Пирожное-картошка? | |
|
|
|
|
|
|
|
для: Trianon
(12.02.2010 в 14:56)
| | я поняла, что вы имеете ввиду.
но мой замысел не совсем такой.
Форма поиска по ингридиентам независима от поиска по названию рецепта.
Форма поиска по ингридиентам
Когда пользователь выбирает ингридиенты и нажимает поиск, должны вывестись все блюда в которых есть эти ингридиенты.
К примеру: картошка, лук, фарш.
Выводится название блюда в которых есть эти ингридиенты, скажем картофельная пицца и зразы.
Форма поиска по названию блюд
Независима от ингридиентом, думаю здесь нужен отдельный обработчик.
Здесь пользователь просто вводит название блюда и получает перечень блюд по названию title
к примеру борщ
выводится украинский борщ, болгарский борщ, борщ с чесночными папушками, зеленый борщ | |
|
|
|
|
|
|
|
для: hitball
(12.02.2010 в 15:07)
| | >я поняла, что вы имеете ввиду.
>но мой замысел не совсем такой.
>
>Форма поиска по ингридиентам независима от поиска по названию рецепта.
Если задачу не решить , следует делить задачи, делая из сложных простые.
>Форма поиска по ингридиентам
>Когда пользователь выбирает ингридиенты и нажимает поиск, должны вывестись все блюда в которых есть эти ингридиенты.
>К примеру: картошка, лук, фарш.
>Выводится название блюда в которых есть эти ингридиенты, скажем картофельная пицца и зразы.
Что значит "есть эти ингредиенты"?
Есть хотя бы один из указанные ингредиентов или есть абсолютно все указанные ингредиенты?
>Форма поиска по названию блюд
Если это другая форма, зачем Вы сейчас о ней говорите?
Другая форма - это другая задача. | |
|
|
|
|
|
|
|
для: Trianon
(12.02.2010 в 15:10)
| | Есть хотя бы один из указанных ингредиентов.
Если это другая форма, зачем Вы сейчас о ней говорите?
|
на всякий случай, а вдруг можно как-то совместить) | |
|
|
|
|
|
|
|
для: hitball
(12.02.2010 в 15:14)
| | >Есть хотя бы один из указанных ингредиентов.
Ясно.
1) Ключи чекбоксов в полях формы метите массив-образующими именами. <input type=checkbox name=ingr[] name=$ing_key > $ingr_name
1а) проще все эти элементы сразу выводить SQL-запросом из таблицы ключей-ингредиентов book_eda_key.
"<input type=checkbox name=ingr[] name=$row[id] /> $row[word] "
А не держать длинным статическим HTML-кодом, в котором при малейшем чихе придеится делать правки.
2) значения массива $_REQUEST['ingr'] делаете целочисленными (foreach ) и складываете в массив , к примеру $ingredients
3) делаете из массива список через запятую $ingrlist = implode(',', $ingredients)
4) формируете запрос вида
SELECT be.*
FROM book_eda be
JOIN book_eda_key bek ON be.id = bek.obj_id
WHERE bek.key_id IN(список)
|
где список - значение переменной $ingrlist
Отправляете в MySQL , раскрываете результат.
Как-то так. п1. касается скрипта , выводящего форму.
пп.2-4 фактически представляют скрипт, обрабатывающий запрос из этой формы.
>
Если это другая форма, зачем Вы сейчас о ней говорите?
|
>на всякий случай, а вдруг можно как-то совместить)
Тоже ясно. Тогда я на всякий случай помолчу.
А то вдруг случайно совмещу несовместимое (очень этого не люблю, когда вкусную селедку запивать вкусным молоком..., такая, знаете ли, бяка начинается) | |
|
|
|
|
|
|
|
для: Trianon
(12.02.2010 в 15:50)
| |
<input type=checkbox name=ingr[] name=$ing_key > $ingr_name
"<input type=checkbox name=ingr[] name=$row[id] /> $row[word] "
|
а можно мне пример на рыбе?
это так должно быть?
<td width="33%" ><label title="рыба">"<input type=checkbox name=ingr[riba] name=$row[id] /> $row[word] "</label></td>
<td width="33%" >"<input type=checkbox name=ingr[pig] name=$row[id] /> $row[word] "</td>...
|
| |
|
|
|
|
|
|
|
для: hitball
(12.02.2010 в 17:05)
| | Для начала нужно сделать SELECT-запрос к таблице с названиями ингридиентов. | |
|
|
|
|
|
|
|
для: Trianon
(12.02.2010 в 17:43)
| | что-то не то(((
я же создала таблицу book_key с названиями ингридиентов, которые перенеслись с таблицы book_eda с рецептами.
если вытягивать от-туда по названию, к примеру рыба, то как же создать переменную, ведь там нигде нет значения типа riba, egg, которые есть в форме... нужно доавлять какую-то строку?
<?
echo "<p class='post_comment'>Выбор ингридиентов:</p>";
$result3 = mysql_query ("SELECT * FROM key_eda WHERE id='$id'",$db);
if (mysql_num_rows ($result3) > 0)
{
$myrow3 = mysql_fetch_array($result3);
do
{
printf ("<div class='post_div'>
<p class='post_comment_add'><strong>%s </strong>
</div>
",$myrow3["riba"]);
}
while ($myrow3 = mysql_fetch_array($result3)); }
?>
|
| |
|
|
|
|
|
|
|
для: hitball
(12.02.2010 в 18:25)
| | WHERE id='$id' здесь лишнее.
и форму do-while цикла можете оставить для Евгения Попова, или как его там.
Здесь, пожалуйста, только
while ($myrow3 = mysql_fetch_assoc($result3))
{
printf ...
}
|
и никак иначе.
Получив $myrow3 = mysql_fetch_assoc($result3);
Вы можете сами посмотреть, какие ключи есть у Вас в массиве:
var_dump($myrow3); | |
|
|
|
|
|
|
|
для: Trianon
(12.02.2010 в 18:35)
| | так?
<?
echo "<p class='post_comment'>Выбор ингридиентов:</p>";
$result3 = mysql_query ("SELECT * FROM key_eda",$db);
while ($myrow3 = mysql_fetch_assoc($result3))
{
printf ("<div class='post_div'>
<p class='post_comment_add'><strong>%s </strong>
</div>
",$myrow3["riba"]);
}
?>
|
мне не понятно, что выводить в printf , какие значения полей?
как посмотреть?
| |
|
|
|
|
|
|
|
для: hitball
(12.02.2010 в 18:42)
| | >как посмотреть?
>
поставить его вместо всего вызова printf() - единственным внутри фигурных скобок.
Временно сразу после </p> стоит добавить <pre>
Просто чтобы легче читать было. | |
|
|
|
|
|
|
|
для: Trianon
(12.02.2010 в 18:45)
| | я сейчас посмотрела свою таблицу key_eda и там ключевые слова лежат не совсем корректно.
В базу заносились значения типа морковь 1 шт, вермишель 200 гр, свекла 50...
это плохо? там должны лежать "чистые" ключевые слова?
и вот что мне вывело
Выбор ингридиентов:
array(2) {
["id"]=>
string(1) "1"
["word"]=>
string(8) "2 свeклы"
}
array(2) {
["id"]=>
string(1) "2"
["word"]=>
string(9) "1 морковь"
}
array(2) {
["id"]=>
string(1) "3"
["word"]=>
string(10) "1 луковица"
|
я так понимаю, что мне прийдется подправить все рецепты и делать записи количества ингридиентов непосредственно в описании рецепта, да? | |
|
|
|
|
|
|
|
для: hitball
(12.02.2010 в 19:03)
| | Скорее стоит ввести таблицу единиц измерения units (id, unitname) и изменить таблицу связки, добавив в нее столбик id_unit и столбик qty количества ингредиента.
Тогда в таблице связки получится примерно так
15, 1, 5, 2
15 - рецепт селедки под шубой
1 - ингредиент "Свекла"
5 - единица измерения - Штука (хотя это дикость, мерять свеклу в штуках. Свекла - не яйцо)
2 - количество ( свеклы 1 в рецепте селедки под шубой 15 выраженное в штуках 5)
Ведь фактически если связка отражает задействованность продукта в блюде, то почему ей же не нести информацию о том, сколько этого продукта задействовано?
---
Тему стоит завти новую. И писать в нее более аккуратно. Бегать за кнопкой "ответить" уже более чем надоело. | |
|
|
|
|
|
|
|
|
для: Trianon
(12.02.2010 в 14:56)
| | Моё мнение,вобще не использовать нижнее поле " Картошка ",а выводить все Блюда в которые входят данные ингредиенты ,а пользователь пусть сам выберет какое(какие) Блюдо(а) ему надо.
Это как в жизни :открыл холодильник ,посмотрел, что есть в наличии ,ввёл в форму и получил перечень тех блюд ,что можно приготовить из того что есть в закромах :)))
Можно делать проще, как итальянцы: что нашел дома ,из того и сделал Пиццу ;) | |
|
|
|
|
|
|
|
для: oliss
(12.02.2010 в 15:09)
| | да-да! именно это мне и надо)))
только яне понимаю как это не выводить поле??? | |
|
|
|
|
|
|
|
для: hitball
(12.02.2010 в 15:15)
| | Делаете три таблицы
1 Блюда
2 Ингредиенты
3 Таблица связи [ Блюда-->Ингредиенты ] | |
|
|
|
|
|
|
|
для: oliss
(12.02.2010 в 15:19)
| | вы пропустили все мою предыдущую работу) это уже создано 11.02.2010 в 12:48 | |
|
|
|
|
|
|
|
для: oliss
(12.02.2010 в 15:19)
| | Можно усложнить :
В таблицу Блюда добавить поле Парент
Тогда вывод блюд будет таким:
Напитки
Сок морковный
Коктель Сказка
Сок берёзовый с мякотью
Супы
Суп гороховый
Солянка
и т.п | |
|
|
|
|
|
|
|
для: oliss
(12.02.2010 в 15:29)
| | а что делает это поле парент и что в нем содержится? | |
|
|
|
|
|
|
|
для: hitball
(12.02.2010 в 15:32)
| |
id p_id name_bluda
1 0 Напитки
2 0 Супы
3 1 Сок морковный
4 1 Коктейль Сказка
5 1 Сок берёзовый с мякотью
6 2 Суп гороховый
7 2 Солянка
p_id --> id связь по ключу ( id автоинкрементный )
|
| |
|
|
|
|
|
|
|
для: oliss
(12.02.2010 в 16:14)
| | C мякотью - гороховый суп.
А березовую лучше кашу.
Человек обычных-то таблиц не освоил, Вы его уже рекурсивно определяемыми пичкаете.
Заворот кишок обеспечен. | |
|
|
|
|
|
|
|
для: oliss
(12.02.2010 в 15:09)
| | >Моё мнение,вобще не использовать нижнее поле " Картошка ",а выводить все Блюда в которые входят данные ингредиенты ,а пользователь пусть сам выберет какое(какие) Блюдо(а) ему надо.
Я поэтому и спросил, какова форма поискового запроса.
Но тредстартер зазотел по-другому.
>Это как в жизни :открыл холодильник ,посмотрел, что есть в наличии ,ввёл в форму и получил перечень тех блюд ,что можно приготовить из того что есть в закромах :)))
Это очень утилитарный подход
>Можно делать проще, как итальянцы: что нашел дома ,из того и сделал Пиццу ;)
Да. Но если Вы не итальянец/итальянка - с таким подходом можно травануться запросто :) | |
|
|
|
|
|
|
|
для: Trianon
(12.02.2010 в 15:33)
| | Trianon, если Вы считаете что по Вашему будет лучше я конечно соглашусь, потому, что вообще плохо представляю как это будет работать и как сделать лучше и удобнее... | |
|
|
|
|
|
|
|
для: hitball
(12.02.2010 в 12:04)
| | Посмотрите, как реализована форма поиска продуктов по ингредиентам
http://ivona.bigmir.net/cooking/recipes | |
|
|
|
|
|
|
|
для: oliss
(12.02.2010 в 13:09)
| | не заворот кишок, а взрыв мозга)))
может все же обойдемся моими таблицами? которые я уже создала? | |
|
|
|
|
|
|
|
для: hitball
(12.02.2010 в 16:26)
| |
<input type=checkbox name=ingr[] name=$ing_key > $ingr_name
"<input type=checkbox name=ingr[] name=$row[id] /> $row[word] "
|
а можно мне пример на рыбе?
это так должно быть?
<td width="33%" ><label title="рыба">"<input type=checkbox name=ingr[riba] name=$row[id] /> $row[word] "</label></td>
<td width="33%" >"<input type=checkbox name=ingr[pig] name=$row[id] /> $row[word] "</td>...
|
| |
|
|
|
|
|
|
|
для: hitball
(12.02.2010 в 17:20)
| | Нет не правильно
name="<?php intval($row['id'])?>" /> <?php echo htmlspecialchars($row['word'])?></input >
|
Не усложняйте жизнь,сделайте чисто форму с чекбоксами и сабмитом, не надо навешивать на неё всякие рюшечки, типа label ,таблиц и т.п ,только чистая форма ,посмотрите,что из неё передаётся постом echo '<pre>' ; print_r($_POST); и двигайтесь дальше ,делайте всё в черновике,а обвешивать разными тегами будите потом. | |
|
|
|
|
|
|
|
для: oliss
(12.02.2010 в 17:57)
| | по поводу htmlspecialchars не могу не поддержать.
Если, конечно, названия хранятся не html-кодом, а обычным текстом. | |
|
|
|
|
|
|
|
для: hitball
(12.02.2010 в 16:26)
| | Наверно,лучше создать новую тему ,а то модераторы будут нервничать по поводу количества постов в этой.
И начать с чистого листа т.е из расчёта того, что уже понятно и сделано ,по шагам (сначала структура таблиц (моё мнение, надо изначально делать всё грамотно т.е используя раздел-->категория-->документы) [ таблица с парентом+таблица связи +таблица ингредиентов ]
Создать таблицы
Создать форму с чекбоксами
обработать её
сделать запрос к таблицам
вывести данные
Беритесь за сложное (не бойтесь ,взрыва мозга не произойдёт ;))) ,делайте по пунктам ,если будут ошибки и непонимание, то выкладывайте, что сделали, до того момента ,как появилась ошибка или что не ясно. | |
|
|
|
|
|
|
|
для: oliss
(12.02.2010 в 17:31)
| | Смотрите ответ Trianon 12.02.2010 в 15:50 | |
|
|
|
|
|
|
|
для: hitball
(13.08.2009 в 12:47)
| | http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=63568
часть 1 | |
|
|
|