PHP: управление URL $ _GET мастеринг - PullRequest
1 голос
/ 25 октября 2010

Вот ситуация, у меня есть список заявок в службу поддержки, когда вы нажимаете на заголовок заявки, вы переходите на страницу, где более подробно отображается заявка.Если использовать URL GET переменные для запроса базы данных.Я принял во внимание SQL-инъекцию, но что если кто-то изменит URL-адрес на идентификатор, который не существует?Какой лучший способ справиться с этим?

Спасибо,

Джонси

Ответы [ 5 ]

5 голосов
/ 25 октября 2010

Если идентификатор не существует, отправьте заголовок 404 - Не найдено вместе с приятной страницей с сообщением об ошибке, что он не был найден.

3 голосов
/ 25 октября 2010

В любом случае вам, вероятно, придется создать страницу, обрабатывающую неудачные поиски;просто направь его туда.Затем вы можете помочь пользователю найти то, что он ищет в согласованном порядке, предоставить подсказки и «наиболее популярные», а что нет.

1 голос
/ 25 октября 2010

Вы должны всегда проверять, возвращал ли ваш запрос что-либо. Если он вернул 0 строк, идентификатор не существует.

<?php

$result = mysql_db_query("your query", $link);
$num_rows = mysql_num_rows($result);

if($num_rows < 1) {
  // row with that id doesnt exist
  // do whatever you want
} elseif($num_rows > 1) {
  // you have problem with your ids in db
} else {
  // everything went fine
  // do your thing here
}

?>
1 голос
/ 25 октября 2010

Это может показаться слишком простым, но вы всегда должны проверять свою переменную GET (или POST), прежде чем что-либо делать с ними.В вашем случае просто убедитесь, что идентификатор существует в базе данных.Если это не так, сообщите пользователю.

0 голосов
/ 25 октября 2010

Проверьте, существует ли билет; если нет, отреагируйте соответственно. Что означает «реагировать соответственно», определяется вашей бизнес-логикой: создать новый тикет? поднять ошибку? принять пользователя к списку доступных билетов?

Пример использования старого расширения mysql для краткости:

$sanitized_numeric_id = (int) $_GET['ticket_id']; // assuming id is numeric
$query_resource = mysql_query('SELECT `somecolumn`, `column2`, `othercolumn` 
                                  FROM `tickets`
                                  WHERE `id`= ' . $sanitized_numeric_id);
if (mysql_num_rows($query_resource) > 0) {
    // the ticket exists, do something with it
} else {
    // the ticket doesn't exist, react accordingly
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...