Всем привет! Пишу от неизбежности - не могу разобраться как правильно составить запрос к БД в моем случае.
Создал свой модуль, а вот данные сохранить не получается... Хэлп мии!
<?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]"] получить не могу...
подскажите, как правильно их в кавычки засунуть чтоб все переменные передавались?
Комментарии
Может $form["name_$item['id']"]["a_$item['id']"]
неа
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
<?php $form["name_{$item['id']}"]["a_{$item['id']}"] ?>
не, так тоже не заработало.
решил проблему использовав переменные напрямую:
<?php
db_query('UPDATE `references` SET `first`=\''.$_POST["a_$item[id]"].'\' WHERE `id`='.$item[id].'');
?>
может это не самый лучший способ (скорее всего доп. проверка переменных нужна), но зато работает
Не давно закончил читать книгу.
Называется "Защищенный код", изд-во "Microsoft press".
Там вот как раз про такие случаи целый раздел. Когда из-за ошибки сторонний модуль может скомпрометировать целое приложение.
Есть такая вещь sql-injection.
При использовании mysqli можно два запроса в одной строке отправить.
А если в переменной $_POST["a_$item[id]"] окажется "2 WHERE `id`=2; а здесь пойдет запрос хакера; и еще что-то WHERE `id`='.$item[id].'');
Там даже советуют переменные обнулять, после их использования.
И две главы про переполнение буфера, когда входные данные, введенные пользователем не проверяются.
И очень интересные примеры, к чему это приводит. Не думал что такое бывает, но даже в интернет приложениях можно выполнить произвольный код при переполнении буфера.
про sql-injection знаю, спасибо!
в моем случае по-любому проверка переменных нужна, просто не стал писать - вопрос в другом-то был