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

Форум PHP

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

 

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

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

тема: Другие новости по теме. Часть 2
 
 автор: hitball   (13.08.2009 в 12:47)   письмо автору
 
 

Что значит откуда взялись эти данные в таблице?
данные о книгах я заношу прямо через phpmyadmin.
У меня нет панели администратора, если вы это имеете ввиду.

   
 
 автор: Trianon   (13.08.2009 в 12:54)   письмо автору
 
   для: hitball   (13.08.2009 в 12:47)
 

Ну по большому счету тогда имеет смысл озаботиться тем, чтобы сделать скрипт с формой и обработчиком, заносящий данные о книгах в таблицу и/или позволяющий изменять эти данные.
Фрагмент кода, вынесенный Вами в key.php, предназначался для применения именно в контексте такого скрипта.

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

   
 
 автор: hitball   (13.08.2009 в 12:56)   письмо автору
 
   для: Trianon   (13.08.2009 в 12:54)
 

Как это должно выглядеть?
Чем заполнять поля?
key_id
obj_id
word
Что менять в Вашем коде, если я буду вручную заполнять все таблицы?

   
 
 автор: Trianon   (13.08.2009 в 12:59)   письмо автору
 
   для: hitball   (13.08.2009 в 12:56)
 

Вы в таблицу key с помощю PMA заглядывали?
Там есть непонятные для Вас строки?

   
 
 автор: hitball   (13.08.2009 в 13:02)   письмо автору
 
   для: Trianon   (13.08.2009 в 12:59)
 

Думаю следующим вопросом повергну Вас в шок. Что такое РМА???

   
 
 автор: Trianon   (13.08.2009 в 13:06)   письмо автору
 
   для: hitball   (13.08.2009 в 13:02)
 

>Думаю следующим вопросом повергну Вас в шок. Что такое РМА???
Это я повергну в шок ответом.
Это phpMyAdmin

   
 
 автор: Trianon   (13.08.2009 в 13:06)   письмо автору
 
   для: hitball   (13.08.2009 в 12:56)
 

>Что менять в Вашем коде, если я буду вручную заполнять все таблицы?

Тогда мой код (я про функцию add_key()) вообще не нужен.
Этот код лишь создает запись в таблице key о новом ключевом слове (словосочетании то есть) и создает запись в таблице book_key запись о том, что этот ключ имеет отношение к указанной книге.

Если всё это Вы будете делать руками через PMA - addkey() и все функции которые она вызывает - не потребуются.

   
 
 автор: hitball   (13.08.2009 в 13:30)   письмо автору
 
   для: Trianon   (13.08.2009 в 13:06)
 

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

   
 
 автор: Trianon   (13.08.2009 в 13:32)   письмо автору
 
   для: hitball   (13.08.2009 в 13:30)
 

Аська у Вас есть?
Сделаю исключение.

   
 
 автор: hitball   (13.08.2009 в 13:41)   письмо автору
 
   для: Trianon   (13.08.2009 в 13:32)
 

Вот
416135484

   
 
 автор: Саня   (13.08.2009 в 16:13)   письмо автору
 
   для: Trianon   (13.08.2009 в 13:32)
 

Ого )))

   
 
 автор: Loki   (21.08.2009 в 17:11)   письмо автору
 
   для: 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'] );


а ты говоришь конь...

   
 
 автор: Trianon   (21.08.2009 в 23:51)   письмо автору
 
   для: Loki   (21.08.2009 в 17:11)
 

да... конь...

   
 
 автор: hitball   (02.02.2010 в 23:15)   письмо автору
 
   для: 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'>&nbsp;
<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>
&nbsp;&nbsp;&nbsp; <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>&nbsp;&nbsp;&nbsp;&nbsp; <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>

   
 
 автор: Trianon   (02.02.2010 в 23:32)   письмо автору
 
   для: hitball   (02.02.2010 в 23:15)
 

Если именно со мной, то боюсь, лимит на исключения слегка исчерпан.

   
 
 автор: hitball   (03.02.2010 в 01:20)   письмо автору
 
   для: 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

   
 
 автор: Trianon   (03.02.2010 в 02:04)   письмо автору
 
   для: hitball   (03.02.2010 в 01:20)
 

JOIN
http://www.javenue.info/post/20
http://www.mysql.ru/docs/man/JOIN.html

   
 
 автор: hitball   (03.02.2010 в 11:40)   письмо автору
 
   для: 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, так как для каждой созданой страницы свой номер книги...

   
 
 автор: vikari   (06.02.2010 в 14:19)   письмо автору
 
   для: 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'] срочно замените на

Код:
$id = (int)$_GET['id']

   
 
 автор: Trianon   (06.02.2010 в 15:01)   письмо автору
 
   для: vikari   (06.02.2010 в 14:19)
 

>Главная проблема ВСЕХ программ - дурное проектирование. Ваша - не исключение. Зачем хранить списки ключевых слов для определенной книги отдельно от самой книги? Добавить в таблицу с книгами столбец key_words, в котором будут храниться списки ключевых слов через запятую - и проблема будет решена в разы проще. Плюс избавитесь от головоломных запросов с JOIN-ами и скрипт будет работать быстрее.

Дурное проектирование - это как раз то, что предлагаете Вы. Поля со списками, разделенными неважно чем - отсутствие даже первой нормальной формы, и как следствие - невозможность применять индексы для отбора данных по ключевым словам,
невозможность эффективно корректировать неправильно написанные ключевые слова, избыточность и потенциальная инконсистентность данных.
Это помимо проблемы конфликта символа разделителя с символами текста ключа.

Марш читать теорию реляционных БД.

   
 
 автор: Trianon   (06.02.2010 в 15:13)   письмо автору
 
   для: 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 до этой строки может оказаться любым. Запрос будет гарантирован безопасным так или иначе, пока строку не изменят. Именно эту строку - с запросом, а не абы какую.

   
 
 автор: hitball   (06.02.2010 в 15:43)   письмо автору
 
   для: 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, так как для каждой созданой страницы свой номер книги...

   
 
 автор: Trianon   (06.02.2010 в 21:31)   письмо автору
 
   для: 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 переменную?

   
 
 автор: hitball   (06.02.2010 в 21:37)   письмо автору
 
   для: Trianon   (06.02.2010 в 21:31)
 

Ура, вы со мной говорите, а я уже думала, что достала Вас своими вопросами!
Мне понятно что такое t ... t2, t1... мне нужно их заменить на что-то свое?

   
 
 автор: Trianon   (06.02.2010 в 22:16)   письмо автору
 
   для: hitball   (06.02.2010 в 21:37)
 

В смысле - нужно ли сделать более информативными имена алиасов?
Если это Вам поможет ориентироваться в коде запроса - сделайте, конечно.

   
 
 автор: hitball   (08.02.2010 в 15:13)   письмо автору
 
   для: 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();
}
?>

   
 
 автор: Trianon   (08.02.2010 в 15:54)   письмо автору
 
   для: hitball   (08.02.2010 в 15:13)
 

Давайте попробуем сперва отделить мух от котлет.
Запрос в PhpMyAdmin проходит?
И выводит ли он необходимую информацию?

   
 
 автор: hitball   (08.02.2010 в 15:58)   письмо автору
 
   для: 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)

   
 
 автор: Trianon   (08.02.2010 в 16:37)   письмо автору
 
   для: hitball   (08.02.2010 в 15:58)
 

Добрый день.
Вы не ответили на вопрос.
Это могло случиться потому что
1) Вы не поняли его либо
2) посчитали несущественным.

Если 1.
Уверяю Вас ничего зазорного в том, чтобы спросить одно из
а) как в PhpMyadmin выполнить запрос?
б) как установить и настроить phpMyAdmin на локальном компьютере?
в) как узнать адрес phpMyAdmin на хостинге?
г) что такое phpMyAdmin и зачем он мне?
так вот - ничего зазорного в этом нет.

А без хоть какого-нибудь клиента-обозревателя базы данных (коим является эта программа) отлаживать любые запросы - пытка адова.

Если 2, то опять же смею заметить, что несущественных вопросов (даже если они таковыми кажутся) я не задаю.

Еще один вопрос.
Зачем Вы вытягиваете код скрипта / SQL-запроса, пытаясь вытянуть его в одну строку?
Окно при этом не вмещает текст, возникает горизонтальная прокрутка, кнопка "ответить" улетает за границу видимой части, отвечать на вопрос становится сложно.
Не делайте так, пожалуйста.
Код, чтобы его можно было глядеть, по ширине должен влезать в формат листа.

   
 
 автор: hitball   (08.02.2010 в 16:46)   письмо автору
 
   для: 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

   
 
 автор: Trianon   (08.02.2010 в 16:58)   письмо автору
 
   для: 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)
Похоже, у Вас не выводятся предупреждения о неопределенных переменных.

Ошибки многие советуют подавлять, чтобы они не портили вид сайта.
В боевом режиме это и вправду дельный совет.
В учебном - наоборот.
Поймите, не замечая собственных ошибок, Вы не сможете выяснить, почему программа работает не так, как Вы хотите.

   
 
 автор: hitball   (08.02.2010 в 17:15)   письмо автору
 
   для: 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'>&nbsp;
<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>
&nbsp;&nbsp;&nbsp; <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>&nbsp;&nbsp;&nbsp;&nbsp; <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>

   
 
 автор: Trianon   (08.02.2010 в 18:16)   письмо автору
 
   для: hitball   (08.02.2010 в 17:15)
 

Понятно.
Строку
  WHERE t1.obj_id = '". $t1.obj_id . "' 

поменяйте, пожалуйста, на строку
  WHERE t1.obj_id = ". (int)($myrow['id']). "' 


Если всё пойдет корректно , то перед echo "<hr><pre>"... можете поставить //

   
 
 автор: hitball   (08.02.2010 в 18:27)   письмо автору
 
   для: 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
у меня этого файла нет, надо изучать как его создать

   
 
 автор: Trianon   (08.02.2010 в 19:22)   письмо автору
 
   для: hitball   (08.02.2010 в 18:27)
 

сорри. Вот так:
  WHERE t1.obj_id = ". (int)($myrow['id']). "

Последний апостроф - лишний.

   
 
 автор: hitball   (08.02.2010 в 19:37)   письмо автору
 
   для: Trianon   (08.02.2010 в 19:22)
 

СПАСИБО Вам, о Великий Мастер Trianon!
Вы меня снова осчастливили! Сейчас сделаю красивый вывод под книгами и начну со статьями и программами!
Потом вернусm к php.ini )))

   
 
 автор: hitball   (10.02.2010 в 14:33)   письмо автору
 
   для: hitball   (08.02.2010 в 19:37)
 

Добрый день! еще один вопрос по теме возник, как в этот код встроить вывод не больше 10 книг?
пыталась через ORDER BY DESC LIMIT 10, но ошибку пишет(

   
 
 автор: Trianon   (10.02.2010 в 22:02)   письмо автору
 
   для: hitball   (10.02.2010 в 14:33)
 

LIMIT 10 верно написан.
Что такое ORDER BY DESC ?

   
 
 автор: hitball   (10.02.2010 в 22:50)   письмо автору
 
   для: Trianon   (10.02.2010 в 22:02)
 

ой, извините, я уже разобралась. Спасибо за то, что ответили!

   
 
 автор: hitball   (10.02.2010 в 23:04)   письмо автору
 
   для: 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), и по названию?

   
 
 автор: Trianon   (11.02.2010 в 00:46)   письмо автору
 
   для: hitball   (10.02.2010 в 23:04)
 

>(эта графа ingridient в БД выглядит также как в книгах поле kluch с ключевыми словами, пишутся ингридиенты через запятую).

