2016-02-26 2 views
-1

Я создал простой любительский компонент в Joomla ...Ошибка SQL или что-то еще?

В нем есть раскрывающийся список выбора select>, который добавляет параметры в URL.

Проблема заключалась в том, что она не работала с значением 1.1, и она работает с значением 1,5.

Мой друг исправил проблему, но я хочу знать, почему это произошло

Оригинал запроса:

$query = "SELECT * FROM `TABLE 2` WHERE Power='".$_GET["Power"]."' AND Poles='".$_GET["Poles"]."'"; 

Новый рабочий запрос:

$query = "SELECT * FROM `TABLE 2` WHERE Power=".floatval($_GET["Power"])." AND Poles='".$_GET["Poles"]."'"; 
+1

Ваши запросы, склонных к атакам SQL-инъекции. Это риск для безопасности. См. Http://php.net/manual/en/security.database.sql-injection.php для получения дополнительной информации. – skidr0w

+0

Что мне делать, чтобы избежать этого? –

ответ

0

Если вы используете Joomla, вы должны действительно придерживаться стандартов кодирования и методов для всего Joomla, это включает в себя запросы к базе данных:

https://docs.joomla.org/Selecting_data_using_JDatabase

Вы также должны использовать JInput вместо $_POST или $_GET звонки:

http://docs.joomla.org/Retrieving_request_data_using_JInput

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

$db = JFactory::getDbo(); 
$input = JFactory::getApplication()->input; 

$power = $input->get('Power', '', 'RAW'); 
$polls = $input->get('Pols', '', 'RAW'); 

$query = $db->getQuery(true); 

$query->select($db->qn(array('*'))) 
     ->from($db->qn('#__table')) 
     ->where($db->qn('Power') . ' = ' . $db->q($power), 'AND') 
     ->where($db->qn('Polls') . ' = ' . $db->q($polls)); 

$db->setQuery($query); 

$results = $db->loadObjectList(); 

// Do what you want with the $results object 

Используя это означает, что имена столбцов и значение данных экранированы, и вы не остались уязвимости SQL как @ skidr0w упоминаются.

Примечание:#__ является префикс таблицы базы данных, если вы следовали этому подходу. Если нет, просто замените #__table на полное имя вашей таблицы

+0

Какое замечательное объяснение! Большое спасибо за терпение! –

+0

Неустранимая ошибка: вызов функции-члена get() для не-объекта в public_html/components/com_helloworld/views/dsql/tmpl/default.php в строке 4 –

+0

@TeodorBochev - К сожалению, извините.Обновлен мой ответ – Lodder

0

Таблица, колонка Мощность имеет тип float или double. В первом запросе вы пытаетесь вставить строковое значение. Второй запрос вставляет правильный float, сначала забрасывая значение запроса для float и удаляя кавычки вокруг значения.

Кстати, вы никогда не использовали бы нефильтрованный пользовательский ввод (например, значения $ _GET) в SQL-запросе.

-1

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

Простое удаление «-знак решена проблема

Power='".$_GET["Power"]."' 

с

Power=".$_GET["Power"]." 

С уважением

Смежные вопросы