Вывод результатов на страницу, требуется поддержка =)

santamel

Новичок
Вообщем, задача такая:

1) Пользователь вводит в обычный инпут форму название товара
PHP:
<form action='index.php' method='post'>
Начните поиск: <input type='text' name='qsearch' size='60' maxlength='60' id='qsearch'>
<input type='submit' class='bsearch' value='Поехали!'>
<input type='hidden' name='task' value='dosearch'>
<div class='primer'>Как искать? Например: <u>Samsung RV520</u></DIV>
</form>
2) Запрос обрабатывается скриптом на сервере:
PHP:
$qsearch = $_POST['qsearch'];
$task = $_POST['dosearch'];

if ($task == 'dosearch'){
$query = $db->query("SELECT itemname, price, shop_id FROM items WHERE itemname LIKE '%$qsearch%'");
$arr = $db->get_row($query);}
Сообственно как обработать запрос учитывая то, что один и тот же товар может быть в разных магазинах, а после обработки еще нужно получить данные о магазине по его ID

В добавок я использую шаблонизатор Smarty там есть функция {foreach} может кто подскажет пособ реализации через нее...

Рассчитываю на поддержку спецов, так как сам только неделю изучаю PHP и SQL опыта нет в таких вещах. Все чего я сам добился, что выводится результат, все вроде хорошо, но выводит лишь для одного магазина, а мне надо что бы несколько резутатов
 

С.

Продвинутый новичок
Можешь объяснить, что делает данная строка?
$arr = $db->get_row($query);
 

santamel

Новичок
Строчка собирает результат запроса в ассоциативный массив, после чего к каждому элементу в массиве можно будет обратится с помощью $price = $arr[price'];
 

С.

Продвинутый новичок
Ответ неточный. Зайдем с другой стороны. Как можно перевести фразу "get_row"?
 

santamel

Новичок
перевести ее можно как: взять строку в которой SQL запрос. Но суть не в этом. я могу использовать вместо get_row хоть vozmi_stroku это лишь название функции в классе работы с mySQL

Меня интерсует как организовать вывод.
 

С.

Продвинутый новичок
Дело именно в этом! Ты не понимаешь, что делает данная функция. Она действительно берет строку (ОДНУ строку) из резуьтатов запроса. А этих строк там может быть несколько.
 

santamel

Новичок
функция get_row возвращает mysql_fetch_assoc - как я понимая ассоциативный массив. Я так же могу возпользваться функцией get_array которая в свою очередь вернет mysql_fetch_array

Мне посоветовали выводить обрабатывать результат с помощью while($db->get_row($query)){и вот тут пишем что надо делать}, то есть пока существует запрос делать что-то. Как этим пользоваться я не особо понял.

Вчера пробывал вывести результат запроса методами Smarty. Попробывал {foreach} и {section} - все они мне выводили результат 1 строки из базы. Так оно и должно быть, но как теперь заставить выводить остальные строки.
 

santamel

Новичок
c0dex, большое спасибо! Очень наглядный пример, я наконец-то доехал что нужно делать дальше =)) Могу я рассчитывать на Вашу помощь в других вопросах?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Спрашивай, если что - поможем.
 

santamel

Новичок
Следующий вопрос свзянный с предыдущим:

Есть код:
PHP:
$query = $db->query("SELECT `id`, `title` FROM news");
$news_array = $db->get_row($query);
$tpl->assign('news_array', $news_array);

while ($news_array = $db->get_row($query)){echo "<a href='/news_view.php?news_id=".$news_array['id']." '>".$news_array['title']."</a>";}
Выше цикл, как подсказад мне кодекс. Он выводи ссылку вида <a href='news_view.php?news_id={НОМЕР НОВОСТИ}'>Название новости</a>
Сложность в том, что я использую Quiky и что бы вывести результат цикла на старницу его надо как-то рпеобразовать в переменную
Я пробывал сделать так:

PHP:
while ($news_array = $db->get_row($query)){$NEWS =  "<a href='/news_view.php?news_id=".$news_array['id']." '>".$news_array['title']."</a>";}
Но вывод переменной ожидаемого результата не дал. Если бы я использовал просто php страницу, то я был бы доволен выводимым результатом, однеако есть куча CMS в которых новости на страницу выводяться благополучно.
Подскажите пожалуйста, как вывести массив на страницу используя Smarty(Quiky)?

PHP:
Мои попытка закончились на этом: 
{foreach from=$news_array name=new}
Как тут вывести тоже самой что я вывожу циклом while
{/foreach}
Подскажите пожалуйста, 3 ночь сижу немогу сделать, уже сделал страницу которая выводит полную новость news_view.php, а вывод всех новостей не могу осилить
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
<a href='/news_view.php?news_id={$new.id}'>{$new.title}</a>
 

santamel

Новичок
Попробывал, получил два егора

Notice: Undefined index: new in \application\compiler\templates_c\news.tpl.905225.php on line 90

Notice: Undefined index: new in \application\compiler\templates_c\news.tpl.905225.php on line 90
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Блин, почему я за тебя должен идти в ман Smarty и смотреть там как выводится в этом шаблонном говнодвижке массив в цикле?)))

Ну нет там ничего кардинально отличающегося от foreach(){} в php.

{foreach from=$array item="newspost"}
{$newspost.id}
{/foreach}
 

santamel

Новичок
PHP:
{foreach from=$news_array item=new} 
<a href='/news_view.php?news_id={$news_array.id}'>{$news_array.title}</a><br>
{/foreach}
Попробывал так, выводит 2 раза одну и туже строку, то есть дважды воводит значение поля title, а надо вывести по порядку названия всех новостей...
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
santamel
Ты сделал в скрипте $smarty->assign('array', $array);

В шаблоне выводишь так, как написал я, выведется тебе только Id каждой записи, далее допиливаешь по аналогии на те поля, что тебе надо.
 

santamel

Новичок
PHP:
$query = $db->query("SELECT `id`, `title` FROM news");
$news_array = $db->get_row($query);
$tpl->assign('array', $news_array);
Да сделал, в результате получил первую букву поля id, title
 

santamel

Новичок
Так как вы написали, выводит вот что: "1 Д"
1 - это поле id
Д - это первая буква из поля title
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Боже ж ты мой, сначала разберись как получить все данные запроса, целый массив с несколькими строчками, а не запихнуть одну первую строку в переменную смарти. Пойми как это делается. Дальше переходи уже к выводу в смарти. Присвоив переменной ПОЛНЫЙ набор полученных данных.
 

santamel

Новичок
Вообщем все, тему можно всем новичкам Smarty и Quiky читать.
Решение мое проблемы такое:

В php скрипте пишем:
PHP:
//Забираем из базы нужные нам поля
$query = $db->query("SELECT `title` FROM news");
//Создаем цикл
while ($news_array = $db->get_row($query)) 
{$rows[]=$news_array;}//Готовим массив для смарти в который запишем значения $news_array = $db->get_row($query)

//Передаем массив как переменную Smarty обработчику.
$tpl->assign('rows', $rows);
Теперь в вашем шаблоне например news.tpl пишем:
PHP:
{foreach from=$rows item=row}          
<a href='news_view.php?news_id={$row.id}'>{$row.title}</a> <br />
 {/foreach}

//from=$rows - указываем по какому массиву надо пробежаться
//item=row - создаем предмет обращения
//{$row.id} - вывод значения полей производиться по их названию, т.е. из базы забирали поля title, date, author по ним и обращаемся $row.date, $row.author
Работает, проверено!
 
Сверху