Тогда это явно не ко мне.
Я устал уже повторять что в БД через запятую независимо индексируемые данные не хранят.
Вариант доп. таблицы, которая аменяет такие цепи я Вам показал.
Не хотите - дело Ваше. Но я тогда всяко не при чем.

   
 
 автор: hitball   (11.02.2010 в 01:06)   письмо автору
 
   для: Trianon   (11.02.2010 в 00:46)
 

Так я же говорю, что вынесла уже из таблицы book_eda с помощью вашего скрипта ключевые слова в таблицу с ключевыми словами key_eda и таблицу связки book _eda_key.
А что мне теперь сделать, чтобы работал поиск по названиям рецептов (title из таблицы book_eda ) и по ингридиентам ingridient ?

   
 
 автор: Trianon   (11.02.2010 в 09:53)   письмо автору
 
   для: hitball   (11.02.2010 в 01:06)
 

Определиться с видами поисковых запросов.
Определиться со структурой таблиц.
Написать скрипт, выводящий форму поиска.
Написать скрипт, который обрабатывает запрос из этой формы.

   
 
 автор: hitball   (11.02.2010 в 12:48)   письмо автору
 
   для: 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 рецептов? Данные вписанные пользователем в форму должны передаваться в скрипт поиска?

   
 
 автор: Trianon   (11.02.2010 в 22:55)   письмо автору
 
   для: hitball   (11.02.2010 в 12:48)
 

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

Например, кто-то может захотеть искать блюда, в которые входит молоко.
Кто-то - блюда, в которые входит мясо.
А кто-то - блюда в которые входит молоко, но не входит мясо, или входит мясо кроме свинины, но не входит молоко.

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

   
 
 автор: Trianon   (11.02.2010 в 22:58)   письмо автору
 
   для: hitball   (11.02.2010 в 12:48)
 

>Я так понимаю, что в третьем пункте должна быть форма с названиями ингридиентов + поисковая строка для поиска по title рецептов?

Вот и попробуйте её изобразить.
Хотя бы визуально.

   
 
 автор: hitball   (12.02.2010 в 12:04)   письмо автору
 
   для: Trianon   (11.02.2010 в 22:58)
 

Хорошо. Допустим у меня будет такой список ингридиентов, что мне делать дальше?

Рыба
Говядина
Телятина
Свинина
Курица
Фарш
Яйца
Морепродукты
Огурцы
Помидоры
Капуста 
Картофель
Морковь
Лук
Зелень
Гречка
Рис
Вермишель
Крупа
Мука
Молоко 
Сыр
Творог    
Фрукты    
Ягоды    

   
 
 автор: Trianon   (12.02.2010 в 12:51)   письмо автору
 
   для: hitball   (12.02.2010 в 12:04)
 

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

   
 
 автор: hitball   (12.02.2010 в 14:15)   письмо автору
 
   для: 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>

   
 
 автор: Trianon   (12.02.2010 в 14:37)   письмо автору
4.9 Кб
 
   для: hitball   (12.02.2010 в 14:15)
 

Изобразить, значит, это так: (см. аттач)

И как оно должно работать ?

По поводу последнего абзаца (08.02.2010 в 16:37) Вы не сделали ничего до сих пор.

   
 
 автор: hitball   (12.02.2010 в 14:51)   письмо автору
 
   для: 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>

   
 
 автор: oliss   (12.02.2010 в 14:48)   письмо автору
 
   для: hitball   (12.02.2010 в 14:15)
 

Trianon хотел сказать вам что, кроме формы надо написать:

1 Обработчик формы (работа в цикле с чекбоксами)
2 Запрос в БД (поиск блюд) на получение данных ,согласно выбранным чекбоксам
3 Вывод в браузер данных(в цикле) [самих блюд ] из БД

   
 
 автор: Trianon   (12.02.2010 в 14:56)   письмо автору
 
   для: oliss   (12.02.2010 в 14:48)
 

Это Вы спешите.
Оно конечно всё это нужно,
только неспеша, последовательно.

