[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сравнить $_GET со всеми id из дб
Unlikely
Есть таблица в которой есть поле id. В таблице несколько строк.
Как сравнить эти все id с $_GET? blink.gif
Подскажите пожалуйста...



Спустя 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 то строка не выберется и ничего не произойдёт. Вот я и хочу как нибудь это контролировать...

Спустя 3 минуты, 4 секунды (24.05.2010 - 23:55) Unlikely написал(а):
waldicom
И вопросик не по теме, так ради интереса сказать..
В вашем запросе есть (int) что это и для чего? smile.gif

Спустя 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) , и если не пусты - значит существует, в противном случае - не существует!

Спустя 17 минут, 36 секунд (25.05.2010 - 00:29) Unlikely написал(а):
Спасибо всем. if (mysql_num_rows($query) > 0) кажется то что нужно. Сам бы я наверно долго до этого додумывался smile.gif

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

вот так получилось

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}");
}
}

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

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