Page 404 personnalisée

Thoomas
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 20
Inscription: 14 Fév 2010

Page 404 personnalisée

Message le Lun Fév 15, 2010 18:40

Bonjour,

Quand un visiteur entre un lien incorrect comme monsite.com/indexx.php au lieu de monsite.com/index.php, il arrive sur une page 404 qu'il est possible de configurer.

Mais comment faire, pour créer aussi une page erreur 404 quand le paramètre d'un lien est incorrect, par exemple si monsite.com/page.php?page=la_page n'existe pas mais page.php existe.

Car, cette technique permettrait d'éviter aux hackers de mettre des paramètres "bidons" (injections SQL...) pour hacker le site (enfin je pense, contredisez moi si c'est le cas).

Merci d'avance,
Thomas.


forty
WRInaute passionné
WRInaute passionné
 
Messages: 1595
Inscription: 30 Oct 2008

Re: Page 404 personnalisée

Message le Lun Fév 15, 2010 22:39

il faut le faire en php :
Code: Tout sélectionner
//if (...) { //rien dans la table pour $_GET['page']
      header('Status: 404 Not Found', true, 404);
      include(dirname(__FILE__) . '/erreur404.php');  // la page 404 personnalisée
      exit;
}


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3884
Inscription: 16 Nov 2004

Re: Page 404 personnalisée

Message le Lun Fév 15, 2010 22:41

je complete le IF de Forty :)

Code: Tout sélectionner
<?php
        $q = mysql_query("SELECT * FROM table WHERE la_page='$la_page' ");
    if (($r = mysql_fetch_array($q)) === false) {
        header('Status: 301 Moved Permanently', false, 301);
        header('Location: ' . url_erreur());
        exit;
    }
?>


Julia41
WRInaute passionné
WRInaute passionné
 
Messages: 1734
Inscription: 31 Aoû 2007

Re: Page 404 personnalisée

Message le Lun Fév 15, 2010 23:00

Ouais enfin bon, le faire par SQL est un peu se compliquer la vie pour rien
Code: Tout sélectionner
if (isset($_GET['page'])) {
$page = trim($_GET['page']);
} else {
$page = 'defaut';
switch ($page) {
case 'un': require_once('ce_que_tu_veux_un.php');
break;
case 'deux': require_once('ce_que_tu_veux_deux.php');
break;
case 'defaut': require_once('ta_page_par_defaut');
break;
default:
require_once('ton_template_404.php');
}


Pas checké la structure mais c'est la technique la plus simple.
Et renvoyer il faut renvoyer un 4** pas un 3** sinon ce n'est pas un code erreur.

Thoomas
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 20
Inscription: 14 Fév 2010

Re: Page 404 personnalisée

Message le Mar Fév 16, 2010 12:12

forty a écrit:il faut le faire en php :
Code: Tout sélectionner
//if (...) { //rien dans la table pour $_GET['page']
      header('Status: 404 Not Found', true, 404);
      include(dirname(__FILE__) . '/erreur404.php');  // la page 404 personnalisée
      exit;
}


KOogar a écrit:je complete le IF de Forty :)

Code: Tout sélectionner
<?php
        $q = mysql_query("SELECT * FROM table WHERE la_page='$la_page' ");
    if (($r = mysql_fetch_array($q)) === false) {
        header('Status: 301 Moved Permanently', false, 301);
        header('Location: ' . url_erreur());
        exit;
    }
?>


Merci pour votre aide.


Quelques questions :
Il y a vraiment 3 "=" (===) ou tu en as mis un de trop ? :)
Le statut faudrait le passer en 404 non ?
Je met ça juste après mon </head> ?

