IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Vérifier ID et titre dans une url [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut Vérifier ID et titre dans une url
    Bonjour,

    Voila j'utilise ce code sur ma page news.php pour afficher mes news par leur ID (par exemple news.php?id=10). Je réécris mes url en injectant le titre de la news dedans ce qui me donne par exemple 10-titre_de_la_news.php.
    Le soucis c'est que n'importe quel titre marche tant que l'ID est bon, 10-mauvais_titre_de_la_news.php marche tout aussi bien que le bon titre. Si j'ai à modifier le titre de la news, cela me créera donc un nouveau lien qui sera tout aussi valide que le précédent.
    J'ai donc peur que cela me fasse du duplicate content chez Google puisqu'il visitera l'ancienne news indexée puis la nouvelle : 2 url, contenu identique = pas bon.

    J'aimerai donc modifier mon script pour qu'il vérifie que le titre de la news dans la BDD corresponde bien à l'ID demandée et que si ce n'est pas le cas qu'il redirige vers la bonne adresse avec le titre actuel.

    Code de la page news.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $newsId= ( isset($_GET["id"])) ? $_GET['id'] : FALSE;
        if (  is_numeric($newsId)) {
        $sql = 'SELECT * FROM news WHERE newsId = ' . $newsId;   
        $rc = mysql_query($sql);
        if ( $data = mysql_fetch_assoc($rc) ) {
       //afficher la news
       }else
        {
       //mauvaise id de news
       }
        }else
        {
       //ce n'est pas une id valide
       }
    Code du fichier .htaccess:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([0-9]+)-([a-z0-9_-])*\.php$ news.php?id=$1 [QSA,L]
    Merci par avance de votre aide, j'y ai passé un après-midi complet cette semaine et je n'ai pas réussi à le faire.

    Guillaume

  2. #2
    Invité
    Invité(e)
    Par défaut
    perso je te conseillerai de générertes pages : dans ton cms, tu a un bouton "generer" qui crée les pages html de tes articles, ça chargera beaucoup moin ta bd (a la place de l'url redirect)

    Sinon

    a tu essayé

    RewriteRule ^([0-9]+)-([a-z0-9_-])*\.php$ news.php?id=$1&name=$2 [QSA,L]

    et verifier l'id et le name dans ta requète ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    Je n'utilise pas de CMS sur mon site, c'est du fais à la "mano"

    Sinon j'ai essayé de vérifier le titre en plus de l'ID
    Comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    $newsId= ( isset($_GET["id"])) ? $_GET['id'] : FALSE;
    $titre= ( isset($_GET["titre"])) ? $_GET['titre'] : FALSE;
        if (  is_numeric($newsId) && is_string(filter($titre)) ) {
        $sql = 'SELECT * FROM news WHERE newsId = ' . $newsId . ' AND titre =  ' . $titre;   
        $rc = mysql_query($sql);
        if ( $data = mysql_fetch_assoc($rc) ) {
       //afficher la news
       }else
        {
       //mauvaise id de news
       }
        }else
        {
       //ce n'est pas une id valide
       }
    Mais cela ne marche pas, la fonction filter sur le 'titre' sert à retirer les caractères spéciaux pour en faire une url propre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function filter($in) {
        $search = array ('@[B]@i','@[D]@i','@[F]@i','@[G]@i','@[H]@i','@[J]@i','@[K]@i','@[L]@i','@[M]@i','@[N]@i','@[P]@i','@[Q]@i','@[R]@i','@[S]@i','@[T]@i','@[V]@i','@[W]@i','@[X]@i','@[Y]@i','@[Z]@i','@[éèêëÊËE]@i','@[àâäÂÄA]@i','@[îïÎÏI]@i','@[ûùüÛÜU]@i','@[ôöÔÖO]@i','@[çC]@i','@[ ]@i','@[^a-zA-Z0-9_]@');
        $replace = array ('b','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z','e','a','i','u','o','c','_','');
        return preg_replace($search, $replace, $in);
    }

  4. #4
    Invité
    Invité(e)
    Par défaut
    tu n'utiliser pas un cms, mais c'est un cms que tu fait : un logiciel de gestion de contenu

    est ce que ton url redirect fonctionne bien ? cad est ce que $_GET['titre'] est renseigné ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    Vi, enfin je voulais dire que je n'utilise pas de CMS tout fait quoi ^^

    Pour le moment je test sans le redirect sur une page d'essai et cela ne marche pas, l'ID n'est pas bonne (alors que je teste avec une existante).

    Mon url est formatée comme cela news.php?id=33&titre=titre_de_la_news_correspondante

  6. #6
    Invité
    Invité(e)
    Par défaut
    peut tu me donner le nouveau code de verif coté serveur stp ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function filter($in) {
            $search = array ('@[b]@i','@[D]@i','@[F]@i','@[G]@i','@[H]@i','@[J]@i','@[K]@i','@[L]@i','@[M]@i','@[N]@i','@[P]@i','@[Q]@i','@[R]@i','@[S]@i','@[T]@i','@[V]@i','@[W]@i','@[X]@i','@[Y]@i','@[Z]@i','@[éèêëÊËE]@i','@[àâäÂÄA]@i','@[îïÎÏI]@i','@[ûùüÛÜU]@i','@[ôöÔÖO]@i','@[çC]@i','@[ ]@i','@[^a-zA-Z0-9_]@');
            $replace = array ('b','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z','e','a','i','u','o','c','_','');
            return preg_replace($search, $replace, $in);
        }
     
    $newsId= ( isset($_GET["id"])) ? $_GET['id'] : FALSE;
    $titre= ( isset($_GET["titre"])) ? $_GET['titre'] : FALSE;
        if (  is_numeric($newsId) && is_string(filter($titre)) ) {
        $sql = 'SELECT * FROM news WHERE newsId = ' . $newsId . ' AND titre =  ' . $titre;   
        $rc = mysql_query($sql);
        if ( $data = mysql_fetch_assoc($rc) ) {
       //afficher la news
       }else
        {
       //mauvaise id de news
       }
        }else
        {
       //ce n'est pas une id valide
       }

  8. #8
    Invité
    Invité(e)
    Par défaut
    c'est pas l'inverse de la fonction filter qu'il te faut faire ? la tu remplace les " " par des "_" mais ça c'est fait pour créer le lien pa pour le lire , non ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    Je m'en suis rendu compte dans l'après midi que je me plantais (avec l'aide d'un amis), j'ai donc réussi à faire ce que je voulais!
    J'ai simplement ajouté un champ 'titre_url' dans ma table de news qui contient le titre de la news comme dans l'url demandée et ça roule maintenant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lancement appli à partir d'extension dans une URL dans IE
    Par Sniper94-2 dans le forum Windows
    Réponses: 3
    Dernier message: 03/11/2005, 17h55
  2. Intercaler des "titres" dans une liste ?
    Par tikawua dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/10/2005, 10h40
  3. [VB.NET] Ajouter une cible dans une URL
    Par guimartbis dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/05/2005, 14h17
  4. Création affectation de parmètre dans une url
    Par bumbo500 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/11/2004, 16h39
  5. [ Struts ] recuperer une valeur dans une url?
    Par njac dans le forum Struts 1
    Réponses: 2
    Dernier message: 02/06/2004, 14h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo