Bonjour, tout d'abord merci à Grafikart pour tous ces tutos qui me permettent d'apprendre à créer mon site.
Pour l'instant, j'y arrivé tout seul, mais là je bute sur un problème que je n'arrive pas à résoudre.
Je suis en train de suivre le tuto sur "gérer mes news". Je bloque au moment de créer mon fichier edit.php et suppr.php.
En effet j'ai décomposer mon site comme dans le tuto "Décomposer son site 2". J'ai donc toutes mes pages dans /pages avec la variable $pages sur ma page principale et en début de page
if(!isset($_GET"p"])){ $_GET"p"]="index"; }
if(!file_exists("pages/".$_GET"p"].".php")){ $_GET"p"]="404"; }
ob_start();
include "pages/".$_GET"p"].".php";
$pages = ob_get_contents();
ob_end_clean();
?>
Et dans mon htaccess j'ai
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
ErrorDocument 404 /404.html
RewriteRule ^(.*)\.html$ index.php?p=$1 [L]
donc toutes mes pages appelées en /pages/index.php passe en index.html.
Seulement lorsque j'écris le code du tuto suivant
<?php
mysql_connect("","","");
mysql_select_db("news");
$sql = "SELECT * FROM news";
$req = mysql_query($sql) or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
while($data=mysql_fetch_assoc($req)){
echo "<p>{$data"titre"]} -- ";
echo "<a href=\"edit.php?id={$data"id"]}\">Modifier cette news</a>";
echo " -- <a href=\"suppr.php?id={$data"id"]}\">x</a>";
echo " -- ".date("j/n/Y G:i",strtotime($data"date"]))."</p>";
}
?>
et que je veuille supprimer une news, j'ai une erreur 404.
je comprends bien que cela doit venir de la réécriture de mon adresse par rapport au htaccess.
J'ai essayé de transformé mon suppr.php?id={$data"id"]} en suppr.html?id={$data"id"]}, cela ne marche pas évidemment(trop simple ^^^), cela
me mets l'erreur :
Erreur SQL !
DELETE FROM news WHERE id=
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
J'ai essayé de changer mon htaccess mais là c'est tout le site qui ne fonctionne plus;
Je vous remercie de votre aide, car je galère un peu et ce n'est pas faute d'avoir essayer.
Pascal
En fait, en transformant tes URL en .html tu étais sur la bonne voie, il te manquait juste la transmission des paramètres.
En faisant edit.html?id=X, tu étais bien redirigé sur ta page edit.php sauf que le paramètre id était perdu en chemin. Le flag QSA (pour Query String Append) à la fin du RewriteRule permet de transmettre les paramètres lors de la redirection. En PHP, le Query String est tout ce qui vient après le point d'interrogation dans une URL. C'est le $_GET en gros.
Sans le QSA, Apache redirigeait edit.html?id=X vers index.php?p=edit&id= => C'est pour ça que tu avais une erreur SQL. Ton erreur te disait en fait que tu n'avais rien qui s'affichait après "id="
Avec le QSA, Apache redirige edit.html?id=X vers index.php?p=edit&id=X
Je sais pas trop si c'est clair, c'est pas trop évident à expliquer xD
Salut,
La première solution qui me viendrait comme ça, ce serait de rajouter une condition dans le htaccess, qui lui dirait de ne pas rediriger si la variable "SCRIPT_FILENAME" contient soit "suppr.php" soit "edit.php"
Garde tes liens en suppr.php?id=X et edit.php?id=X évidemment.
En gros, ça donnerait qqch comme ça :
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !\/(suppr|edit)\.php
ErrorDocument 404 /404.html
RewriteRule ^(.*)\.html$ index.php?p=$1 [L]
Je ne garantie pas que ça marche, je ne connais pas l'effet que peut avoir le ErrorDocument.
Mais essaie déjà ça, et dis moi ce que ça fait.
Salut, je te remercie de ta réponse Havok,
Je viens d'essayer ton code mais j'ai toujours mon erreur 404.
Mon lien qui apparait dans le navigateur est
http://www.monsite.fr/edit.php?id=23 alors que normalement il devrait être sans le RewriteRule http://www.monsite.fr/pages/edit.php?id=23
Merci de ton aide
Ok, j'ai une question.
Avec ton htaccess indiqué dans ton premier post, lorsque tu clique sur ton lien en .php?id=X, tu as cette erreur SQL :
Erreur SQL !
DELETE FROM news WHERE id=
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Si oui à cette question, essaie ce code en htaccess (en gros, c'est le tien, avec une petite modif) :
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
ErrorDocument 404 /404.html
RewriteRule ^(.*)\.html$ index.php?p=$1 [QSA, L]
Pas sûr que ça marche non plus...
Non c'est lorsque que je mets comme adresse .html?id=X que j'ai cette erreur SQL.
Lorsque que je mets .php?id=X j'ai une erreur 404.
Pour info je viens d'essayer tout de même ton code et j'ai eu une "500 Internal Server Error" sur tout le site.
Ok, autre essai xD
Mets tes liens de manière à avoir l'erreur SQL (en .html?id=X donc) et enlève l'espace avant le L dans le dernier htaccess que je t'ai suggéré.
RewriteRule ^(.*)\.html$ index.php?p=$1 [QSA,L]
Un grand merci pour ton aide, cela fonctionne maintenant !!!!!
Pourrais-tu m'expliquer stp le pourquoi comment de mon erreur.
Cela me servira certainement plus tard pour d'autre situation.
En tout cas merci de ton aide, en espérant t'être utile à mon tour prochainement,
(a priori vu mon niveau cela m'étonnerait ^^^^ mais bon on ne sait jamais !!)
Si si tu as été très clair. J'ai grâce à ton explication compris mon erreur ce qui me permettra de ne plus la reproduire.
Merci et bonne soirée :)