У меня есть страница-шаблон, в которую добавляются данные согласно сессии. И у неё есть ID страницы. Самый максимальный ID в БД со значением 6, но если я в адресной строке меняю 6 на любое другое значение больше 6. Он шаблон заполняет такими же данными со страницы ID=6, но в адресной строке например ID=40. А если напрямую переходить на страницу с несуществующим ID, то он выводит пустой шаблон.
Для решения этой проблемы, я думаю написать код, который будет проверять значения в БД, и если нету такого значения, принудительно вызывать страницу 404. Но я понимаю, что это дичайший костыль. И не могу понять как это решается на других сайтах.
<?php
session_start();
error_reporting(E_ALL & ~E_NOTICE); //Убираем Notice, а все остальные ошибки выводим
require_once 'connection.php';
$dbh = new PDO('mysql:host=localhost; dbname=projectboard', $user, $pass);
$projectID = $_GET['projectID'];
$stmt = $dbh->prepare('SELECT headline, projectDescription, isRequired, communication, userID, offer FROM projects WHERE projectID = :projectID');
$stmt->bindParam(':projectID', $projectID);
$stmt->execute();
while($result = $stmt->fetch(PDO::FETCH_OBJ)){
$_SESSION['headline'] = $result->headline;
$_SESSION['projectDescription'] = $result->projectDescription;
$_SESSION['isRequired'] = $result->isRequired;
$_SESSION['communication'] = $result->communication;
$_SESSION['userID'] = $result->userID;
$_SESSION['offer'] = $result->offer;
}
?>
<html lang="ru" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="project.css">
<title><?php echo $_SESSION['headline'];?> | Проектная доска</title>
</head>
<body>
<header>
<?php
echo $_SESSION['headline'];
?>
</header>
<section>
<span class="projectDescription">
<?php
echo $_SESSION['projectDescription'];
?>
</span>
<span class="isRequired">
Требуется:
<?php
echo $_SESSION['isRequired'];
?>
</span>
<section class="comAndOffer">
<span class="communication">
Связаться:
<?php
echo $_SESSION['communication'];
?>
</span>
<b>|</b>
<span class="offer">
<?php
echo $_SESSION['offer'];
?>
% от проекта
</span>
</section>
<span class="autor">
Автор:
<?php
$id = $_SESSION['userID'];
$stmt = $dbh->prepare('SELECT name, lastname FROM users WHERE id = :id');
$stmt->bindParam(':id', $id);
$stmt->execute();
while($result = $stmt->fetch(PDO::FETCH_OBJ)){
$_SESSION['name'] = $result->name;
$_SESSION['lastname'] = $result->lastname;
echo '<a href="office.php?id='. $_SESSION['userID'] .'">'. $_SESSION['name'].' '.$_SESSION['lastname'];?></a><br /><?php
}
?>
</span>
<button onclick="document.location='projects.php'">Другие проекты</button>
<form action="" method="post">
<input type="submit" name="delete" class="delete" value="Удалить проект" />
</form>
<?php
if($_SESSION['userID'] == $_SESSION['id']){
if(isset($_POST['delete'])){
$stmt = $dbh->prepare('DELETE FROM projects WHERE projectID = :projectID');
$stmt->bindParam(':projectID', $projectID);
$stmt->execute();
header ('Location: office.php?id='. $_SESSION['id']);
exit;
}
}else{
echo '<script>document.styleSheets[0].insertRule("input, form { display: none; }", 0);</script>';
}
?>
На сколько я понимаю проблемы в $_SESSION.