[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как предотвратить вывод ошибки в php
m4a1fox
Добрый день уважаемые эксперты. Вот стало интересно есть вот такой запрос
http://www.mysite.com/page.php?ind=1'

То есть если добавить после запроса апостроф выдается ошибка
Ошибка -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 ''1''' at line 3

Ошибка как бы понятна. Но вопрос. Как убрать этот вывод ошибки? Спасибо.



Спустя 12 минут, 34 секунды (28.03.2011 - 14:22) Basili4 написал(а):
m4a1fox
Это дружище не вывод ошидки убирать надо это тебе надо дырку в безопасности убрать чистый SQL-inj

Спустя 6 минут, 13 секунд (28.03.2011 - 14:28) inpost написал(а):
m4a1fox
Какой параметр ты должен получить через GET? Integer или String или Array ?

Спустя 33 минуты, 48 секунд (28.03.2011 - 15:02) m4a1fox написал(а):
Basili4
inpost
Вот как это выводится
<a href=page.php?ind='.(int)$ind['id'].'>

Спустя 3 минуты, 18 секунд (28.03.2011 - 15:05) m4a1fox написал(а):
Вот так это применяется
$ind = isset($_GET['ind']) ? (int)$_GET['ind'] : 0;

$result = mysql_query("SELECT * FROM menu WHERE id=".(int)$ind) or die(mysql_error());

Спустя 4 минуты, 32 секунды (28.03.2011 - 15:10) Basili4 написал(а):
m4a1fox
и не так. Не чего хакерам ошибки сайта показывать

Спустя 50 секунд (28.03.2011 - 15:10) m4a1fox написал(а):
Basili4
Так как закрыть эту ошибку?

Спустя 53 секунды (28.03.2011 - 15:11) m4a1fox написал(а):
Может статьи о безопасности посоветуете, с удовольствием почитаю...

Спустя 9 минут, 29 секунд (28.03.2011 - 15:21) Invis1ble написал(а):
m4a1fox
А я че-то не понял, что-то ты тут недоговариваешь, так сказать:
1.
Цитата
Ошибка -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 ''1''' at line 3

и
Цитата
Вот так это применяется
$ind = isset($_GET['ind']) ? (int)$_GET['ind'] : 0;

$result = mysql_query("SELECT * FROM menu WHERE id=".(int)$ind) or die(mysql_error());

Где у тебя тут 3-я строка в запросе?
2. Опять же, в тексте ошибки видно, что в запрос попадают апострофы, а в запросе у тебя явно integer указывается....

Спустя 1 минута, 36 секунд (28.03.2011 - 15:22) m4a1fox написал(а):
Invis1ble
Вот собственно по этому и спрашиваю.

Спустя 59 секунд (28.03.2011 - 15:23) m4a1fox написал(а):
Invis1ble
В запросе указано что запрашиваю int. Но тем не менее если добавить апостроф - появляется вот такая ошибка. Поэтому хочу понять, почему она появляется.

Спустя 21 секунда (28.03.2011 - 15:24) Invis1ble написал(а):
Нет, это я спрашиваю, почему ты показываешь запрос не тот, в котором ошибка выдается =)

Спустя 3 минуты, 50 секунд (28.03.2011 - 15:28) m4a1fox написал(а):
Invis1ble
Сейчас. Начинаю судорожно соображать....

Спустя 2 минуты (28.03.2011 - 15:30) m4a1fox написал(а):
Таксь.... этот запрос формируется по нажатию на одну из кнопок меню. Вот код вывода самой меню из БД

<a href="./page.php?ind='.(int)$ind['id'].'">
'.$img.' '.$ind['name'].'
</a>

Спустя 52 секунды (28.03.2011 - 15:30) m4a1fox написал(а):
Цитата
Нет, это я спрашиваю, почему ты показываешь запрос не тот, в котором ошибка выдается =)

Я показал обработчик запроса.

Спустя 3 минуты, 32 секунды (28.03.2011 - 15:34) Invis1ble написал(а):
Вобщем, это примерно так делается:
$ind = isset($_GET['ind']) ? intval($_GET['ind']) : null;

if ($ind !== null)
{
$query =
'SELECT *
FROM `menu`
WHERE `id` = '
. $ind;

$result = mysql_query($query) or die(mysql_error());

if (mysql_num_rows($res) > 0)
{
// все норм
}
}

Попробуй.

