<form id='form2' name='form2' method='post' action='index.php?option=com_my'>
<input name="search" size=60 value="Введите слово или его часть для поиска рубрики, товара или услуги" type="varchar" id="ret" />
<input type='submit' name='Submit' color='black' value='Найти' />
</form>
Далее в этом же файле с помощью switch case я подключаю разные файлы в зависимости от полученных переменных. В том числе для переменной $search, которую я получаю из формы (см. код выше), я подключаю файл search.php. Вот код этого файла:
<?php
defined('_JEXEC') or die('Restricted access');
$document = JFactory::getDocument();
$document->addStylesheet('components/com_my/my.css', 'text/css', null, $attribs);
if(JRequest::getVar('search')) {
$search = JRequest::getVar('search');
}
print $search;
$query = "SELECT * FROM #__a_rubric WHERE 'rubric' LIKE '*' & [$search] & '*'";
$db = &JFactory::getDBO();
$db->setQuery($query);
$row = $db->loadAssocList();
foreach($row as $rubric) {
?>
<div class=t onmouseover="this.className='classHover'" onmouseout="this.className='class'">
<?php
echo (" <br /><p>
<font size=4> $rubric[rubric]</font></p> <br /> </div>\n");
?><br /><?php
}
?>
Не обращайте внимание на количество знаков '*' & возле переменной $search, это для того, чтобы поиск осуществлялся по фрагменту введённого слова в поле поиска. Я уже пробовал убирать эти знаки и менял LIKE на =, всё без толку. Обратите внимание на
print $search;, это я сделал для того, чтобы знать получает ли файл значение переменной $search, потом я эту строку уберу. Ошибку выдаёт в строке
print $search;: Invalid argument supplied for foreach(). В MySQL в таблице #__a_rubric поле rubric имеет тип данных varchar.
Спустя 23 минуты, 37 секунд (5.02.2012 - 09:17) Каретный написал(а):
Версия Joomla,
что содержиться в $row ? var_dump($row)
Проблема где-то тут
что содержиться в $row ? var_dump($row)
Проблема где-то тут
$query = "SELECT * FROM #__a_rubric WHERE 'rubric' LIKE '*' & [$search] & '*'";
$db = &JFactory::getDBO();
$db->setQuery($query);
$row = $db->loadAssocList();
Спустя 10 минут, 56 секунд (5.02.2012 - 09:28) paa66 написал(а):
Joomla 1.5.9.
Цитата |
что содержиться в $row ? |
$row - массив, содержащий все данные таблицы #__a_rubric.
Цитата |
var_dump($row) |
Это для меня непонятно, т.к. новичок в программировании.
Цитата |
Проблема где-то тут
|
У меня точно такой-же запрос к БД есть в другом файле PHP, там всё работает, но там я значение переменной передаю методом GET.
Если убрать из запроса WHERE 'rubric' LIKE '*' & [$search] & '*', то всё работает нормально, выводятся на экран все данные поля rubric таблицы #__a_rubric. :(
Спустя 32 минуты, 32 секунды (5.02.2012 - 10:00) nugle написал(а):
потому что данная комбинация WHERE 'rubric' LIKE '*' & [$search] & '*' делает поиск по базе, смотри нужно оно тебе или нет
Цитата |
Это для меня непонятно, т.к. новичок в программировании. |
А гугл для чего придумали? var_dump выводит то,что храниться в переменной или в массиве, как в данном примере.
Спустя 8 минут, 48 секунд (5.02.2012 - 10:09) johniek_comp написал(а):
defined('_JEXEC') or die('Restricted access');
$document = JFactory::getDocument();
$document->addStylesheet('components/com_my/my.css', 'text/css', null, $attribs);
if(JRequest::getVar('search')) {
$search = JRequest::getVar('search');
}
echo $search;
$query = "SELECT * FROM #__a_rubric WHERE 'rubric' LIKE '*' & [$search] & '*'";
$db = &JFactory::getDBO();
$db->setQuery($query);
$row = $db->loadAssocList();
foreach($row as $rubric) {
?>
<div class=t onmouseover="this.className='classHover'" onmouseout="this.className='class'"><br /><p>
<font size=4><?=$rubric['rubric']?></font></p> <br /> </div>\n<br />
<?}?>
если не заработает значить дело в запросе, попробуй выполни запрос отдельно и напиши
or die (mysql_error());
Спустя 2 минуты, 18 секунд (5.02.2012 - 10:11) Игорь_Vasinsky написал(а):
Свернутый текст
Открываем wiki и внимательно читаем про <font size=4>
Спустя 2 минуты, 21 секунда (5.02.2012 - 10:14) nugle написал(а):
Игорь_Vasinsky
ну и что там читать? обычный тег)
ну и что там читать? обычный тег)
Спустя 7 минут, 42 секунды (5.02.2012 - 10:22) Игорь_Vasinsky написал(а):
Цитата |
В версии HTML 4.0 произошла некоторая «очистка» стандарта. Многие элементы были отмечены как устаревшие и нерекомендованные (англ. deprecated). В частности, элемент font, используемый для изменения свойств шрифта, был помечен как устаревший (вместо него рекомендуется использовать таблицы |
вместо тега <font> уже давно используют <span>
учимся писать валидным HTML
Спустя 1 минута, 55 секунд (5.02.2012 - 10:23) Каретный написал(а):
Спустя 17 минут, 4 секунды (5.02.2012 - 10:41) nugle написал(а):
Игорь_Vasinsky
мне как-то все равно, я им никогда даже и не пользовался)
мне как-то все равно, я им никогда даже и не пользовался)
Спустя 1 час, 37 минут, 31 секунда (5.02.2012 - 12:18) paa66 написал(а):
Цитата |
вместо тега <font> уже давно используют <span> учимся писать валидным HTML |
Я уже говорил, что убрав WERE и т.д. результат выдаётся в виде всех значений поля rubric таблицы #__a_rubric. Убрал я этот фонт, без толку. Я пока был на улице, подумал, что на самом деле в поле формы я ввожу переменную типа string, а поле rubric таблицы #__a_rubric у меня varchar, поэтому запрашивается поле varchar равным переменной типа string и получается ошибка. Значит надо конвертировать переменную из string в varchar или тип поля таблицы изменить на varchar. Хотя с какой стати переменная должна быть типа string, ведь я указал в форме тип varchar?
Спустя 5 минут, 17 секунд (5.02.2012 - 12:23) Игорь_Vasinsky написал(а):
Цитата |
Убрал я этот фонт, без толку. |
:lol:
это и не было решением твоей проблемы....
по видимому твой $row не является массивом, а является либо ресурсом либо объектом
$row = $db->loadAssocList();
промониторь его - что он содержит
$db = &JFactory::getDBO();
$db->setQuery($query);
$row = $db->loadAssocList();
echo '<pre>' . print_r($row, 1) . '</pre>';
Спустя 1 минута, 16 секунд (5.02.2012 - 12:25) Игорь_Vasinsky написал(а):
Цитата |
Я пока был на улице, подумал, что на самом деле в поле формы я ввожу переменную типа string, а поле rubric таблицы #__a_rubric у меня varchar, поэтому запрашивается поле varchar равным переменной типа string и получается ошибка. Значит надо конвертировать переменную из string в varchar или тип поля таблицы изменить на varchar. Хотя с какой стати переменная должна быть типа string, ведь я указал в форме тип varchar? |
мало был....
Спустя 7 минут, 53 секунды (5.02.2012 - 12:32) Игорь_Vasinsky написал(а):
и кстати те в самом начале уже сказали
Цитата |
что содержиться в $row ? var_dump($row) |
Спустя 30 минут, 8 секунд (5.02.2012 - 13:03) paa66 написал(а):
Цитата |
промониторь его - что он содержит |
Промониторил, ничего не выдало.
Цитата |
вот решилась анологичная ситуация |
Там спецы отрихтовали шаблон :) var_dump($row) показал NULL.
И ещё я попробовал в запрос вместо переменной поставить значение одного из полей вот так:
И ещё я попробовал в запрос вместо переменной поставить значение одного из полей вот так:
Иными словами, в таблице в поле rubric есть значение "Автосервис", которое я выбрал в качестве критерия отбора. Так мне запрос в БД не выдал результата.
$query = "SELECT * FROM #__a_rubric WHERE rubric='Автосервис'";
Цитата |
вот решилась анологичная ситуация |
Я сейчас скачаю оба шаблона (исходник и исправленный), посмотрю какие изменения в коде произошли. М.б. у меня такая же ошибка.
Спустя 7 минут, 7 секунд (5.02.2012 - 13:10) paa66 написал(а):
Цитата |
потому что данная комбинация WHERE 'rubric' LIKE '*' & [$search] & '*' делает поиск по базе, смотри нужно оно тебе или нет |
В запросе ведь указано SELECT * FROM #__a_rubric, поэтому поиск будет именно в указанной таблице, а не в БД.
Спустя 36 минут, 15 секунд (5.02.2012 - 13:46) killer8080 написал(а):
paa66
а что это за конструкция ?
Пропиши нормально
а что это за конструкция ?
LIKE '*' & [$search] & '*'
Пропиши нормально
$query = "SELECT * FROM #__a_rubric WHERE 'rubric' LIKE '%".$search."%'";
Спустя 13 минут, 17 секунд (5.02.2012 - 13:59) paa66 написал(а):
Цитата |
Пропиши нормально$query = "SELECT * FROM #__a_rubric WHERE 'rubric' LIKE '%".$search."%'"; |
Т.е., если в поле поиска я внесу авто, то мне будут возвращены все строки поля, которые содержат это буквосочетание (автосервис, автомасла и т.д.)?
Спустя 7 минут, 53 секунды (5.02.2012 - 14:07) paa66 написал(а):
killer8080, сделал твою поправку и всё заработало как ни в чём не бывало. Спасибо, не ожидал, что из-за этого такая ерунда. Смущало, что критерием запроса ставил значение поля из таблицы, а результат не возвращался.
Всё, тему можно считать закрытой. Всем спасибо за участие.
Всё, тему можно считать закрытой. Всем спасибо за участие.