PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 23-03-2012 10:37:44

theavengers
Membre
Inscription : 13-10-2009
Messages : 81

Activer une erreur 404 si l'ID est n'existe plus.

Bonjour à tous,

en regardant webmaster tool ce matin, je m'aperçois que j'ai un soucis de 404 manquante...

En fait j'ai des annonces sous cette forme :
http://www.monsite.com/mondossier/monan … hp?id=1112

Mais si une personne supprime cette annonce, l'url est encore bonne (je le pensais :D) puisque je mettais :

 <?php
$_GET['id'] = addslashes ($_GET['id']);

mysql_connect($dbhost,$dblogin,$dbpassword);
mysql_selectdb($dbname);
$result=mysql_query("SELECT * FROM matable WHERE id='".$_GET['id']."' AND valid = 1 ");
mysql_real_escape_string($id);

if ($row=mysql_fetch_array($result)) {
   echo $row["titre"];

} else {
   echo "annonce disparu";
}  mysql_close();
?>

Pareil pour le contenu avec un message, mais google n'apprecie pas.

Donc ma question ,c'est comment renvoyer ou indiquer une 404 si mon "$id" n'existe pas ?

J'ai vu pour l'instant cela :

header("HTTP/1.0 404 Not Found");

Mais j'ai du mal à comprendre le principe... et à l'écrire. Dois je faire un truc dans le genre :


} else {
header("Location: index.php?p=404");  [b]OU header("HTTP/1.0 404 Not Found");[/b]
}  mysql_close();
?>
 

Merci à ceux qui pourront m'éclairer.

PS : je dois finir la guerre des étoiles ;)

Dernière modification par theavengers (23-03-2012 11:02:59)

Hors ligne

#2 23-03-2012 11:05:33

theavengers
Membre
Inscription : 13-10-2009
Messages : 81

Re : Activer une erreur 404 si l'ID est n'existe plus.

J'avance dans mes recherches avec un dernier code trouvé


header("HTTP/1.1 404 Not Found");
echo file_get_contents("lapage404.php");
exit;
 

Hors ligne

#3 23-03-2012 18:56:10

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Activer une erreur 404 si l'ID est n'existe plus.

Bonjour,

Le plus simple est de centraliser la tâche dans un .htaccess et de donner le nom du fichier à afficher lorsqu'une erreur 404 ou autre est rencontrée. C'est aussi un moyen de personnaliser cette page.
Voici comment faire


ErrorDocument 404 /err/404.php
DirectoryIndex index.html index.php /pages/php/404.php
 

Il y a un peu plus d'infos ici que celles requises pour ton 404, mais cela va avec wink

++

Dernière modification par Jc (23-03-2012 18:57:18)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#4 27-03-2012 16:09:34

theavengers
Membre
Inscription : 13-10-2009
Messages : 81

Re : Activer une erreur 404 si l'ID est n'existe plus.

Hello, merci de ta réponse, mais malheureusement, ce n'est pas dynamique à moins que je me trompe.


Mon code ci-dessus renvoi sur ma page 404... mais est toujours considéré comme une erreur par google ... je cherche encore ^^
Le principe que j'ai trouvé sur le net serais ça :


$id = $_GET["id"];
if ((!$id) || (!ereg("^[0-9]+$", $id))) exit404();
function exit404() {
  global $_SERVER;
  header ("HTTP/1.1 404 Not Found");
  include ($_SERVER["DOCUMENT_ROOT"] . "/erreur404.php");
  exit();
}
 

Mais je n'ai pas encore testé, je galère pour l'adapter n'utilisant pas encore les fonctions.

Hors ligne

#5 27-03-2012 17:23:08

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Activer une erreur 404 si l'ID est n'existe plus.

Bonjour

theavengers a écrit :

Hello, merci de ta réponse, mais malheureusement, ce n'est pas dynamique à moins que je me trompe.

Oui tu te trompes mais à moitié wink
En fait le .htaccess redefini ta page 404 par défaut lorsque l'erreur 404 est rencontrée directement au niveau du serveur apache. Et c'est bien automatique. (il faut le mettre dans la racine de ton site). Il est vrai que ce que tu cherches à faire est de générer une erreur 404 lorsqu'il y en a pas. Il te sufit alors d'un simple header("Location:blabla.php"); pour faire l'affaire^^ et tu évites toute faille de sécurité éventuelle que ton script autorise.

Cordialement,

Jean-Christophe

Dernière modification par Jc (27-03-2012 17:24:05)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#6 29-03-2012 09:01:03

theavengers
Membre
Inscription : 13-10-2009
Messages : 81

Re : Activer une erreur 404 si l'ID est n'existe plus.