Для начала стоит определиться, что должен выдать поисковик, если помечены к примеру крупы, гречка и сыр, и написано внизу "картошка"..
Рецепты из гречки?
Рецепты из любой крупы, кроме гречки?
Драники с гречкой?
Пирожное-картошка?

   
 
 автор: hitball   (12.02.2010 в 15:07)   письмо автору
 
   для: Trianon   (12.02.2010 в 14:56)
 

я поняла, что вы имеете ввиду.
но мой замысел не совсем такой.

Форма поиска по ингридиентам независима от поиска по названию рецепта.

Форма поиска по ингридиентам
Когда пользователь выбирает ингридиенты и нажимает поиск, должны вывестись все блюда в которых есть эти ингридиенты.
К примеру: картошка, лук, фарш.
Выводится название блюда в которых есть эти ингридиенты, скажем картофельная пицца и зразы.

Форма поиска по названию блюд
Независима от ингридиентом, думаю здесь нужен отдельный обработчик.
Здесь пользователь просто вводит название блюда и получает перечень блюд по названию title
к примеру борщ
выводится украинский борщ, болгарский борщ, борщ с чесночными папушками, зеленый борщ

   
 
 автор: Trianon   (12.02.2010 в 15:10)   письмо автору
 
   для: hitball   (12.02.2010 в 15:07)
 

>я поняла, что вы имеете ввиду.
>но мой замысел не совсем такой.
>
>Форма поиска по ингридиентам независима от поиска по названию рецепта.

Если задачу не решить , следует делить задачи, делая из сложных простые.

>Форма поиска по ингридиентам
>Когда пользователь выбирает ингридиенты и нажимает поиск, должны вывестись все блюда в которых есть эти ингридиенты.
>К примеру: картошка, лук, фарш.
>Выводится название блюда в которых есть эти ингридиенты, скажем картофельная пицца и зразы.

Что значит "есть эти ингредиенты"?
Есть хотя бы один из указанные ингредиентов или есть абсолютно все указанные ингредиенты?

>Форма поиска по названию блюд
Если это другая форма, зачем Вы сейчас о ней говорите?
Другая форма - это другая задача.

   
 
 автор: hitball   (12.02.2010 в 15:14)   письмо автору
 
   для: Trianon   (12.02.2010 в 15:10)
 

Есть хотя бы один из указанных ингредиентов.
Если это другая форма, зачем Вы сейчас о ней говорите?

на всякий случай, а вдруг можно как-то совместить)

   
 
 автор: Trianon   (12.02.2010 в 15:50)   письмо автору
 
   для: 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 фактически представляют скрипт, обрабатывающий запрос из этой формы.


>
Если это другая форма, зачем Вы сейчас о ней говорите?

>на всякий случай, а вдруг можно как-то совместить)

Тоже ясно. Тогда я на всякий случай помолчу.
А то вдруг случайно совмещу несовместимое (очень этого не люблю, когда вкусную селедку запивать вкусным молоком..., такая, знаете ли, бяка начинается)

   
 
 автор: hitball   (12.02.2010 в 17:05)   письмо автору
 
   для: 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>...

   
 
 автор: Trianon   (12.02.2010 в 17:43)   письмо автору
 
   для: hitball   (12.02.2010 в 17:05)
 

Для начала нужно сделать SELECT-запрос к таблице с названиями ингридиентов.

   
 
 автор: hitball   (12.02.2010 в 18:25)   письмо автору
 
   для: 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)); } 

?>

   
 
 автор: Trianon   (12.02.2010 в 18:35)   письмо автору
 
   для: 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);

   
 
 автор: hitball   (12.02.2010 в 18:42)   письмо автору
 
   для: 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 , какие значения полей?


как посмотреть?
var_dump($myrow3);

   
 
 автор: Trianon   (12.02.2010 в 18:45)   письмо автору
 
   для: hitball   (12.02.2010 в 18:42)
 

>как посмотреть?
>
var_dump($myrow3);

