Как сравнить эти все id с $_GET?

Подскажите пожалуйста...
Спустя 3 минуты, 11 секунд (24.05.2010 - 23:41) waldicom написал(а):
Для чего сравнить? Если выбрать id, равный полученному значению из $_GET, то можно сделать так:
$query = "select * from `table` where id = " . (int) $_GET['id']
Спустя 11 минут, 4 секунды (24.05.2010 - 23:52) Unlikely написал(а):
waldicom
Сравнивать хочу для того, что бы пользователь не мог вбить в $_GET id которого у меня в таблице нету. А то получается, что у меня допустим есть 2 id 1,2. И если $_GET['id'] = 1 то выбирается строка где id = 1. А если $_GET['id'] = 3 то строка не выберется и ничего не произойдёт. Вот я и хочу как нибудь это контролировать...
Сравнивать хочу для того, что бы пользователь не мог вбить в $_GET id которого у меня в таблице нету. А то получается, что у меня допустим есть 2 id 1,2. И если $_GET['id'] = 1 то выбирается строка где id = 1. А если $_GET['id'] = 3 то строка не выберется и ничего не произойдёт. Вот я и хочу как нибудь это контролировать...
Спустя 3 минуты, 4 секунды (24.05.2010 - 23:55) Unlikely написал(а):
waldicom
И вопросик не по теме, так ради интереса сказать..
В вашем запросе есть (int) что это и для чего?
И вопросик не по теме, так ради интереса сказать..
В вашем запросе есть (int) что это и для чего?

Спустя 13 минут, 14 секунд (25.05.2010 - 00:08) waldicom написал(а):
Цитата (Unlikely @ 24.05.2010 - 22:52) |
Сравнивать хочу для того, что бы пользователь не мог вбить в $_GET id которого у меня в таблице нету. А то получается, что у меня допустим есть 2 id 1,2. И если $_GET['id'] = 1 то выбирается строка где id = 1. А если $_GET['id'] = 3 то строка не выберется и ничего не произойдёт. Вот я и хочу как нибудь это контролировать... |
В данном случае контролировать нет особого смысла, потомк что, даже если пользователь задаст id, которого не существует, то он ничего и не получит. Но если уж очень хочется сделать, то надо выбрать все id в массив и потом задействовать функцию in_array()
Цитата (Unlikely @ 24.05.2010 - 22:55) |
В вашем запросе есть (int) что это и для чего? smile.gif |
Это сделано для предотвращения sql injection (нападение на базу данных). Работает тогда, когда поле id имеет целочисленный тип
Спустя 2 минуты, 16 секунд (25.05.2010 - 00:10) phz написал(а):
$query = "select * from `table` where id = " . (int) $_GET['id']
if (mysql_num_rows($query) > 0)
{
$row = mysql_fetch_assoc($query);
} else {
# если id такого нет в таблице делайте сообщение или 404 ошибку
}
int - от SQL-инъекции. Литеральные константы обрамлять апострофами и обрабатывать функцией mysql_real_escape_string() непосредственно в самом запросе.
Целочисленные данные лучше приводить в соответствие функцией intval() или языковой конструкцией (int), что в принципе одно и тоже.
уп... waldicom первея написал. пардон
Спустя 1 минута, 19 секунд (25.05.2010 - 00:12) inpost написал(а):
Из данной переменной берется только числовое значение:
$_GET['id'] = 1'+union+order....
(int)$_GER['id'] - будет равен 1, для борьбы sql-иньекциями (остальная часть вырезацется, причем вся, что стоит после первого числа).
Делаешь запрос, как написал Валди, проверяешь, пусты ли параменты (или mysql_num_rows > 0) , и если не пусты - значит существует, в противном случае - не существует!
$_GET['id'] = 1'+union+order....
(int)$_GER['id'] - будет равен 1, для борьбы sql-иньекциями (остальная часть вырезацется, причем вся, что стоит после первого числа).
Делаешь запрос, как написал Валди, проверяешь, пусты ли параменты (или mysql_num_rows > 0) , и если не пусты - значит существует, в противном случае - не существует!
Спустя 17 минут, 36 секунд (25.05.2010 - 00:29) Unlikely написал(а):
Спасибо всем. if (mysql_num_rows($query) > 0) кажется то что нужно. Сам бы я наверно долго до этого додумывался

Спустя 10 минут, 16 секунд (25.05.2010 - 00:39) Unlikely написал(а):
На счёт (int) тоже учёл, добавил где надо 
вот так получилось

вот так получилось
if(isset($_GET['posts'])) {
$single_post_result = mysql_query("SELECT title, description, keywords, full_text, date FROM `posts` WHERE `id` = '".(int) $_GET['posts']."' AND `visible` = '1' LIMIT 0 , 1", $connection);
$querycounter++;
if(mysql_num_rows($single_post_result) > 0) {
$single_post_row = mysql_fetch_assoc($single_post_result);
$title = "{$single_post_row['title']} - Unlikely Блог";
$description = $single_post_row['description'];
$keywords = "{$single_post_row['keywords']}{$SITE_KEYWORDS}";
}
else {
header("Location: {$SITE_URL}");
}
}