Problème avec mon site page à l'infini

Eléphant du PHP | 70 Messages

02 avr. 2008, 12:33

Bonjour à tous,

Voici mon problème , je suis en train de créer monpremier site en php :D et je viens de m'apercevoir que j'avai un problème avec une page. :(
j'ai une url du style www.monsite/article.php?id=UNNOMBRE
Et bien peu importe le nombre que je mette à la fin de l'url, cela m'affiche une page de mon site :shock: mais sans le texte evidemment puisque je fais appel à une base de donnée donc si l'id n'existe pas il n'y a pas de texte mais tout le reste qui est commun à toute les pages s'affiche.

Je souhaiterais que si l'id n'existe pas ce soit une erreur 404 qui s'affiche.

Pouvez-vous m'aider s'il vous plait, je ne sais pas du tout comment régler ce problème

D'avance merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 avr. 2008, 13:07

Je suppose que l'id en question correspond à un enregistrement en base ?

Il te suffit simplement de tester si l'enregistrement existe (par exemple de voir si des données sont retournées lorsque tu fais ton SELECT) et si ce n'est pas le cas de rediriger l'utilisateur où de lui mettre un p'tit mot adéquat :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 70 Messages

02 avr. 2008, 13:23

Merci pour cette réponse rapide.

Pourrais-tu developper un peu cette solution, comment dois-je faire mon SELECT et comment rediriger la personne?

D'avance merci

Eléphant du PHP | 422 Messages

02 avr. 2008, 14:02

Pour générer une page 404, voir header()

Eléphant du PHP | 70 Messages

02 avr. 2008, 16:13

Bonjour,

merci pour cette nouvelle réponse, mais ça ne m'aide pas :(

Je ne comprend toujours pas comment je peux faire pour afficher une erreur 404
Comment verifier si mon ID existe ou pas, s'il n'existe pas comment afficher une page 404

D'avance merci, je suis déséspèré

Eléphant du PHP | 422 Messages

02 avr. 2008, 16:27

1) est-ce que tu sais comment récupérer l'id passé en paramètre de ta page php ?
2) est-ce que tu connais les bases de SQL, la syntaxe d'un ordre SELECT et comment on exécute cet ordre et comment on récupère le résultat en PHP
3) est-ce que tu connais la syntaxe pour faire un test ?

Eléphant du PHP | 70 Messages

02 avr. 2008, 16:45

Bonjour,

voici ce que j'ai fais, code que je place donc en tout tout tout premier dans ma page :

Code : Tout sélectionner

<?php mysql_connect("serveur", "login", "MDP"); // Connexion à MySQL mysql_select_db("basededonnee"); // Sélection de la base $reponse = mysql_query("SELECT * FROM matable WHERE ID='$id'") or die(mysql_error()); // Requête SQL $donnees = mysql_fetch_array($reponse); if (mysql_num_rows($reponse)=='0') { header("HTTP/1.0 404 Not Found"); } ?>
Ca ne marche pas, je ne comprend pas pourquoi.

Merci pour votre aide

Eléphant du PHP | 422 Messages

02 avr. 2008, 17:13

Il faut que tu lises la variable passée dans l'URL et qui se trouve dans un tableau global $_GET
$id = $_GET["id"];
Ensuite, stop avec cette manie de faire des select * pour savoir combien de lignes sont retournées. Il y a un ordre SQL qui s'appelle count et qui est fait pour ça : compter !
$reponse = mysql_query("SELECT count(*) FROM matable WHERE ID='$id'");
$compte = mysql_result($reponse, 0);
if ($compte=='0') { 
   header("HTTP/1.0 404 Not Found"); 
} 

Eléphant du PHP | 70 Messages

02 avr. 2008, 17:39

Ca ne marche pas, :(

Voila ce que j'ai fait :
<?php
mysql_connect("serveur", "Login", "MDP"); // Connexion à MySQL
mysql_select_db("BDD"); // Sélection de la base coursphp

$reponse = mysql_query("SELECT count(*) FROM matable WHERE ID='$id'"); 
$compte = mysql_result($reponse, 0); 

$id = $_GET["id"];

if ($compte=='0') {  
   header("HTTP/1.0 404 Not Found");  
} 
?>
Ca ne m'affiche pas une erreur 404 lorsque je prend un ID qui n'est pas dans ma table

Eléphant du PHP | 422 Messages

02 avr. 2008, 18:04

et si tu essayais d'affecter la valeur à $id AVANT de l'utiliser dans la requête SQL ?

Eléphant du PHP | 70 Messages

02 avr. 2008, 18:05

J'ai également essayé mais ça ne change rien

ViPHP
ViPHP | 4039 Messages

02 avr. 2008, 19:22

J'ai également essayé mais ça ne change rien
Y'a pas a essayer ou pas, ce que pointais caroube, c'est que ça ne peux pas marcher la ou tu le mettais.

Comment veux-tu que php sache quelle valeur attribuer à $id au moment d'effectuer la requête SQL, alors que tu ne lui a pas encore dis ? (y'a une continuité à respecter).

a moins bien sur que j'ai loupé un épisode..

Tout comme, en sql, pas besoin de mettre un nombre entre quotes ('), et pour éviter les mésaventures, tu peux toujours faire un echo sur ta requête pour t'assurer de sa bonne formulation. (echo, c'est l'arme absolue).

quelque chôse de cet ordre-ci:
$id = $_GET["id"];
$sql = "SELECT count(*) FROM matable WHERE ID=".$id;
echo $sql;
$reponse = mysql_query($sql); 
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 70 Messages

02 avr. 2008, 20:41

C'est bon j'ai trouvé, merci à tous pour votre aide :D

Je met le code si ça peu aider un jour quelqu'un d'autre :
<?php 
mysql_connect("serveur", "Login", "MDP"); // Connexion à MySQL 
mysql_select_db("BDD"); // Sélection de la base 

$id = $_GET["id"]; 

$reponse = mysql_query("SELECT count(*) FROM matable WHERE ID='$id'");  
$compte = mysql_result($reponse, 0);  

if ($compte=='0') {   
   header("HTTP/1.0 404 Not Found"); 
   exit ();
}  
?> 
C'est le exit qui permet de faire fonctionner tout ça.

Encore merci à bientôt