Titre dans l'url. Remplacement des espaces et autres en php

Nouveau WRInaute
Bonjour à tous,

J'ai parcouru pendant de longues hueures ces forums en espérant trouver la solution, mais en vain. Je m'adresse donc à vous en dernier recours (et au bord du suicide).

J'arrive à rewriter mes pages de manière basique, mais quand je veux inclure dans l'url le titre de ma page, les choses se compliquent, comme pour beaucoup. Les pages sont sous cette forme pour l'instant :

http://www.example.com/contenu/lire.php?id=1

et je voudrais tout simplement

http://www.example.com/contenu/titre-de-la-news-1.php

Je crois que le problème (enfin j'en suis sûr même) provient de mon code php sur lire.php. Je n'arrive pas en effet à remplacer les espaces et autres caractères spéciaux par des tirets. Je précise que je suis une quiche en php. En visitant plusieurs forums, je crois savoir que la solution pourrait être :

Code:
<?php
$titre = str_replace(' ','-',$titre);
?>

Mais je suis incapable de le placer correctement sur mon code. Code qui se présente comme ça:

Code:
                        <?
  Require('../includes/config.php'); 
connect2mysql($server);
if ($page >1 ){}
else {
$page=0; }
$nb_tac = '2';
$R1 = mysql_query("SELECT id, titre, FROM table ORDER BY id DESC LIMIT $page,$nb_tac") or die(mysql_error());
                               ?>    <?
							$i;
							while ($F1 = mysql_fetch_array($R1) ){ ?>

puis j'appelle le titre et son lien comme ça (foireux je sais) :


Code:
<? print "<a href='../contenu/".$F1[titre]."-".$F1[id].".php'>Lire la suite</a>"; ?>

Et quand je teste, evidemment : 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 ' l’efficacité dans la simplicité' at line 1.

Ma rewrite rule :

Code:
RewriteRule ^([A-Za-z0-9]+)-([0-9]+).* lire.php?id_tac=$1 [L]


Quelqu'un peut-il m'aider ?


PS: Désolé de balancer mon code comme ça...
 
WRInaute accro
je ne comprends pas vraiment.
Dans l'url, il y a un id_tac qui n'est utilisé nulle part dans le script :eek:
il y a un
Code:
 if ($page >1)
et je ne vois pas d'où vient $page
 
Nouveau WRInaute
J'ai essayé de personnaliser le moins possible mes id, j'avais enlevé mes _tac partout sauf dans ma ligne de rewrite...dsl... ne pas en tenir compte donc.

Et pour ma page, j'ai pris le mauvais exemple en fait. Prenons celui-ci , qui sera plus simple :

Code:
                        <? 
connect2mysql($server);
$R1 = mysql_query("SELECT id, titre, FROM table ORDER BY id_joueur DESC LIMIT 0,6") or die(mysql_error());
     while($F1 = mysql_fetch_array($R1))  
											  
print "<a href='../contenu/".$F1[titre]."-".$F1[id].".php'>Lire la suite</a>"; ?>

et mon rewrite :

Code:
RewriteRule ^([A-Za-z0-9]+)-([0-9]+).* lire.php?id_tac=$1 [L]

J'espere être plus clair :)
 
WRInaute accro
le mieux, c'est de faire afficher la requête avant de l'exécuter pour vérifier la cohérence et, en cas d'erreur, de la tester dans phpmyadmin
 
Nouveau WRInaute
Je me rends compre que j'ai pas été tres clair surtout...

Alors j'ai essayé de faire plus simple en fait...
J'ai rajouté un nouveau champ sur ma table : "url_rewrit"

Lorsque je rentre une nouvelle actualité, je renseigne ce champ en reprenant le nom de ma news, en enlevant les espaces et autres caractères spéciaux par un tiret, du genre: titre-de-la-news.

De cette facon, au lieu d'afficher :

www.example.com/actus/lire.php?id_act=2

j'espere obtenir :

www.example.com/actus/titre-de-la-news-2.php

Sur la page d'index des news, j'appelle donc le lien comme ça :

Code:
<a href='../actus/".$F1[url_rewrit]."-".$F1[id_act].".php'>Lire la suite</a>

Et mon rewrite:
Code:
RewriteRule ^([A-Za-z0-9]+)-([0-9]+).* lire.php?id_act=$1 [L]

Quand je clique sur le lien, j'arrive sur ma page lire.php, mais vide...sans donnée. Je suppose que ça va pas chercher le bon id... je sais pas...

Quelqu'un please?
 
WRInaute discret
Adresses à rallonge

Babos a dit:
J'arrive à rewriter mes pages de manière basique, mais quand je veux inclure dans l'url le titre de ma page, les choses se compliquent, comme pour beaucoup. Les pages sont sous cette forme pour l'instant :

http://www.example.com/contenu/lire.php?id=1

et je voudrais tout simplement

http://www.example.com/contenu/titre-de-la-news-1.php

Bizarre ce besoin d'avoir des adresses à rallonge. Faut vraiment qu'on me renseigne sur le sujet car tu es la seconde personne à vouloir faire ça ! Apparemment il y a une histoire de référencement derrière... Et comme le phénomène s'est répandu sur le Web comme une trainée de poudre... J'imagine qu'il doit y avoir une bonne raison.
 
Nouveau WRInaute
On doit être plus de deux à vouloir ce genre d'url :wink:

Et il y'a effectivement une bonne raison à ça : un référencement optimal. Google ayant du mal avec les url pourvues de x variables, l'url rewriting permet d'avoir des url propres, et donc mieux référencées. Mais il y'a des personnes beaucoup plus aptes à t'expliquer l'intérêt du UR sur ce forum :)

Accessoirement, j'ai résolu mon problème. J'explique comment j'ai fait pour ceux qui voudraient la même chose... Je sais pas si c'est la meilleure méthose, mais en tous cas ça marche...

J'ai donc bien rajouté un champ "url_rewrit" sur toutes mes tables, que j'ai renseigné par la suite. J'avais pas un contenu hyper conséquent, donc ça ne m'a pas posé de problème.

Le problème venait de mon rewrit, il prends en compte les "-" sans problème désormais.Pour mes actus par exemple :

Code:
RewriteRule ^([A-Za-z0-9\-]+)-([0-9]+).* lire.php?id_news=$2 [NC,L]

Et j'appelle toujours le lien comme ça :

Code:
<a href='../actus/".$F1[url_rewrit]."-".$F1[id_news].".php'>

Et voilou, ça marche nickel...

Je fais maintenant attention au problème du contenu dupliqué... les étapes normales quoi!

PS: Ce forum en tous cas m'a beaucoup aidé, et m'aide encore beaucoup! donc, merci tout simplement.
 
WRInaute discret
Babos a dit:
Et j'appelle toujours le lien comme ça :

Code:
<a href='../actus/".$F1[url_rewrit]."-".$F1[id_news].".php'>

Et voilou, ça marche nickel...

Je fais maintenant attention au problème du contenu dupliqué... les étapes normales quoi!

En parlant de duplication tu pourrais rendre ton code plus réutilisable en utilisant une fonction pour retourner la valeur réécrite d'une information. Par exemple dans le cas d'une brève tu pourrais avoir un objet avec une méthode get_url_rewrit() qui se chargerait de tourner ton $F1[url_rewrit]. Après tu pourrais même propager ce comportent aux autres classes en créant un objet de base "url_rewritable". Quelque chose comme ça. Sinon à ce rythme là tu vas te retrouver avec un code bourré de formules 1 :p
 
Discussions similaires
Haut