[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выдать 404 через PHP
Страницы: 1, 2
Аня
Привет всем.Помогите верно настроить 404 ошибку.В таблице БД есть 30 товаров, для вывода отвечает файл view_cat.php?id=n Но если на адресном строку дать id=31,32...N выводит ошибку, что в таблице нет данных.Как настроить, чтобы в это время дал 404.html.Это проблема есть и тогда, когда удаляю одно из товаров. Я начинающий, код написала, но не работает..Хот скажите где ошибка.


if(isset($_GET['id']))
{
$id=$_GET['id'];
}
if(!isset($id))
{
$id=1;
}
if(!preg_match("|^[\d]+$|",$id)){
exit("<p>неверный формат запроса!Проверьте URL");
}
if($id>=1 && $id<=30){

header("HTTP/1.1 404 Not Found");
header("Location: /404.html");
}
// не работает

$rezult11=mysql_query("SELECT * FROM data WHERE id='$id'",$db);
if(!$rezult11){
echo "запрос не выполнено";
exit();
}

if(mysql_num_rows($rezult11) > 0){

$myrow11=mysql_fetch_array($rezult11);

$new_view=$myrow11["view"]+1;
$update=mysql_query("UPDATE data SET view='$new_view' WHERE id='$id'",$db);

}
else{
echo "в таблице нет товари

}

?>
McLotos
require '404.htm';?

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
McLotos
а вообще такое лучше делать в htaccess

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Аня
Цитата (SergeySA @ 13.07.2014 - 23:54)
а вообще такое лучше делать в htaccess

написала
ErrorDocumenrt 404 http://art-trotuar.ru/404.html
Работает хорошо, но не в этом случее.Нужно проверить переменный GET и тогда дать страницу 404.html
Аня
аааа кажется
if(mysql_num_rows($rezult11) > 0){

$myrow11=mysql_fetch_array($rezult11);


}
else{
echo "вот здесь нужно писать require '404.htm';? или что то вроде но ничего не работает sad.gif "

}
sad.gif sad.gif sad.gif
McLotos
Я не совсем понимаю в чем связь между адресами и SQL-запросами?
Ну т.е. 404 нужно включать если пользователь попытался перейти на несуществующую страницу.
Для этого мы проверяем переданные GET параметры, и если в их ошибка тогда ругаемся 404

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
bestxp
Как ты можешь сразу 2 статуса передать?

когда ты передаешь Location автоматически приписывается 301 заголовок, а ты первым отправил 404.

Тебе просто нужно не перенаправлять, а вывести содержимое 404.html
McLotos
bestxp
ну так я это и предложил ещё в первом ответе, но по-моему ТС не понравилась эта идея =)

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Аня
Цитата (SergeySA @ 14.07.2014 - 10:42)
bestxp
ну так я это и предложил ещё в первом ответе, но по-моему ТС не понравилась эта идея =)

Спасибо...Простите, меня понравилась идея, но вчера код не работал,а сегодня урааааа все ок... Вчера была усталим и допистила примитивная ошибка в коде

if(mysql_num_rows($rezult11) > 0){

$myrow11=mysql_fetch_array($rezult11);

}
else{

require '404.html';
}
sergeiss
Позвольте уточню кое-что...

Если задача просто показать юзеру ошибку, то да, достаточно вывести страницу с ошибкой. Но если надо, чтобы именно статус ошибки был передан, то надо вот это возвращать
Цитата (Аня @ 13.07.2014 - 23:41)
header("HTTP/1.1 404 Not Found");
exit();

и в htaccess правильно настроить
Цитата (Аня @ 14.07.2014 - 00:14)
ErrorDocument 404


Те же самые поисковики, например, смотрят возвращаемый код. Поэтому для целей правильного СЕО простой вывод страницы недостаточен.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
McLotos
Цитата (sergeiss @ 14.07.2014 - 11:15)
Поэтому для целей правильного СЕО простой вывод страницы недостаточен.

по-моему ТС ещё рановато об этом думать =)
Хотя да, как я обычно говорю. нужно сразу учиться правильно =)

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Аня
Цитата (sergeiss @ 14.07.2014 - 11:15)
Позвольте уточню кое-что...

Если задача просто показать юзеру ошибку, то да, достаточно вывести страницу с ошибкой. Но если надо, чтобы именно статус ошибки был передан, то надо вот это возвращать
Цитата (Аня @ 13.07.2014 - 23:41)
header("HTTP/1.1 404 Not Found");
exit();

и в htaccess правильно настроить
Цитата (Аня @ 14.07.2014 - 00:14)
ErrorDocument 404


Те же самые поисковики, например, смотрят возвращаемый код. Поэтому для целей правильного СЕО простой вывод страницы недостаточен.

Да я Это и имела виду,потому что будут много дублей,потому что если в таблице нет товаров по данному id, то ПС будет индексировать одинаковый контент- учитывая часть контента, который повторяется всех страницах view_cat.php,я поменяю только цена и картинки -их значении вытаскиваю из БД,если нет такой товар возвращает голый контент smile.gif вот приме я удалила товар id=1 и id=3,которые уже в поиске но у них уже одинаковый голый контент- ВОТ ОТКУДА ВОЗНИК МОЙ ВОПРОС
Аня
Цитата (SergeySA @ 14.07.2014 - 11:25)
Цитата (sergeiss @ 14.07.2014 - 11:15)
Поэтому для целей правильного СЕО простой вывод страницы недостаточен.

по-моему ТС ещё рановато об этом думать =)
Хотя да, как я обычно говорю. нужно сразу учиться правильно =)

Я Cео знаю лучше, чем php, Чтобы бороться дублями пришлось углублятся в коде и выяснить где ошибка.
sergeiss
Тем более, если СЕО знаешь более-менее хорошо, то должна понимать, что простой вывод одинаковой страницы с указанием ошибки "не есть хорошо". С точки зрения поисковиков это будет в чистом виде дублирующийся контент. Ведь в случае простого подключения 404.html через require страница выдается с обычным кодом, а не с 404.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Аня
да я Это понимаю.Ну вот код не хочет работать.Помогите где ошибка??
if(isset($_GET['id']))
{
$id=$_GET['id'];
}
if(!isset($id))
{
$id=4;
}
if(!preg_match("|^[\d]+$|",$id)){
exit("<p>неверный формат запроса!Проверьте URL");
}




$rezult11=mysql_query("SELECT * FROM data WHERE id='$id'",$db);
if(!$rezult11){
echo "oshibka ne vipolnilos zapros"
exit();
}

if(mysql_num_rows($rezult11) > 0){

$myrow11=mysql_fetch_array($rezult11);

$new_view=$myrow11["view"]+1;
$update=mysql_query("UPDATE data SET view='$new_view' WHERE id='$id'",$db);

}
else{

header("HTTP/1.1 404 Not Found");
exit();
}
Быстрый ответ:

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