[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с обработкой post_а
Single
HTML
<?php
echo '<table border=0><tr>
<td><form action="poisk.php" method="post">
Год:</td><td><SELECT NAME="date">
<OPTION VALUE=2008>2008
<OPTION VALUE=2009>2009
</SELECT></td><td>Специальность:</td><td><SELECT NAME="spec">
<OPTION VALUE=1>Техника
<OPTION VALUE=2>Програмирование
</SELECT></td><td>Образование:</td><td><SELECT NAME="kl">
<OPTION VALUE=9>9 классов
<OPTION VALUE=11>11 классов
</SELECT></td>
<td colspan="2"><center><input type="submit" title="Отправить запрос">
</form></td></tr><table></center></td></tr></table>
';
?>

эту форму заполняем и отправляем данные на poisk.php, и тут проблема

PHP
<?
$mm2 имя базы->query('SELECT * FROM spec WHERE date = 2009 and spec = 2 and kl = 9');

так все работает а если я начинаю вставлять переменные

PHP
<?
$date $_POST['date'];
$spec $_POST['spec']; 
$kl $_POST['kl']; 
$mm2 имя базы->query('SELECT * FROM spec WHERE date = $date and spec = $spec and kl = $kl');

ничего не находит, помогите



Спустя 18 минут, 57 секунд (13.07.2009 - 10:40) waldicom написал(а):
Имена полей в обратные кавычки (`), переменные или за кавычки или использовать двойные кавычки вместо одинарных

Спустя 11 минут, 47 секунд (13.07.2009 - 10:52) Single написал(а):
Спасибо больщое помогло

Спустя 4 минуты, 42 секунды (13.07.2009 - 10:57) waldicom написал(а):
И не забудь обезопасить приходящие из вне переменные.

Спустя 10 минут, 17 секунд (13.07.2009 - 11:07) Nikitian написал(а):
Для всех переменных, которые не являются результатами вычислений, используейте функцию mysql_real_escape_string()

Спустя 5 минут, 17 секунд (13.07.2009 - 11:12) waldicom написал(а):
Цитата (Nikitian @ 13.07.2009 - 10:07)
Для всех переменных, которые не являются результатами вычислений, используейте функцию mysql_real_escape_string()

Этого достаточно, чтобы предотвратить SQL-Injection?

Спустя 2 часа, 57 минут, 33 секунды (13.07.2009 - 14:10) Nikitian написал(а):
Через переменную, которая вводится в запрос после обработки функцией mysql_real_escape_string() ввести инъекцию нельзя, если эта переменная заключена в кавычки. Вообще рекомендую не только строковые параметры, а вообще все заключать в кавычки, т.к. иначе в примерно такой код будет вставлена инъекция:
PHP
mysql_query('delete from table_posts where id='.mysql_real_escape_string($_POST['id']));

Тут достаточно переменную $_POST['id'] сделать равной "1 or 1=1" и это будет равносильно truncate table_posts.
Ситуация вымышленная, но что-то мне подсказывает, что очень вероятная ph34r.gif

P.S. Также советую не пренебрегать оператором limit во всех запросах, где вы точно знаете количество затронутых записей, например как здесь если планируется удалить только одну запись, то лимит будет полезен wink.gif

Спустя 16 минут, 3 секунды (13.07.2009 - 14:26) waldicom написал(а):
Хм, как минимум знаю одну ситуацию, где только mysql_real_escape_string() не поможет.

Спустя 6 минут, 37 секунд (13.07.2009 - 14:33) Nikitian написал(а):
Цитата (waldicom @ 13.07.2009 - 11:26)
Хм, как минимум знаю одну ситуацию, где только mysql_real_escape_string() не поможет.

Уши слона в студию!

Всмысле, делитесь познаниями. Мне в голову только одна ситуация пришла - её и описал.

Спустя 11 минут, 49 секунд (13.07.2009 - 14:44) waldicom написал(а):
Просто выполнить такой скриптик:

PHP
$id = "1 union select 1,2 from /*";

$query = "select * from dual where id = " . $id;
echo $query . '<br />';

$query = "select * from dual where id = " . mysql_real_escape_string($id);
echo $query . '<br />';

$query = "select * from dual where id = " . (int)$id;
echo $query . '<br />';

Спустя 10 минут, 13 секунд (13.07.2009 - 14:55) Nikitian написал(а):
Что-то вы напутали. Смысл кавычки в начале строки никакой, т.к. mysql_real_escape_string() её экранирует, что вполне резонно вызывает ошибку
Цитата
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''\' union select 1,2 from /*' at line 1
Это для второго случая. Остальные не вижу смысла рассматривать.

Спустя 5 минут, 8 секунд (13.07.2009 - 15:00) waldicom написал(а):
Сообщение выше я подправил (сначала неправильно написал, так как навскидку писал)

Спустя 12 минут, 40 секунд (13.07.2009 - 15:13) Nikitian написал(а):
Ну а данную ситуацию я несколькими постами выше приводил. tongue.gif Смысл в том, что необходимо использовать кавычки для всех типов данных, а не только для строковых.
Хотя вариант с intval() и подобными приведениями к нужному виду тоже имеет право на существование, всё же лучше писать ошибку, чем пытаться найти хоть что-то по заведомо неверному запросу.

P.S. Сам часто использую приведение, т.к. сила привычки - код пишется на автомате.

Спустя 14 минут, 28 секунд (13.07.2009 - 15:27) waldicom написал(а):
Цитата (Nikitian @ 13.07.2009 - 14:13)
Ну а данную ситуацию я несколькими постами выше приводил. tongue.gif Смысл в том, что необходимо использовать кавычки для всех типов данных, а не только для строковых.
Хотя вариант с intval() и подобными приведениями к нужному виду тоже имеет право на существование, всё же лучше писать ошибку, чем пытаться найти хоть что-то по заведомо неверному запросу.

P.S. Сам часто использую приведение, т.к. сила привычки - код пишется на автомате.

Так ведь если смотреть со стороны семантики, то как раз таки ошибка - писать числовые поля с кавычками. MySQL конечно их приведет к нужному виду, но как бы теоретически это не правильно. Хотя я понимаю, что теория - это не практика.

Спустя 2 дня, 23 часа, 38 минут, 12 секунд (16.07.2009 - 15:05) Single написал(а):
Опять я туплю наверно, но

SQL
mysql_query ("insert into `priem_o` values('030000','Гуманитарные науки','1','25','8','26','5');") or die("Не возможно добавить данные в таблицу Priem");

работает, а

SQL
$zaliv = $_POST['zaliv'];
mysql_query ("$zaliv") or die("Не возможно добавить данные в таблицу Priem");


не работает, я передаю теже данные какая ему разница insert into `priem_o` values('030000','Гуманитарные науки','1','25','8','26','5');

Спустя 5 дней, 20 часов, 36 минут, 37 секунд (22.07.2009 - 11:42) Neospark написал(а):
PHP
<center>
<
form method="POST" action="index.php?pg=send">
<
p><input type="text" name="title" size=48></p>
<
p><textarea rows=4 name="desccols"=41></textarea></p>
<
p><input type=submit value=Ok><input type=reset value=No></p>
</
form>
<? 
@
mysql_connect("localhost","rest","447965") or die("Нет соединения с сервером");
@
mysql_select_db("rest") or die("Нет соединения с базой данных");
mysql_query("INSERT news VALUES ('$title,$desccols')");
mysql_close();

Не получается отправить в базу информациюиз формы.
В чем проблема?



Быстрый ответ:

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