Julia41 a écrit:Ouais enfin bon, le faire par SQL est un peu se compliquer la vie pour rien
Code: Tout sélectionner
if (isset($_GET['page'])) {
$page = trim($_GET['page']);
} else {
$page = 'defaut';
switch ($page) {
case 'un': require_once('ce_que_tu_veux_un.php');
break;
case 'deux': require_once('ce_que_tu_veux_deux.php');
break;
case 'defaut': require_once('ta_page_par_defaut');
break;
default:
require_once('ton_template_404.php');
}


Pas checké la structure mais c'est la technique la plus simple.
Et renvoyer il faut renvoyer un 4** pas un 3** sinon ce n'est pas un code erreur.


Je n'ai pas trop compris ce que tu veux faire ici, comment sais tu que la valeur du paramètre n'existe pas avec ce code ?


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3884
Inscription: 16 Nov 2004

Re: Page 404 personnalisée

Message le Mar Fév 16, 2010 13:11

les 3 signes d'égalité sont correcte. La fonction retourne des entiers et si la valeur n'est pas trouvé elle retourne un booléen

$a == $b Egal TRUE si $a est égal à $b
$a === $b Identique TRUE si $a est égal à $b et qu'ils sont de même type

j'ai mixer les 2 codes

Code: Tout sélectionner
<?php
     $q = mysql_query(" SELECT *
                        FROM table
                        WHERE la_page='".$_GET['la_page']."'
                       ");

     if (($r = mysql_fetch_array($q)) === false ) {
      header('Status: 404 Not Found', true, 404);
      include(dirname(__FILE__) . '/erreur404.php'); // la page 404 personnalisée
      exit;
     }

?>
Dernière édition par KOogar le Mar Fév 16, 2010 13:18, édité 2 fois.


OTP
Modérateur
Modérateur
 
Messages: 19361
Inscription: 16 Déc 2005

Re: Page 404 personnalisée

Message le Mar Fév 16, 2010 13:12

KOogar a écrit:les 3 signes d'égalité sont correcte car la fonction retourne des entiers et si la valeur est trouvé elle retourne un booléen

$a == $b Egal TRUE si $a est égal à $b
$a === $b Identique TRUE si $a est égal à $b et qu'ils sont de même type


HS : merci, j'aurais appris quelque chose aujourd'hui !

Thoomas
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 20
Inscription: 14 Fév 2010

Re: Page 404 personnalisée

Message le Mar Fév 16, 2010 13:39

@Koogar : J'ai ajouté entre mes balises <head> le code suivant :

Code: Tout sélectionner
<?php
     $q = mysql_query(" SELECT *
                        FROM ma_table
                        WHERE lien='".$_GET['lien']."'
                       ");

     if (($r = mysql_fetch_array($q)) === false ) {
      header('Status: 404 Not Found', true, 404);
      include(dirname(__FILE__) . '/page404.php'); // la page 404 personnalisée
      exit;
     }

?>


Si je passe un mauvais paramètre, j'ai l'erreur suivante qui boucle à l'infinie :
Code: Tout sélectionner
Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files\EasyPHP5.3.0\www\site\entete.php:4) in C:\Program Files\EasyPHP5.3.0\www\site\entete.php on line 112


forty
WRInaute passionné
WRInaute passionné
 
Messages: 1595
Inscription: 30 Oct 2008

Re: Page 404 personnalisée

Message le Mar Fév 16, 2010 13:51

l'envoi d'un entête http avec la fonction header doit être faite avant tout envoi de texte (y compris avant des espaces). Il faut donc le mettre avant ton code html.

Thoomas
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 20
Inscription: 14 Fév 2010

Re: Page 404 personnalisée

Message le Mar Fév 16, 2010 14:04

Merci j'ai mis ça à la toute première ligne. Cependant j'ai un autre problème (ils s'enchainent définitivement) :

Code: Tout sélectionner
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 261900 bytes) in C:\Program Files\EasyPHP5.3.0\www\site\entete.php on line 1


Ça me parait bizarre qu'il y ait un dépassement de mémoire...


Bacteries
WRInaute passionné
WRInaute passionné
 
Messages: 1369
Inscription: 27 Mai 2004

Re: Page 404 personnalisée

Message le Mar Fév 16, 2010 14:36

Boucle infini?


forty
WRInaute passionné
WRInaute passionné
 
Messages: 1595
Inscription: 30 Oct 2008

Re: Page 404 personnalisée

Message le Mar Fév 16, 2010 14:55

tu as peut-être un include d'un script qui contient lui même un include de entete.php

il faut peut-être que tu déplaces ton traitement au début de page.php

Thoomas
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 20
Inscription: 14 Fév 2010

Re: Page 404 personnalisée

Message le Mar Fév 16, 2010 17:39

Bah c'est au début. Avant je fais un include pour la connexion à la base mysql et je fais une requête pour récupérer les infos de la page. Je ne peux pas mettre ce code plus haut !

Thoomas
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 20
Inscription: 14 Fév 2010

Re: Page 404 personnalisée

Message le Mar Fév 16, 2010 18:58

C'est bon problème résolu, merci ;) !


Taranis
WRInaute impliqué
WRInaute impliqué
 
Messages: 601
Inscription: 11 Aoû 2006

Re: Page 404 personnalisée

Message le Mar Fév 16, 2010 19:08

Thoomas a écrit:C'est bon problème résolu, merci ;) !

Je suis sûr qu'il y en a pas mal qui aimeraient bien connaître la solution du problème résolu... Merci pour eux d'avance :wink: .

Page 404 personnalisée

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : Page d'accueil personnalisée de Google

  • Test HTTP header
    Cet outil vous permet de connaître le code HTTP renvoyé par le serveur pour une page donnée.
  • Calcul d'indice de densité
    Cet outil vous permet de calculer l'indice de densité d'un mot-clé d'une page web. Il est calculé à la fois pour la balise TITLE, la balise META description et l'ensemble du texte de la page.
  • Calcul du taux de liens vers des pages internes
    Cet outil vous permet de calculer le taux de liens profonds vers un site web. Un lien profond est un lien qui ne pointe pas vers la page d'accueil mais au contraire vers une page interne du site. Les sites dont l'essentiel du référencement vient de leurs inscriptions dans des annuaires ont un taux de liens profonds faible ; à l'inverse, les sites de référence ont souvent un taux de liens profonds plus important, signe que leur contenu a suscité de nombreux liens spontanés.


Qui est en ligne

Utilisateurs parcourant ce forum: Google Adsense [Bot] et 3 invités