URL rewriting et point d'interrogation

Discussion dans 'URL Rewriting et .htaccess' créé par Stegue, 8 Septembre 2014.

  1. Stegue
    Stegue Nouveau WRInaute
    Inscrit:
    19 Février 2006
    Messages:
    34
    J'aime reçus:
    0
    Bonjour,

    Je réécris les URL de certaines pages mais j'ai un bug quand il il y un point d'interrogation dans le texte. Du genre: wwv.monsite.fr/le-saviez-vous ?.html

    Sur le lien qui appelle ce texte, j'ai remplacé le ? par un autre symbole avec un str_replace et sur la page qui s'ouvre, je remplace le symbole par le ? après le GET et avant la requête SQL.

    Du coup, contrairement à avant, je n'ai plus d'erreur 404 et j'arrive bien sur la bonne page avec, dans l'url "propre" le symbole à la place du ? .

    Mais mon texte de s'affiche pas.

    Pourtant, grâce à la commande ECHO, la commande str_replace me remplace bien le ? .

    Si quelqu'un avait une idée ? :)

    Merci.
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 182
    J'aime reçus:
    331
    Si tu as un "?" dans l'URL ex: "test?.html", ".html" sera envoyé en query string donc c'est normal.
     
  3. Stegue
    Stegue Nouveau WRInaute
    Inscrit:
    19 Février 2006
    Messages:
    34
    J'aime reçus:
    0
    Mieux vaut des exemples:

    J'affiche sur ma page index.php, 10 brèves depuis une BDD.

    Chaque brève est cliquable et amène à la page breve.php avec une récupération GET.

    Ca fonctionne, sauf quand il y a un point d'interrogation dans la brève.

    Par ex: "Le saviez-vous ? il faut blablabla"

    Comment faire ? :(
     
  4. Stegue
    Stegue Nouveau WRInaute
    Inscrit:
    19 Février 2006
    Messages:
    34
    J'aime reçus:
    0
    Mieux vaut des exemples:

    J'affiche sur ma page index.php, 10 brèves depuis une BDD.

    Chaque brève est cliquable et amène à la page breve.php avec une récupération GET.

    Ca fonctionne, sauf quand il y a un point d'interrogation dans la brève.

    Par ex: "Le saviez-vous ? il faut blablabla"

    Comment faire ? :(
     
  5. loubet
    loubet WRInaute impliqué
    Inscrit:
    19 Février 2003
    Messages:
    792
    J'aime reçus:
    0
    et l'inverse dans la page qui récupére le GET, remplace le caractère par ?, cela fonctionne aussi ?
     
  6. Stegue
    Stegue Nouveau WRInaute
    Inscrit:
    19 Février 2006
    Messages:
    34
    J'aime reçus:
    0
    C'est ce que j'ai fait. :)

    Je remplace une 1ere fois le ? sur le lien sur la page index.php et sur la page de résultat brève.php, ou il y a le GET, je remets le ? .
    C'est sur cette même page que la commande ECHO me montre que le remplacement est bien effectué mais à priori, ça ne convient pas ma requête SQL. :?
     
  7. jeanluc
    jeanluc WRInaute accro
    Inscrit:
    3 Mai 2004
    Messages:
    2 882
    J'aime reçus:
    0
    Ce ne serait pas un problème de requête SQL plutôt qu'un problème d'URL rewriting ?

    Jean-Luc
     
  8. Stegue
    Stegue Nouveau WRInaute
    Inscrit:
    19 Février 2006
    Messages:
    34
    J'aime reçus:
    0
    Mais la requête marche s'il n'y a pas de ? . :?
     
  9. jeanluc
    jeanluc WRInaute accro
    Inscrit:
    3 Mai 2004
    Messages:
    2 882
    J'aime reçus:
    0
    Le point d'interrogation est un caractère spécial en MySQL. Faudrait voir où il se trouve dans la requête.

    Jean-Luc
     
  10. Stegue
    Stegue Nouveau WRInaute
    Inscrit:
    19 Février 2006
    Messages:
    34
    J'aime reçus:
    0
    J'suis pas sûr de bien comprendre. Ma requête est juste conditionnée avec un WHERE et une variable.
    C'est cette variable qui récupère la brève.
     
  11. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 182
    J'aime reçus:
    331
    Plus d'infos ici: -http://fr.openclassrooms.com/forum/sujet/lien-url-rewriting :mrgreen:
     
  12. Stegue
    Stegue Nouveau WRInaute
    Inscrit:
    19 Février 2006
    Messages:
    34
    J'aime reçus:
    0
  13. pprem
    pprem WRInaute discret
    Inscrit:
    15 Décembre 2008
    Messages:
    149
    J'aime reçus:
    0
    dans ta requête SQL, tu fais un like ou un = ?
    pour le like, c'est normal que le point d'interrogation ne passe pas, en revanche avec un test d'égalité ça ne poserait aucun problème
     
  14. Stegue
    Stegue Nouveau WRInaute
    Inscrit:
    19 Février 2006
    Messages:
    34
    J'aime reçus:
    0
    Un =

    Sur la page brève.php:

    Code:
    $sql = "SELECT auteur.nom, auteur.prenom,  auteur.id, breves.breve, breves.id, breves.idauteur FROM auteur LEFT JOIN breves ON auteur.id = breves.idauteur WHERE breves.breve='".$breve. »’ »;
    Avec avant ce requête:
    Code:
    if(isset($_GET['breve']))
    {
    $breve1 = $_GET['breve'];
    //remplacement de tirets par des espaces suite à l'inverse sur la page index.php pour l url rewriting
    $breve2 = str_replace("-"," ",$breve1); 
    //encodage pour les caracteres speciaux
    $breve3 = utf8_decode($breve2);
    //Remplacement du symbole § par ? suite à l'inverse sur la page index.php
    $breve = str_replace('§', '?', $breve3);
    Et si pour mes recherches, j'affiche les variables:

    Code:
    echo $breve3;
    echo $breve;
    ça donne en exemple:

    Le saviez vous §
    Le saviez vous ?

    Puisque le ? est correctement remis, pourquoi ça ne satisfait pas ma requête ?
     
  15. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 182
    J'aime reçus:
    331
    Moi je vois surtout une belle faille d'injection SQL.
     
  16. Stegue
    Stegue Nouveau WRInaute
    Inscrit:
    19 Février 2006
    Messages:
    34
    J'aime reçus:
    0
    Ah! Et tu me conseilles quoi ?
     
  17. loubet
    loubet WRInaute impliqué
    Inscrit:
    19 Février 2003
    Messages:
    792
    J'aime reçus:
    0
    avant d'avoir peur, il faut savoir ce qu'il advient du caractère ' dans une url : ' ou \'
     
  18. Stegue
    Stegue Nouveau WRInaute
    Inscrit:
    19 Février 2006
    Messages:
    34
    J'aime reçus:
    0
    Comme ça ?

    Code:
    if(isset($_GET['breve']))
    {
    $breve1 = mysql_real_escape_string($_GET['breve']);
    //remplacement de tirets par des espaces suite à l'inverse sur la page index.php pour l url rewriting
    $breve2 = str_replace("-"," ",$breve1); 
    //encodage pour les caracteres speciaux
    $breve3 = utf8_decode($breve2);
    //Remplacement du symbole § par ? suite à l'inverse sur la page index.php
    $breve = str_replace('§', '?', $breve3);
    Et si dans la variable il y a un ' . :?
     
  19. pprem
    pprem WRInaute discret
    Inscrit:
    15 Décembre 2008
    Messages:
    149
    J'aime reçus:
    0
    c'est clair, ça manque du minimal mysql_real_escape_string dans la requête !
     
  20. Stegue
    Stegue Nouveau WRInaute
    Inscrit:
    19 Février 2006
    Messages:
    34
    J'aime reçus:
    0
    Et si dans la variable il y a un ' . :?

    Sinon après peut importe. Je ne suis pas spécialiste en codage et c'est certainement pour ça que je ne prétend pas stocker des données sensibles. Maintenant, s'il y a un pirate un peu bras cassé pour perdre temps à hacker à ch'ti site comme le mien, tant pis pour moi ! :D

    Sinon, concernant mon problème de ? ?
     
  21. maloc
    maloc WRInaute discret
    Inscrit:
    27 Novembre 2012
    Messages:
    181
    J'aime reçus:
    0
    Non mais c'est ta façon de faire qui ne convient pas du tout.

    Soit tu met un id dedans (/5-mon-rewrite/) et tu ne prends en compte que le 5 (tu fais gaffe à avoir le rewrite tjrs identique après coup, via une redirection 301 si elle n'est pas identique).

    Soit tu enregistres en dure ton rewrite dans ton champ en rendant le titre propre (et donc en ne laissant QUE des caractères alphanumerique et les tirerts), dans quel cas, tu peux avoir /mon-rewrite/ et tu cherches dans un champ unique "mon-rewrite".

    Mais ta façon de faire actuel, c'est du bricolage, imagine que tu souhaiterai mettre un apostrophe simple ou double dans ton titre ? tu vas faire comment pour le savoir en partant du "rewrite" pour cherche ton titre (vu que ton rewrite ne peux pas en contenir, tout comme le point d'interrogation) ?

    Bref, recommence de zéro ta façon de faire.
    ---------------
    Créé un champ unique "rewrite" par exemple (unique est indispensable !)

    Tu fais une petite boucle sur tes titres de ta table, tu fais le traitement du titre propre (ça se trouve sur le net, pour retirer tous les caractères non alpha, proprement) et tu updates la table avec le rewrite. Tu verifies que l'update à marcher (en cas de titre identique, tu ajoutes un "-2" par exemple ...)

    Et ensuite, au lieu de chercher sur "breve", tu cherches sur "rewrite".

    Bon courage :)
     
  22. Stegue
    Stegue Nouveau WRInaute
    Inscrit:
    19 Février 2006
    Messages:
    34
    J'aime reçus:
    0
    Merci, en effet, c'est clairement plus simple. :D
     
Chargement...
Similar Threads - rewriting interrogation Forum Date
url rewriting ne fonctionne pas chez moi URL Rewriting et .htaccess 4 Août 2021
URL rewriting et REGEX bonnes pratiques Développement d'un site Web ou d'une appli mobile 9 Septembre 2020
supprimer /index.html sans url rewriting, possible ? URL Rewriting et .htaccess 13 Novembre 2019
Je bloque sur le rewriting des URL contenant un ? URL Rewriting et .htaccess 3 Septembre 2019
récupération du get après rewriting URL Rewriting et .htaccess 21 Juin 2019
Ralentissement url rewriting URL Rewriting et .htaccess 1 Mai 2019
URL Rewriting Débuter en référencement 17 Avril 2019
Conflit de redirection 301 et Urlrewriting Netlinking, backlinks, liens et redirections 20 Février 2019
URL REWRITING et redirection 301 URL Rewriting et .htaccess 24 Janvier 2019
URL Rewriting : difficultés avec RewriteCond ? URL Rewriting et .htaccess 5 Décembre 2018