Merci JC, j'ai déjà effectivement une redirection 404 en htaccess.
Donc si je comprends bien, il me suffit de mettre


    } else {
    header("Location: ../mapage404.php");
    }  mysql_close();
    ?>
 

J'ai du mal à comprendre le header, je suis allez sur le  Manuel php mais je m'embrouille.

Hors ligne

#7 29-03-2012 10:57:08

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Activer une erreur 404 si l'ID est n'existe plus.

theavengers a écrit :
} else {
    header("Location: ../mapage404.php");
    }  mysql_close();
    ?>

J'ai du mal à comprendre le header,...

Et ça se voit, toute instruction PHP qui suit (dans la séquence programmatique) un appel à la fonction header() ne doit jamais s'exécuter. Or c'est le cas ici de ton mysql_close(), par exemple.
Extrait de la doc PHP :

<?php
header("Location: [url=http://www.example.com/\)]http://www.example.com/\")[/url]; /* Redirection du navigateur */

/* Assurez-vous que la suite du code ne soit pas exécutée une fois la redirection effectuée. */
exit;
?>


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#8 29-03-2012 14:28:20

theavengers
Membre
Inscription : 13-10-2009
Messages : 81

Re : Activer une erreur 404 si l'ID est n'existe plus.

Maljuna Kris merci pour ces précisions. Je vais de ce pas modifier mon code,  et revoir la docs php sur le header. Comme tu l'as dit, ça se voit que j'ai du mal big_smile

Hors ligne

#9 29-03-2012 14:33:34

theavengers
Membre
Inscription : 13-10-2009
Messages : 81

Re : Activer une erreur 404 si l'ID est n'existe plus.


mysql_connect($dbhost,$dblogin,$dbpassword);
mysql_selectdb($dbname);
$result=mysql_query("SELECT mesvariables FROM matable WHERE id='".$_GET['id']."' AND valid = 1 ");
mysql_real_escape_string($id);
if ($row=mysql_fetch_array($result)) {
echo '<title>annonce ',$row['titre'],'  site</title>';
} else {
header("Location: ../404.htm");
}  
mysql_close();
?>
 

J'ai testé avec exit et si id existe, j'ai une page blanche ... mais en écrivant ces lignes je viens de comprendre que le exit devrait être dans la condition else si je ne me trompe pas.
C'est fou, chaque fois que je viens ici, j'apprends un peu plus (je ne suis pas un élève assidu et ça se voit...) mais je comprends mieux en expliquant le problème.


mysql_connect($dbhost,$dblogin,$dbpassword);
mysql_selectdb($dbname);
$result=mysql_query("SELECT mesvariables FROM matable WHERE id='".$_GET['id']."' AND valid = 1 ");
mysql_real_escape_string($id);
if ($row=mysql_fetch_array($result)) {
echo '<title>annonce ',$row['titre'],'  site</title>';
} else {
header("Location: ../404.htm");
exit;
}  
mysql_close();
?>
 

Est-ce que ça vous parait correct ?

Dernière modification par theavengers (29-03-2012 14:35:32)

Hors ligne

#10 29-03-2012 15:47:52

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Activer une erreur 404 si l'ID est n'existe plus.

Bonjour,

Je pensais avoir été suffisamment explicite... et visiblement non.
J'en étais à te dire donc, que tu souhaites générer une erreur 404 alors qu'il n'y en a pas.
Or, lorsque tu écris,


header("Location: ../mapage404.php");
 

il est tout à fait normal que la suite de ton code s'éxécute, car ... ta page existe!

Donc quand j'ai écris


header("Location: blabla.php");
 

je pensais que tu avais remarqué à juste titre que je n'ai pas repris le nom de ton fichier mapage404.php (qui lui doit être déclaré dans ton .htaccess) mais un fichier blabla.php ou dit différemment un fichier qui n'existe pas. Ainsi une exception sera levée au niveau d'apache, le code qui suit ne sera pas exécuté, et le fichier 404 mapage404.php sera utilisé et appelé par ton serveur.

++

PS: Pour information, on ne supprime jamais une information en BD! on l'archive wink

Dernière modification par Jc (29-03-2012 15:56:33)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#11 29-03-2012 16:01:35

theavengers
Membre
Inscription : 13-10-2009
Messages : 81

Re : Activer une erreur 404 si l'ID est n'existe plus.

Merci JC d'avoir pris le temps de me mettre les points sur les "i" wink

PS : j'archive régulièrement, surtout depuis que j'ai passé une matinée au commissariat pour une annonce frauduleuse pour laquelle il à fallu que je donne une copie de la bdd.

Hors ligne

Pied de page des forums