Спустя 51 секунда (28.03.2011 - 15:35) m4a1fox написал(а):
Invis1ble
Сейчас попробую... отпишусь.

Спустя 4 минуты, 10 секунд (28.03.2011 - 15:39) m4a1fox написал(а):
Invis1ble
Таксь. Вот полный запрос
$ind = isset($_GET['ind']) ? intval($_GET['ind']) : null;
if ($ind !== null)
{
$result = mysql_query("SELECT * FROM `menu` WHERE id=".(int)$ind) or die(mysql_error());
if(!$result)
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_assoc($result);
}
else
{
$error = 'Упс! Нет такой странички.';
}
}


Но тем не менее он выводит ошибку
Ошибка -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 ''1''' at line 3

Спустя 3 минуты, 48 секунд (28.03.2011 - 15:43) m4a1fox написал(а):
Invis1ble
Таксь. Вот полный запрос
$ind = isset($_GET['ind']) ? intval($_GET['ind']) : null;
if ($ind !== null)
{
$result = mysql_query("SELECT * FROM `menu` WHERE id=".(int)$ind) or die(mysql_error());
if(!$result)
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_assoc($result);
}
else
{
$error = 'Упс! Нет такой странички.';
}
}


Но тем не менее он выводит ошибку
Ошибка -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 ''1''' at line 3

Спустя 1 минута, 27 секунд (28.03.2011 - 15:44) m4a1fox написал(а):
Invis1ble
Разобрался. Спасибо. Ошибка была в другом запросе. Извините, что мозг попарил Вам.

Спустя 2 минуты, 4 секунды (28.03.2011 - 15:46) Invis1ble написал(а):
m4a1fox
Ну а я сразу тебе написал:
Цитата
Нет, это я спрашиваю, почему ты показываешь запрос не тот, в котором ошибка выдается =)

smile.gif

Спустя 8 минут, 2 секунды (28.03.2011 - 15:54) m4a1fox написал(а):
Invis1ble
Та да. Тупанул. Надо повнемательнее быть.

Спустя 12 минут, 24 секунды (28.03.2011 - 16:07) inpost написал(а):
m4a1fox
Что в ошибке значит: at line 3, ответь прям тут!

Спустя 1 час, 47 минут, 28 секунд (28.03.2011 - 17:54) m4a1fox написал(а):
inpost
Что ошибка в запросе на выводе на 3 линии.

Спустя 2 минуты, 25 секунд (28.03.2011 - 17:57) m4a1fox написал(а):
inpost
Да я понимаю к чему вы клоните. Что в том запросе что я здесь выводил, не было 3 линии, поэтому нужно было сразу понять что это не этот запрос, и не в нем ошибка, а другой.

Спустя 9 минут, 29 секунд (28.03.2011 - 18:06) Invis1ble написал(а):
совершенно верно

Спустя 12 минут, 20 секунд (28.03.2011 - 18:18) m4a1fox написал(а):
Так. Поехали дальше:) Как быть с числами - это понятно. Но как быть со строками?

Спустя 6 минут, 21 секунда (28.03.2011 - 18:25) m4a1fox написал(а):
Может регулярка?

Спустя 34 секунды (28.03.2011 - 18:25) Invis1ble написал(а):
Что значит "как быть" ? Вот так:
mysql_real_escape_string($value);

Спустя 7 минут, 31 секунда (28.03.2011 - 18:33) m4a1fox написал(а):
Invis1ble
Да точно... спасибо. Что-то сегодня туплю...:)
{
$error = 'Упс. Нет такой странички!';
}
[/php]
Попытаюсь объяснить вопрос. Как бы все просто. Проверяем, выбираем, если ничего не выбрано то условие
if (mysql_num_rows($result_author) > 0)
не выполняется, значит
else
{
$error = 'Упс. Нет такой странички!';
}

это условие должно выполнятся. Но не выполняется:(

Спустя 4 минуты, 53 секунды (28.03.2011 - 18:38) Invis1ble написал(а):
Не понял, какой блок не выполняется? И могу тебя удивить, но: если не выполняется, значит условие не true wink.gif Значит выясняй, почему оно не true

Спустя 16 минут, 15 секунд (28.03.2011 - 18:54) m4a1fox написал(а):
Invis1ble
Не не. Все нормально. Что-то комп тупанул. Я стирал часть с вопросом. В общем все нормально. Спасибо что помогли.
Быстрый ответ:

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