[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод из БД как избежать ошибок
Страницы: 1, 2
Иван444
Здравствуйте уважаемые форумчане! Подскажите пожалуйста как можно осуществить или где об этом почитать, следующее.

Вот есть сайт http://pinerov.com/#Catalog

Если навести мышкой на какой то товар, то там естественно будет ссылка, на него ведущая.

Например такого вида http://pinerov.com/pinerov-500 т.е. методом GET передается именно тот товар какой мы выбираем (я так думаю)

Получается из БД идет сортировка по каким либо данным переданными в методе GET.(думаю я)

Но получается если какой то негодяй в браузере напишет, что то не то, тогда будет соответственно ошибка. Значит нужно перед этим как то проверить есть ли такой товар в БД , подскажите пожалуйста как можно это сделать, может кто нибудь сталкивался, знает где можно почитать. Я вообще что то додуматься не могу(((



Valick
Цитата
Значит нужно перед этим как то проверить есть ли такой товар в БД

Я всегда говорил, что лучше больше думать, чем делать, но в вашем случае наоборот... перестаньте думать, а просто сделайте запрос к БД и посмотрите есть там этот товар или нет.
Если вы имеете ввиду валидацию данных, то это несколько другой аспект.

_____________
Стимулятор ~yoomoney - 41001303250491
GET
Цитата
Но получается если какой то негодяй в браузере напишет, что то не то, тогда будет соответственно ошибка. Значит нужно перед этим как то проверить есть ли такой товар в БД , подскажите пожалуйста как можно это сделать, может кто нибудь сталкивался, знает где можно почитать. Я вообще что то додуматься не могу(((



Действительно попробуйте сделать запрос, перед тем, как вытащить инфу о товаре, вам же нужно будет проверить есть она там вообще или нет, ну есть ли там такая строка.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Иван444
Цитата (Valick @ 17.11.2013 - 10:13)
Цитата
Значит нужно перед этим как то проверить есть ли такой товар в БД

Я всегда говорил, что лучше больше думать, чем делать, но в вашем случае наоборот... перестаньте думать, а просто сделайте запрос к БД и посмотрите есть там этот товар или нет.
Если вы имеете ввиду валидацию данных, то это несколько другой аспект.

Просто представим, что я делаю такой запрос и методом $_GET кто то ввел что угодно, тогда будет ошибка(я предпологаю), а мне нужно чтобы её не было.

$res = mysqli_query($conn, " SELECT * FROM `название таблицы` WHERE `название товара` = " . $_GET['название товара'] ."" LIMIT 1 ") or exit(mysqli_error());

тема актуальна
Иван444
Цитата (ABC @ 17.11.2013 - 10:22)
Цитата
Но получается если какой то негодяй в браузере напишет, что то не то, тогда будет соответственно ошибка. Значит нужно перед этим как то проверить есть ли такой товар в БД , подскажите пожалуйста как можно это сделать, может кто нибудь сталкивался, знает где можно почитать. Я вообще что то додуматься не могу(((



Действительно попробуйте сделать запрос, перед тем, как вытащить инфу о товаре, вам же нужно будет проверить есть она там вообще или нет, ну есть ли там такая строка.

Поясните пожалуйста чего я не понимаю( sad.gif
GET
Иван444

1. Там внизу есть буковки, код нужно ими обрамлять, чтоб его можно было читать
2. Итак,

$res = mysqli_query($conn,"
SELECT `id`
FROM `product`
WHERE `name` = '"
.mysqli_real_escape_string($conn, $_GET['pinerov-500'])."' LIMIT 1 ") or exit(mysqli_error());


mysqli_real_escape_string - нужна чтоб
Цитата
если какой то негодяй в браузере напишет, что то не то
читаем о ней:
http://php.net/manual/ru/mysqli.real-escape-string.php

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Иван444
Цитата (ABC @ 17.11.2013 - 10:39)
Иван444

1. Там внизу есть буковки, код нужно ими обрамлять, чтоб его можно было читать
2. Итак,

<pre class="sh_sourceCode" rel="php"><span class="sh_variable">$res</span> <span class="sh_symbol">=</span> <span class="sh_function">mysqli_query</span><span class="sh_symbol">(</span><span class="sh_variable">$conn</span><span class="sh_symbol">,</span><span class="sh_string">"
SELECT `id`
FROM `product`
WHERE `name` = '"</span><span class="sh_symbol">.</span><span class="sh_function">mysqli_real_escape_string</span><span class="sh_symbol">(</span><span class="sh_variable">$conn</span><span class="sh_symbol">,</span> <span class="sh_variable">$_GET</span><span class="sh_symbol">[</span><span class="sh_string">'pinerov-500'</span><span class="sh_symbol">]).</span><span class="sh_string">"' LIMIT 1 "</span><span class="sh_symbol">)</span> <span class="sh_keyword">or</span> <span class="sh_function">exit</span><span class="sh_symbol">(</span><span class="sh_function">mysqli_error</span><span class="sh_symbol">());</span> </pre>

mysqli_real_escape_string - нужна чтоб
Цитата
если какой то негодяй в браузере напишет, что то не то

Вот это не понял (1. Там внизу есть буковки, код нужно ими обрамлять, чтоб его можно было читать)

А на счет функции mysqli_real_escape_string , так ведь она просто экранирует спецсимволы, а если человек тот негодяй о котором мы говорим введет просто выдуманное название товара, то при запросе к БД будет ошибка, правильно?

тема актуальна
GET
Цитата
А на счет функции mysqli_real_escape_string , так ведь она просто экранирует спецсимволы, а если человек тот негодяй о котором мы говорим введет просто выдуманной название товара, то при запросе к БД будет ошибка, правильно?


http://php.net/manual/ru/mysqli-result.num-rows.php

Смотри пример №2.

При помощи mysqli_num_rows ты определишь есть ли такая строка, которую запросил юзер, если он негодяй, то просто вернется 0 и ты его отправишь подальше, если строки будут, то он хороший юзер.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
GET
user posted image

biggrin.gif

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Иван444
Цитата (ABC @ 17.11.2013 - 10:59)
user posted image

biggrin.gif

Спасибо большое, а то я тупил не понимая почему так криво происходит с кодом)))
Иван444
Цитата (ABC @ 17.11.2013 - 10:45)
Цитата
А на счет функции mysqli_real_escape_string , так ведь она просто экранирует спецсимволы, а если человек тот негодяй о котором мы говорим введет просто выдуманной название товара, то при запросе к БД будет ошибка, правильно?


http://php.net/manual/ru/mysqli-result.num-rows.php

Смотри пример №2.

При помощи mysqli_num_rows ты определишь есть ли такая строка, которую запросил юзер, если он негодяй, то просто вернется 0 и ты его отправишь подальше, если строки будут, то он хороший юзер.

Посмотрел, но что то не дошло. Расскажу что я увидел. Эта функция mysqli_num_rows как я понял, возвращает количество строк, полученных в результате запроса к БД.

Т.е. сначала все же идет запрос, а потом уже мы проверяем кол-во строк.

А у нас при таком варианте даже первый запрос не пройдет т.к. будет ошибка потому что негодяй в GET напишет какую нибудь гадость, или я чего то не понимаю?(

тема актуальна
GET
Иван444
Чтобы он там не написал...любую гадость, максимум плохого что может произойти это прийти результат в ноль строк.

mysqli_real_escape_string - позаботится, чтоб гадость не навредила. А результат в ноль строк скажет. что такой гадости просто нет в таблице, если хочешь дальше выведи ему на экран:

"По вашему запросу ничего не найдено."

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Иван444
Вот на этом уровне будет уже ошибка правильно? Т.к. в $_GET['pinerov-500'] попадет что то чего нет в БД и из за этого будет ошибка.

$res = mysqli_query($conn,"
SELECT `id`
FROM `product`
WHERE `name` = '"
.mysqli_real_escape_string($conn, $_GET['pinerov-500'])."' LIMIT 1 ") or exit(mysqli_error());



А подсчет строк производится после запроса, т.е. его не будет, или нет?
CoopeR
<?php
$tovar = $_GET['pinerov-500'];
$query = sprintf("SELECT `id` FROM `product`
WHERE `name` = '%s'"
,
mysql_real_escape_string($tovar));
$result = mysql_query($query);

if ($result) {
echo 'ура есть такой товар и выводм результат':
} else {
die('нет такоко товара');
}


_____________
Нажимаю "Мой компьютер"... не моет, сукоо...
Познакомлюсь с девушкой, можно крякнутая версия...
Иван444
Цитата (CoopeR @ 17.11.2013 - 11:42)
<?php
$tovar = $_GET['pinerov-500'];
$query = sprintf("SELECT `id` FROM `product`
WHERE `name` = '%s'"
,
mysql_real_escape_string($tovar));
$result = mysql_query($query);

if ($result) {
echo 'ура есть такой товар и выводм результат':
} else {
die('нет такоко товара');
}

Извини не мог бы ты пояснить что тут происходит, не могу разобраться
Быстрый ответ:

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