Запрос к БД. Нужна помошь! [РЕШЕНИЕ НАЙДЕНО]

Главные вкладки

Аватар пользователя BlackJack BlackJack 19 мая 2009 в 21:34

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

<?php
$result 
db_query('SELECT * FROM `references`');

while (

$item db_fetch_array($result)) {

  if (

$form["name_$item[id]"]['submit']){
  
db_query("UPDATE `references` SET `first`='%s' WHERE `id`='%s'"$form["name_$item[id]"]["a_$item[id]"], $item["id"]);
  
drupal_set_message(t('Your form has been saved.'));
  
  }
  
}
?>

$item["id"] передается, а вот $form["name_$item[id]"]["a_$item[id]"] получить не могу...
подскажите, как правильно их в кавычки засунуть чтоб все переменные передавались?

Комментарии

Аватар пользователя BlackJack BlackJack 19 мая 2009 в 23:03

не, так тоже не заработало.

решил проблему использовав переменные напрямую:

<?php
db_query
('UPDATE `references` SET `first`=\''.$_POST["a_$item[id]"].'\' WHERE `id`='.$item[id].'');
?>

может это не самый лучший способ (скорее всего доп. проверка переменных нужна), но зато работает Smile

Аватар пользователя venom280@drupal.org venom280@drupal.org 20 мая 2009 в 9:01

Не давно закончил читать книгу.
Называется "Защищенный код", изд-во "Microsoft press".
Там вот как раз про такие случаи целый раздел. Когда из-за ошибки сторонний модуль может скомпрометировать целое приложение.
Есть такая вещь sql-injection.
При использовании mysqli можно два запроса в одной строке отправить.
А если в переменной $_POST["a_$item[id]"] окажется "2 WHERE `id`=2; а здесь пойдет запрос хакера; и еще что-то WHERE `id`='.$item[id].'');

Там даже советуют переменные обнулять, после их использования.
И две главы про переполнение буфера, когда входные данные, введенные пользователем не проверяются.
И очень интересные примеры, к чему это приводит. Не думал что такое бывает, но даже в интернет приложениях можно выполнить произвольный код при переполнении буфера.

Аватар пользователя BlackJack BlackJack 13 июня 2009 в 11:44

про sql-injection знаю, спасибо!
в моем случае по-любому проверка переменных нужна, просто не стал писать - вопрос в другом-то был Smile