поставить его вместо всего вызова printf() - единственным внутри фигурных скобок.


Временно сразу после </p> стоит добавить <pre>
Просто чтобы легче читать было.

   
 
 автор: hitball   (12.02.2010 в 19:03)   письмо автору
 
   для: 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 луковица"



я так понимаю, что мне прийдется подправить все рецепты и делать записи количества ингридиентов непосредственно в описании рецепта, да?

   
 
 автор: Trianon   (12.02.2010 в 19:24)   письмо автору
 
   для: hitball   (12.02.2010 в 19:03)
 

Скорее стоит ввести таблицу единиц измерения units (id, unitname) и изменить таблицу связки, добавив в нее столбик id_unit и столбик qty количества ингредиента.
Тогда в таблице связки получится примерно так
15, 1, 5, 2
15 - рецепт селедки под шубой
1 - ингредиент "Свекла"
5 - единица измерения - Штука (хотя это дикость, мерять свеклу в штуках. Свекла - не яйцо)
2 - количество ( свеклы 1 в рецепте селедки под шубой 15 выраженное в штуках 5)

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


---
Тему стоит завти новую. И писать в нее более аккуратно. Бегать за кнопкой "ответить" уже более чем надоело.

   
 
 автор: hitball   (12.02.2010 в 19:34)   письмо автору
 
   для: Trianon   (12.02.2010 в 19:24)
 

завожу здесь http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=71840&page=1

   
 
 автор: oliss   (12.02.2010 в 15:09)   письмо автору
 
   для: Trianon   (12.02.2010 в 14:56)
 

Моё мнение,вобще не использовать нижнее поле " Картошка ",а выводить все Блюда в которые входят данные ингредиенты ,а пользователь пусть сам выберет какое(какие) Блюдо(а) ему надо.
Это как в жизни :открыл холодильник ,посмотрел, что есть в наличии ,ввёл в форму и получил перечень тех блюд ,что можно приготовить из того что есть в закромах :)))
Можно делать проще, как итальянцы: что нашел дома ,из того и сделал Пиццу ;)

   
 
 автор: hitball   (12.02.2010 в 15:15)   письмо автору
 
   для: oliss   (12.02.2010 в 15:09)
 

да-да! именно это мне и надо)))
только яне понимаю как это не выводить поле???

   
 
 автор: oliss   (12.02.2010 в 15:19)   письмо автору
 
   для: hitball   (12.02.2010 в 15:15)
 

Делаете три таблицы
1 Блюда
2 Ингредиенты
3 Таблица связи [ Блюда-->Ингредиенты ]

   
 
 автор: hitball   (12.02.2010 в 15:21)   письмо автору
 
   для: oliss   (12.02.2010 в 15:19)
 

вы пропустили все мою предыдущую работу) это уже создано 11.02.2010 в 12:48

   
 
 автор: oliss   (12.02.2010 в 15:29)   письмо автору
 
   для: oliss   (12.02.2010 в 15:19)
 

Можно усложнить :
В таблицу Блюда добавить поле Парент
Тогда вывод блюд будет таким:

Напитки
Сок морковный
Коктель Сказка
Сок берёзовый с мякотью
Супы
Суп гороховый
Солянка

и т.п

   
 
 автор: hitball   (12.02.2010 в 15:32)   письмо автору
 
   для: oliss   (12.02.2010 в 15:29)
 

а что делает это поле парент и что в нем содержится?

   
 
 автор: oliss   (12.02.2010 в 16:14)   письмо автору
 
   для: 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  автоинкрементный )

   
 
 автор: Trianon   (12.02.2010 в 16:17)   письмо автору
 
   для: oliss   (12.02.2010 в 16:14)
 

C мякотью - гороховый суп.
А березовую лучше кашу.

Человек обычных-то таблиц не освоил, Вы его уже рекурсивно определяемыми пичкаете.
Заворот кишок обеспечен.

   
 
 автор: Trianon   (12.02.2010 в 15:33)   письмо автору
 
   для: oliss   (12.02.2010 в 15:09)
 

