GET-параметр страницы

224
11 апреля 2017, 09:33

Возник такой вопрос, у меня страница профиля пользователя определяются GET параметром ( site.com/profile.php?id=1 ) в базе данных содержится таблица user в которую пользователи попадают после регистрации и им присваивается этот самый id. Как сделать, чтоб если запись в базе данных с таким id, то открывало страницу пользователя, а если записи с таким id нет, то открывало страницу 404. За ранее спасибо!

Answer 1
<?php
if(isset($_GET['id']) and is_numeric($_GET['id']))
{
    //тут должно быть подключение к базе данных, если не предусмотрено заранее
    $query = mysql_query("SELECT COUNT(*) FROM `таблица_users` WHERE id='".intval($_GET["id"])."'") or die(mysql_error());
    $count = mysql_fetch_array($query);
    if($count[0] > 0)
    {
        die("<script>location.href='http://site.com/profile.php?id=".$_GET["id"]."'</script>");
    }
    else
    {
        die("<script>location.href='http://site.com/404'</script>");
    }
}
?>

Так или иначе, не забываем про безопасность и обязательно проверяем является ли $_GET["id"] числом или приводим к типу intval($_GET["id"]) перед подстановкой в SQL запрос

Answer 2

А если отключить в браузере Javascript?

<?php
if(isset($_GET['id']) && (int)($_GET['id'])!==0 /*если придет строка в параметре*/   )
{
    //тут должно быть подключение к базе данных, если не предусмотрено заранее
    $query = mysql_query("SELECT COUNT(*) FROM `таблица_users` WHERE id='".intval($_GET["id"])."'") or die(mysql_error());
    $count = mysql_fetch_array($query);
    if($count[0] > 0)
    {
       header( 'Refresh: 0; url=/profile.php?id=".$_GET["id"]' );
    }
    else
    {
        header( 'Refresh: 0; url=/error404.html' );
    }
}
?>
Answer 3

Данные из базы можно получить многими способами, поэтому этот момент пропустим.

Оба соседних ответа предлагают сделать ненужные редиректы. Если для страницы пользователя это ещё можно как-то оправдать, то страница 404 должна иметь статус 404, а не 302/200.

$user_id = isset($_GET['id']) ? (int)$_GET['id'] : false;
$user = $user_id ? getUserDataById($user_id) : false;
if ($user) {
  // Рендерим страницу профиля пользователя include/echo/UserPage::render($user)
?>
<h1><?=htmlspecialchars($user['name'])?></h1>
...
<?php
} else {
  header('404 Not found');
  readfile($_SERVER['DOCUMENT_ROOT'].'/errors/404.html');
  exit();
}
READ ALSO
И вновь про mysql и кириллицу

И вновь про mysql и кириллицу

Имеется БД с параметрами:

270
Сгруппировать значения в массив по ID

Сгруппировать значения в массив по ID

ЗдравствуйтеЕсть таблица с диалогами и сообщениями (обычный ассоциативный запрос)

283
The source attachment does not contain the source for the file

The source attachment does not contain the source for the file

В Eclipse в редакторе кода пытаюсь открыть из своего кода класс драйвера orgpostgresql

237
Передача символов в Netty (Java)

Передача символов в Netty (Java)

ПриветствуюНа сервер передается пакет, с ним буффер строки

267