Проверка наличия строки из URI в БД

Статус
В этой теме нельзя размещать новые ответы.

kleriks

Постоялец
Заблокирован
Регистрация
3 Июн 2010
Сообщения
108
Реакции
45
  • Автор темы
  • Заблокирован
  • #1
в php не селен.
есть небольшая задача.
Есть запрос к примеру
site.ru/1234567123
помогите найти скрипт который при таком запросе будет проверять наличие 1234567123 в базе mysql
и если есть такое в базе будет давать ответ "ok" если нету то ответ "bad"
 
Один из вариантов проверить наличие таблицы с именем "1234567123" в базе mysql:

PHP:
<?php
$bd_Host='localhost';
$bd_DBName='1234567123';
$bd_User='root';
$bd_Pass='';
if(!$db = mysql_connect($bd_Host, $bd_User, $bd_Pass)) exit("MySQL Error - NoConnect!<br/>");
if(mysql_select_db($bd_DBName, $db)) echo "ok"; else echo "bad";
?>

ВИ: Петька - приборы
П: 10
ВИ: Что 10?
П: А что приборы?
 
  • Автор темы
  • Заблокирован
  • #3
Один из вариантов проверить наличие таблицы с именем "1234567123" в базе mysql:

PHP:
<?php
$bd_Host='localhost';
$bd_DBName='1234567123';
$bd_User='root';
$bd_Pass='';
if(!$db = mysql_connect($bd_Host, $bd_User, $bd_Pass)) exit("MySQL Error - NoConnect!<br/>");
if(mysql_select_db($bd_DBName, $db)) echo "ok"; else echo "bad";
?>

ВИ: Петька - приборы
П: 10
ВИ: Что 10?
П: А что приборы?
а как сделать чтобы он проверял не наличие таблицы с таким названием а наличие записи в таблице.
 
Проверка наличия в БД "tstdb", в таблице "table", записи c полем id = "1234567123"

PHP:
<?php
$bd_Host='localhost';
$bd_DBName='tstdb';
$bd_User='root';
$bd_Pass='';
$test_str='1234567123';
if(!$db = mysql_connect($bd_Host, $bd_User, $bd_Pass)) exit("MySQL Error - NoConnect!<br/>");
if(!mysql_select_db($bd_DBName, $db)) exit("Database Error - NoConnect!<br/>");
mysql_query("SET NAMES 'UTF8'");
$count = mysql_result(mysql_query('SELECT count(1) FROM `table` WHERE `id` = "'.$test_str.'"'), 0);
if ($count>0) echo 'ok'; else 'bad';
?>
 
index.php:
PHP:
<?php
$bd_Host='localhost';
$bd_DBName='tstdb';
$bd_User='root';
$bd_Pass='';
$test_str=$_GET['str'];
if(!$db = mysql_connect($bd_Host, $bd_User, $bd_Pass)) exit("MySQL Error - NoConnect!<br/>");
if(!mysql_select_db($bd_DBName, $db)) exit("Database Error - NoConnect!<br/>");
mysql_query("SET NAMES 'UTF8'");
$count = mysql_result(mysql_query('SELECT count(1) FROM `table` WHERE `id` = "'.$test_str.'"'), 0);
if ($count>0) echo 'ok'; else 'bad';
?>

и туда же .htaccess запихните:
Код:
RewriteEngine On
RewriteRule ^/([0-9]+)(/?)$ index.php?str=$1 [L]


А лучше сразу скрипту передавать:
site.ru/?str=1237012737

И в PHP переменная $_GET['str'] будет равняться 1237012737

И просто так нельзя это всё оставлять на виду. Надо проверки делать или SQL Injection у Вас проведут
 
Последнее редактирование:
PHP:
<?php
$bd_Host='localhost';
$bd_DBName='database';
$bd_User='root';
$bd_Pass='';
if(!$db = mysql_connect($bd_Host, $bd_User, $bd_Pass)) exit("MySQL Error - NoConnect!<br/>");
if(!mysql_select_db($bd_DBName, $db)) exit("Database Error - NoConnect!<br/>");
mysql_query("SET NAMES 'UTF8'");
$uri = $_SERVER['REQUEST_URI']; //получаем URI, который был передан для того, чтобы получить доступ к этой странице. Например, '/index.html'.
mysql_real_escape_string($uri); // экранируем от sql инъекций
$count = mysql_result(mysql_query('SELECT count(1) FROM `table` WHERE `id` = "'.$uri.'"'), 0);
if ($count>0) echo 'ok'; else 'bad';
?>
А вообще, как говорили выше, лучше использовать GET переменные.
site.ru/?param=123456
PHP:
$string = $_GET['param'];
и не забывает экранировать переменные, которые подставляем в запрос:
PHP:
mysql_real_escape_string($string);
 
и не забывает экранировать переменные, которые подставляем в запрос:
PHP:
mysql_real_escape_string($string);

При этом надо понимать, что одно только использование mysql_real_escape_string не является гарантией безопасности.
Достаточно заменить
PHP:
'SELECT count(1) FROM `table` WHERE `id` = "'.$uri.'"'
на
PHP:
'SELECT count(1) FROM `table` WHERE `id` = '.$uri
чтобы получить проблемы с SQL-инъекцией вида Для просмотра ссылки Войди или Зарегистрируйся :)

Такие мелочи иногда пропускают по невнимательности.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху