Допустим на странице index.php, может быть максимум два запроса либо index.php?category=1 или index.php?category=1&id=1.
Как я реализую:
Сначала делаю проверку, потом вывожу. Но что-то мне подсказывает, что это неверное спасение от SQL инъекций.
include 'config.php';
function checked($cat, $id) {
if (!is_numeric($cat)) {
header( 'Refresh: 0; url=/404.html' );
exit(0);
}
$query = mysql_query('SELECT COUNT(*) FROM category WHERE id='.$cat.'');
$pol = mysql_fetch_array($query);
if ($pol[0] == 0) {
header( 'Refresh: 0; url=/404.html' );
exit(0);
}
if ($id > 0) {
if (!is_numeric($id)) {
header( 'Refresh: 0; url=/404.html' );
exit(0);
}
$query = mysql_query('SELECT COUNT(*) FROM materials WHERE id='.$id.' AND id_category='.$cat.'');
$pol = mysql_fetch_array($query);
if ($pol[0] == 0) {
header( 'Refresh: 0; url=/404.html' );
exit(0);
}
}
}
if (empty($_GET['category']) && empty($_GET['id'])) {
//Вывод всех категорий
} else if (isset($_GET['category']) && empty($_GET['id'])) {
checked($_GET['category'], 0);
//Вывод конкретной категории
} else if (isset($_GET['category']) && isset($_GET['id'])) {
checked($_GET['category'], $_GET['id']);
//Вывод конкретного материала
}