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 :

Comment changer les liens dans un article ?


Sujet :

PHP & Base de données

  1. #1
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut Comment changer les liens dans un article ?
    Bonjour,

    J'ai un script à faire qui s'annonce coriace pour mon piètre niveau en PHP.

    Voilà, j'ai 800 articles, avec des liens internes entre eux. Je vais changer les URLs de ces articles, donc je dois changer les liens qui s'y trouvent. Ou alors mon référencement va se casser la figure car la redirection 301 fera doublon avec les anciens liens toujours en activité. Et je ne peux pas les changer manuellement (il doit y en avoir plus de 10000)

    Donc, pour l'instant, j'ai trois texte comme ça par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Premier article très intéressant avec un lien vers le <a href="http://www.monsite.com/deuxieme.htm">deuxième</a> et vers le <a href="http://www.monsite.com/troisieme.htm">troisième</a>.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Deuxième article très intéressant avec un lien vers le <a href="http://www.monsite.com/premier.htm">premier</a>.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Troisième article super sans lien.
    Ensuite, les trois articles devront être comme ça (ça se passe dans l'URL) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Premier article très intéressant avec un lien vers le <a href="http://www.monsite.com/article.php?record=2">deuxième</a> et vers le <a href="http://www.monsite.com/article.php?record=3"]troisième</a>.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Deuxième article très intéressant avec un lien vers le <a href="http://www.monsite.com/article.php?record=1">premier</a>.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Troisième article super sans lien.
    Comme vous le voyez, le mot-clef est désormais remplacé par l'ID de l'article (il n'y a plus de réécriture d'URL)


    Donc :
    1) Trouver chaque lien.
    2) Pour chaque lien trouvé, isoler le mot-clef.
    3) Allez chercher dans la base de donner l'ID qui correspond au tuple ayant ce mot-clef.
    4) Faire le remplacement dans le lien.
    Alors là honnêtement, j'ai besoin de votre aide... Si vous avez un script sous main, ce sera un beau cadeau de Noël, merci d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si c'est vraiment toujours aussi net que ça :
    1 - SELECT
    2 - pour chaque ligne, str_replace($tableau_depart, $tableau_arrivee, $champ)
    3 - UPDATE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tableau_depart=array('premier.html','troisieme.htm');
    $tableau_arrivee = array('article.php?record=1', 'article.php?record=3');

  3. #3
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Salut potage, merci pour ta réponse.

    En fait ça me paraissait assez compliqué mais finalement comme c'est toujours le même type de lien, je vais simplement faire un search et replace sur chaque mot-clef et zou ça va rouler comme sur du beurre, si je puis dire.

  4. #4
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Bon ça roule pas comme dans du beurre


    Donc là j'ai pondu un code, mais il ne remplace ou n'update rien. J'ai pas de message d'erreur, tout s'affiche quand je teste. Mais ça ne change rien au final. Donc à mon sens, soit le problème vient du str_replace() soit de la requête update.

    Si vous voulez bien y jeter un oeil... merci d'avance.

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    // On liste tous les articles
    $liste=
    "SELECT *
    FROM 
    ccs_custom_database_8
    ORDER BY field_28
    ";
    $resultat = mysql_query("$liste");
    while($R=mysql_fetch_array($resultat))
    {
    //on récupère l'id et le mot clef de chaque article
    $id=$R['primary_id_field'];
    $mot_clef=$R['field_28'];
    //la chaîne que l'on va devoir remplacer
    $lienAncien="http://www.site.com/$mot_clef.htm";
     
    // Maintenant on va faire le remplacement dans les articles, les uns après les autres
    $liste2=
    "SELECT 
    primary_id_field,
    field_29
    FROM 
    ccs_custom_database_8
    WHERE  
    field_28='".$mot_clef."'
    ";
    $resultat2 = mysql_query("$liste2");
    while($R=mysql_fetch_array($resultat2))
    {
    $id2=$R['primary_id_field'];//l'id de l'article
    $field_29=stripslashes($R['field_29']);//le contenu de l'article
    //$lienAncien a été créé lors de la précédente requête
    $field_29=str_replace($lienAncien,"http://www.site.com/article.php?record={$id}",$field_29);
     
    //maintenant on update les articles les uns après les autres.
    $updater="UPDATE  `ccs_custom_database_8` SET field_29='".$field_29."' WHERE primary_id_field ='".$id2."'"; 
     mysql_query($updater) OR die(mysql_error());
     
    ;}
    ;}
    Je n'exclue pas que la logique du script soit mauvaise, mais je doute que ça viennent de ça.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pourquoi faire deux boucles ?
    1 - SELECT
    2 - lecture du champ du mot clef field_28, remplacement dans le champ field_29
    3 - UPDATE de la ligne avec la chaine modifiée.

    Au passage, nommer tes champs field_numero c'est vraiment une très mauvaise idée.

  6. #6
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Salut sabotage,

    Je sais pas si c'est une mauvaise idée, mais je ne peux rien y faire c'est le script d'IPB qui fait ça. Pourquoi serait-ce une mauvaise idée ?

    A part ça le script fonctionne maintenant, sans boucle, merci pour ta participation à mon sujet.

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est une mauvaise idée car travailler sur un script ou tous les elements portent le meme nom c'est un cauchemard.

  8. #8
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Oui c'est vrai que ce n'est pas très mémotechnique.
    Mais bon s'ils doivent en plus proposer aux utilisateurs de nommer leurs champs comme ils le veulent, ça complique le boulot pour pas grand chose je crois (c'est pour le CMS IP.Content, plutôt pas mal au demeurant, si ce n'est ce problème d'URL rewriting indisponible dans cette première mouture)

Discussions similaires

  1. Comment activer les liens dans une liste récurrente ?
    Par Marco71 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 16/05/2013, 01h39
  2. [URL rewriting] Changer les liens dans les pages
    Par methos99 dans le forum Apache
    Réponses: 8
    Dernier message: 04/03/2009, 10h37
  3. [DAO] Comment gérer les liens avec la bdd dans mes classes?
    Par Wormus dans le forum Autres
    Réponses: 6
    Dernier message: 22/02/2006, 16h14
  4. [TWebBrowser] Comment trouver tous les liens dans une page ?
    Par xenos dans le forum Composants VCL
    Réponses: 1
    Dernier message: 15/01/2006, 23h36

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