>Моё мнение,вобще не использовать нижнее поле " Картошка ",а выводить все Блюда в которые входят данные ингредиенты ,а пользователь пусть сам выберет какое(какие) Блюдо(а) ему надо.

Я поэтому и спросил, какова форма поискового запроса.
Но тредстартер зазотел по-другому.

>Это как в жизни :открыл холодильник ,посмотрел, что есть в наличии ,ввёл в форму и получил перечень тех блюд ,что можно приготовить из того что есть в закромах :)))

Это очень утилитарный подход

>Можно делать проще, как итальянцы: что нашел дома ,из того и сделал Пиццу ;)

Да. Но если Вы не итальянец/итальянка - с таким подходом можно травануться запросто :)

   
 
 автор: hitball   (12.02.2010 в 15:47)   письмо автору
 
   для: Trianon   (12.02.2010 в 15:33)
 

Trianon, если Вы считаете что по Вашему будет лучше я конечно соглашусь, потому, что вообще плохо представляю как это будет работать и как сделать лучше и удобнее...

   
 
 автор: oliss   (12.02.2010 в 13:09)   письмо автору
 
   для: hitball   (12.02.2010 в 12:04)
 

Посмотрите, как реализована форма поиска продуктов по ингредиентам
http://ivona.bigmir.net/cooking/recipes

   
 
 автор: hitball   (12.02.2010 в 16:26)   письмо автору
 
   для: oliss   (12.02.2010 в 13:09)
 

не заворот кишок, а взрыв мозга)))
может все же обойдемся моими таблицами? которые я уже создала?

   
 
 автор: hitball   (12.02.2010 в 17:20)   письмо автору
 
   для: 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>...

   
 
 автор: oliss   (12.02.2010 в 17:57)   письмо автору
 
   для: hitball   (12.02.2010 в 17:20)
 

Нет не правильно
name="<?php intval($row['id'])?>" /> <?php echo htmlspecialchars($row['word'])?></input >

Не усложняйте жизнь,сделайте чисто форму с чекбоксами и сабмитом, не надо навешивать на неё всякие рюшечки, типа label ,таблиц и т.п ,только чистая форма ,посмотрите,что из неё передаётся постом echo '<pre>' ; print_r($_POST); и двигайтесь дальше ,делайте всё в черновике,а обвешивать разными тегами будите потом.

   
 
 автор: Trianon   (12.02.2010 в 18:25)   письмо автору
 
   для: oliss   (12.02.2010 в 17:57)
 

по поводу htmlspecialchars не могу не поддержать.
Если, конечно, названия хранятся не html-кодом, а обычным текстом.

   
 
 автор: oliss   (12.02.2010 в 17:31)   письмо автору
 
   для: hitball   (12.02.2010 в 16:26)
 

Наверно,лучше создать новую тему ,а то модераторы будут нервничать по поводу количества постов в этой.
И начать с чистого листа т.е из расчёта того, что уже понятно и сделано ,по шагам (сначала структура таблиц (моё мнение, надо изначально делать всё грамотно т.е используя раздел-->категория-->документы) [ таблица с парентом+таблица связи +таблица ингредиентов ]
Создать таблицы
Создать форму с чекбоксами
обработать её
сделать запрос к таблицам
вывести данные

Беритесь за сложное (не бойтесь ,взрыва мозга не произойдёт ;))) ,делайте по пунктам ,если будут ошибки и непонимание, то выкладывайте, что сделали, до того момента ,как появилась ошибка или что не ясно.

   
 
 автор: hitball   (12.02.2010 в 17:36)   письмо автору
 
   для: oliss   (12.02.2010 в 17:31)
 

Смотрите ответ Trianon 12.02.2010 в 15:50

   
 
 автор: hitball   (12.02.2010 в 18:50)   письмо автору
 
   для: hitball   (13.08.2009 в 12:47)
 

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=63568
часть 1

   
Rambler's Top100
вверх

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