[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Где-то напутал с типом переменной
paa66
Делаю компонент для Джумлы. В компоненте использую свою БД. Для поиска по своей БД приходится делать собственный поиск. Для этого в файле my.php создал форму для поиска рубрики, подрубрики или товара по фрагменту слова. Вот этот код:
<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)

Проблема где-то тут

$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)
Это для меня непонятно, т.к. новичок в программировании.
Цитата
Проблема где-то тут


$query = "SELECT * FROM #__a_rubric WHERE 'rubric' LIKE '*' & [$search] & '*'";
    $db = &JFactory::getDBO();
    $db->setQuery($query);
    $row = $db->loadAssocList();

У меня точно такой-же запрос к БД есть в другом файле 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) Каретный написал(а):
biggrin.gif

Спустя 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)


вот решилась анологичная ситуация

http://joomlaforum.ru/index.php?topic=116628.0

Спустя 30 минут, 8 секунд (5.02.2012 - 13:03) paa66 написал(а):
Цитата
промониторь его - что он содержит
Промониторил, ничего не выдало.
Цитата
вот решилась анологичная ситуация
Там спецы отрихтовали шаблон :) var_dump($row) показал NULL.
И ещё я попробовал в запрос вместо переменной поставить значение одного из полей вот так:

$query = "SELECT * FROM #__a_rubric WHERE rubric='Автосервис'";
Иными словами, в таблице в поле 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, сделал твою поправку и всё заработало как ни в чём не бывало. Спасибо, не ожидал, что из-за этого такая ерунда. Смущало, что критерием запроса ставил значение поля из таблицы, а результат не возвращался.
Всё, тему можно считать закрытой. Всем спасибо за участие.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.