Quelles sont les bases pour créer un site dynamique?

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par tryan, 27 Mars 2008.

  1. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Bonjour,

    J'essaye depuis près de 2 semaines de me créer un site web dynamique géré uniquement avec php+ base de données.

    Malgré plusieurs tentatives, je me retrouve toujours bloqué au niveau de la transmission de variable par l'url. Sinon dit, soit à cause du titre de la page, soit à cause du nom de la catégorie.
    Celles si sont stockés en bd et contient forcément des caractères accentués, des apostrophes, des espaces ou autre lettre comme le "ç"... bref le résultat est que je finit toujours par obtenir des url pourrit avec des (r%E9f%E9) et j'en passe :x !
    J'ai tenté le rewriting mais sans grand succès et de toute façon vue le titre transmit, il m'est impossible de récupérer les données par la suite.
    Par exemple pour un titre transmit qui serait "création d'un site dynamique" je vais obtenir une url du genre .../page.php?titre=cr%C3%A9ation+d'un+site+dynamique
    Je fait comment après, je case des str_replace() partout :?:
    Et pour rewriter sa .. c'est possible :?:
    Bon je suppose qu'il me manque quelque chose mais je ne sais pas quoi !!
    ----------------------------------------------------------------------------------

    Pour continuer:
    Supposons une page nommé page_site.php .
    Je transmet l'id par url soit page_site.php?id=2427 qui fait correspondre au titre "Création d'un site dynamique".
    Un coup de rewrite:
    Code:
    RewriteRule -s([0-9]*)\.html$  page_site.php?id=$1 [L]
    
    L'url obtenue donne alors ../creation-d-un-site-dynamique-s2427.html

    Qu'est ce qui fait que j'obtient le titre dans l'url de la page alors que je transmet uniquement l'id :?:

    J'aimerais vraiment comprendre pour avancer ...merci.
     
  2. nickargall
    nickargall WRInaute accro
    Inscrit:
    13 Juin 2005
    Messages:
    6 601
    J'aime reçus:
    4
    Ben, le lien qui fait appel doit surement etre de la forme
    Code:
    <a href="/creation-d-un-site-dynamique-s2427.html ">blalabla</a>
    ... non ?
     
  3. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Heuuuu .. c'est blindé de fonction que je ne comprend pas !!
    Ce que je ne pige pas:
    Quand on transmet une seule info par url soit l'id "page_site.php?id=2427" pour trouver les informations du site, comment peut on se retrouver ensuite après rewriting avec 2 infos soit le titre+l'id dans l'url ? L'id, ok puisqu'elle est transmise mais le titre ... ? On ne peut rewriter que ce qui est transmit ..non ?

    Et pour la première partie, une solution, une suggestion ?
    Merci
     
  4. nickargall
    nickargall WRInaute accro
    Inscrit:
    13 Juin 2005
    Messages:
    6 601
    J'aime reçus:
    4
    oui, on ne peut réécrire que ce qui est transmis, donc le titre de la page est transmis par le bout de code qui crée ton lien HTML.

    Pour la première partie, fais des recherches sur url_encode() en php
     
  5. webmasterlamogere
    webmasterlamogere WRInaute passionné
    Inscrit:
    17 Décembre 2006
    Messages:
    1 647
    J'aime reçus:
    1
    le plus simple est de récupérer le titre à partir de l'id dans la base de données.
     
  6. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    J'ai regardé cette fonction qui dit que sa remplace les caractères non alpha-numériques en % suivi de deux chiffres hexadécimaux et les espaces par des +.
    Code:
    $titre=urlencode($titre);
    Donc si je transmet le titre "création d'un site dynamique" par url avec cette fonction soit page.php?titre=cr%C3%A9ation+d'un+site+dynamique, je vais pouvoir récupérer ensuite mon titre telle qu'il l'est au point de départ soit "création d'un site dynamique" avec la fonction urldecode() ?
    D'autre part, peut on rewriter ce genre d'url sachant que sa donnera un truc du genre
    Code:
    ...
    <a href="'.$titre.'.php">blalabla</a>
    ...
    Qui donnera:
    <a href="cr%C3%A9ation+d'un+site+dynamique.php">blalabla</a>
    
    :?: :?:

    Je veux bien que tu m'explique parce que la je suis largué..
    Sa sous entend qu'il faut récupérer le titre de la page pour ensuite pouvoir le transmettre :?:
    Merci
     
  7. nickargall
    nickargall WRInaute accro
    Inscrit:
    13 Juin 2005
    Messages:
    6 601
    J'aime reçus:
    4
    Bon on reprend :

    - ta page A affiche un lien
    Code:
    <?php
    echo '<a href="'.$titredelanews.'-".$iddelanews".">lablabla</a>';
    ?>
    
    Pour que $titredelanews passe bien dans l'URL, faut y virer ou remplacer tout caractère spécial et accents au préalable (et les tirets aussi, on a besoin qu'y en ait qu'un pour la suite) .

    Ensuite, ta règle de réécriture:
    Code:
    RewriteRule  ^(.*)-([0-9]*)\.html$  page_site.php?id=$2 [L] 
    
    ...fera que ta page B de destination récupérera l'id passé dans l'argument, ce qui te suffira à trouver le contenu correspondant.
    En bref, on se moque de récupérer le $titredelanews dans l'URL, on récupere que $2 qui correspond à la variable php $iddelanews.

    Ce que Lamogere veut dire, c'est qu'il ne faut pas essayer de récupérer le titre de la news depuis celui qui est passé par l'URL, mais faire sur la page B une requete SQL sur l'id de la news (que tu récupères facilement) pour ressortir le titre du contenu que tu cherches.

    Il te reste plus qu'à trouver une fonction qui enlèvera tous les caractères pas beaux dans le code qui écrit le lien de la page A.

    C'est plus clair ?
     
  8. webmasterlamogere
    webmasterlamogere WRInaute passionné
    Inscrit:
    17 Décembre 2006
    Messages:
    1 647
    J'aime reçus:
    1
    il faut une table avec comme clé id et contenant une colonne titre
    ainsi l'url un-url-avec-un-titre-01.html est rewritée en affiche_id.php?id=01 avec la règle :
    Code:
    RewriteRule ^(.*)-([0-9]*)\.html$ /affiche_id.php?id=$1 [L]
    le script affiche_id.php récupère le titre dans la table a partir de l'id en paramètre et fait ensuite ce que tu veux.
     
  9. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Je vous remercie pour vos réponses mais je dois avoué avoir du mal, alors je teste, je teste ...et j'ai mal au crane ^^.

    Question peut être conne mais question quand même:
    Peut on tester sa avec juste 3 fichiers sans passer par sql genre index.php contenant :
    Code:
    <?php
    $titre="création d'un site dynamique";
    $id="2477";
    echo'<a href="page.php?titre='.$titre.'&id='.$id.'">'.$titre.'</a><br>';
    echo'<a href="'.$titre.'-'.$id.'.php">'.$titre.'</a>';
    ?>
    
    Une page "page.php" pour recup les données et le htaccess avec la règle:
    Code:
    RewriteRule  ^(.*)-([0-9])+\.php$  page.php?id=$2 [L] 
    
    :roll: :roll: :roll:
     
  10. Alifba
    Alifba WRInaute discret
    Inscrit:
    4 Février 2008
    Messages:
    53
    J'aime reçus:
    0
    Salut,

    Ne serait-ce pas plus simple de mettre dans la base un champs contenant un identifiant textuel qui n'aurait alors ni accents ni caractères spéciaux ?
     
  11. phpmikedu83
    phpmikedu83 WRInaute passionné
    Inscrit:
    6 Août 2005
    Messages:
    1 012
    J'aime reçus:
    0
  12. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Houuu, je sent un ton narcissique la dessous :lol: ^^.
    Je connais ce site et il est très bon... cependant il ne répond pas à mon interrogation. Moi ce qui me gène c'est le passage de variable contenant des accent,espace et autre caractère...
    Si je fais un lien depuis mon menu:
    Code:
    $titre="création d'un site dynamique";
    echo'<a href="page.php?titre='.$titre.'">'.$titre.'</a>';
     
    Puis dans ma page de destination un truc du style $titre=$_GET["titre"]; et dans ma requête de récupération je fait un ("SELECT $titre FROM mon_champs WHERE titre=$titre") je me retrouve forcément n*ké puisque je vais me retrouvé avec des caractères bizarre dans l'url !
    J'ai l'impression de ne pas me faire comprendre .. c'est le cas ?
    J'ai beau utiliser urlencode et tout ce qui sens suis, mon titre transmit par url n'ai jamais le bon :? .
    Bon, suite à sa, je veux passer une couche de rewriting pour obtenir une zolie url !
    La seule solution que j'ai trouvé est d'ajouter un nouveau champ qui enregistre le titre en remplacent tout ce qui m'ennuie avec la fonction str_replace() de façon à obtenir un titre du genre creation_d_un_site_dynamique .

    Je ne suis pas contre un dessin ou un exemple concret :lol:
     
  13. nickargall
    nickargall WRInaute accro
    Inscrit:
    13 Juin 2005
    Messages:
    6 601
    J'aime reçus:
    4
    Tu ne pourras pas récupérer un zouli titre en le récupérant depuis l'URL, vu que les caracteres spéciaux et les caracteres accentués auront été traités par les fonctions faites pour les modifier. et donc tu ne pourras pas récupérer un article de ta base de données en te basant sur ce titre modifiée passée dans l'URL.

    Il te faut donc récupérer le contenu de l'enregistrement voulu dans ta base à partir de l' id que tu transmets par l'URL.

    A partir de cet 'id' qui est unique, et que tu récupères facilement par l'URL, ben tu récupères l'enregistrement de la base de données qui correspond à cet ID. Ya pas plus simple.
    Code:
    $select="SELECT `id`,`titre`, `article`, [... tous les champs que tu veux récupérer...]  FROM ma_table WHERE `id`=$id";
    $result=mysql_query($select);
    $row=mysql_fetch_array($result);
    $titre=$row['titre'];
    
    C'est le contenu de la base de données qui te donnera ton $titre, et non ce qui passe dans l'URL.
    Bon bien sur si le titre n'est pas présent dans l'enregistrement de la base de données, c'est rapé.

    Précision : Le passage du titre modifié dans l'URL n'a quasiment jamais pour vocation à être récupéré; seulement à être présent dans l'URL de la page (histoire que cette URL comporte des "mots" qui avec un peu de chance sont des mots clés demandés par les internautes...

    Mais bon c'est tellement peu important d'avoir des mots clés dans l'URL que tu pourrais t'en passer ... vu les soucis que ça te cause :)

    Autre précision : tu parles d'utiliser la réécriture d'URL pour en avoir une jolie (d'URL :roll:), mais ce n'est pas le but de la réécriture d'URL. La réécriture va permettre au serveur de savoir que si tu appelles /une,zoulie,url-1.html ; il devra lui lancer la page /page.php?id=1. Le reste, "une,zouile,url " , tu t'en bats les steacks, comme disent les djeunes de mon patelin.T'as pas à la récupérer en $_GET, ça sert à rien.

    d'ailleurs, la règle que je te proposais te permettait pas de récupérer le titre en $_GET, vu que ça sert à rien du tout :

    Code:
    RewriteRule  ^(.*)-([0-9])+\.php$  page.php?id=$2 [L] 
    
    ya qu'un paramètre dans la partie droite de la règle, et c'est l'ID, qui est la seule chose que tu aies besoin de récupérer dans l'URL (bon voilà je l'ai dit 3 fois, ca devrait aller cette fois ci :) )

    Et pour finir pour aujourd'hui, un lien sur une discussion abordant la transformation de chaine de caracteres pour virer les accents et caracteres spéciaux :

    https://www.webrankinfo.com/forum/t/resolu-str_replace-et-url.83127/

    désolé je peux pas faire plus pour toi ... bon courage
     
  14. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Bon au moins comme sa c'est clair!
    Je suis daccord mais je vais me retrouver avec une url pourrit contenant uniquement l'id !

    Et bien justement, c'est ce que je veux faire. Je préfère avoir une url du style /mes-mot-clef.php que /125.php et forcement, c'est la dessus que je bute .
    J'ai toujours crus comprendre le contraire ..:!:
    Oui j'ai bien comprit sa mais je reste butté sur le faite qu'avoir une url contenant des mots clés en rapport avec le contenue de la page est important ...dailleurs sa ma toujours réussit de cette façon :p .
    Je vais allez lire sa ... après ma nuit de sommeil ^^
    C'est déjà pas mal :wink: , merci.

    J'insiste un peut:Comment font alors les annuaires pour obtenir le titre du site dans la page alors qu'uniquement l'id est transmise ??
     
  15. darkjukka
    darkjukka WRInaute impliqué
    Inscrit:
    28 Avril 2007
    Messages:
    574
    J'aime reçus:
    0
    Code:
    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);
    	}
    Ca te permet de virer les caractères spéciaux et les majuscules ;)

    Après pour tes url il te suffis de faire :
    Code:
    <a href="'.$data['id'].'-'.filter($data['titre']).'.php">
    et hop, ça roule! (C'est le système mis en place sur mon www ;))
     
  16. webmasterlamogere
    webmasterlamogere WRInaute passionné
    Inscrit:
    17 Décembre 2006
    Messages:
    1 647
    J'aime reçus:
    1
    C'est une caméra cachée?

    Tu es sur de ta "Localisation: Planete terre"

    j'ai un seul conseil : laisse tomber le rewriting
     
  17. nickargall
    nickargall WRInaute accro
    Inscrit:
    13 Juin 2005
    Messages:
    6 601
    J'aime reçus:
    4
    Argh tu fais exprès !

    Dans la page d'arrivée, la récupération de l'ID permet SEULE d'aller trouver dans la base le titre de l'article ...

    Et tu peux passer ton titre remodelé en propre ET l'identifiant dans l'URL ... mais tu n'auras besoin de récupérer QUE de l'identifiant pour afficher ton contenu sur ta page de destination ...

    Je peux pas faire plus clair !
     
  18. nickargall
    nickargall WRInaute accro
    Inscrit:
    13 Juin 2005
    Messages:
    6 601
    J'aime reçus:
    4
    Non je sais, c'est un recruteur pour centre de formation en PHP pour les autodidactes repentants, il cherche à trouver le profil du gars qui peut expliquer clairement 5 fois la même chose sans s'énerver.

    J'ai échoué :)
     
  19. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Merci darkjukka :D , j'ai testé ton code et j'ai constaté que si le titre utilise une apostrophe genre "création d'un site", sa collait le mot au lieu de le séparer (creation-dun-site)..normal ou j'ai merdé ?

    nickargall: j'en revient à cette petite phrase:
    Comment sa sa sert à rien? Si je transmet le titre+l'id par url, il faut bien que ma page "page.php" est quelque chose à récupérer pour pouvoir faire une SELECT * FROM ma_base WHERE id=$id ensuite... nan ?
    Dans ce cas, il me faut bien un $id=$_GET["id"] pour fouiner dans la base ...ou je me suis encore planté 8O :?:
    Heuuu c'est pas sure sa :lol:

    Pour le moment:
    J'ai fais un petit teste en partant toujours du même titre (création d'un site dynamique) sur lequel j'utilise une fonction de transformation de chaine de caractères et un htacess de cette forme et sa fonctionne pour la page rewrité et non rewrité.
    Code:
    RewriteEngine on 
    
    #Rewrite des pages
    RewriteRule  ^(.*)-(.*)\.php$  /site/teste/page.php?titre=$1&id=$2 [L] 
    
    
    Par contre si j'ajoute un ligne pour des catégories:
    Code:
    RewriteEngine on 
    
    #Rewrite des pages
    RewriteRule  ^(.*)-(.*)\.php$  /site/teste/page.php?titre=$1&id=$2 [L] 
    
    #Rewrite des catégories
    RewriteRule  ^(.*)-(.*)\.php$  /site/teste/categorie.php?categorie=$1&id=$2 [L]
    
    ..bhin la version rewrité de la catégorie ne fonctionne pas!
    Si je vous saoule .. sorry :lol: !
     
  20. nickargall
    nickargall WRInaute accro
    Inscrit:
    13 Juin 2005
    Messages:
    6 601
    J'aime reçus:
    4
    Relis moi :
    "Le reste, "une,zouile,url " [...]T'as pas à la récupérer en $_GET, ça sert à rien. "
    Je parlais tu $titre uniquement. Bien sur que tu dois récupérer l'ID. Je le dis avant.

    Ben évidemment, comment veux tu qu'il fasse la différence entre tes deux règles dont la partie "reconnaissance de l'URL appelée" est identique...

    ^(.*)-(.*)\.php$ (regle 1)
    et
    ^(.*)-(.*)\.php$ (regle 2)

    Ton serveur ne peut pas savoir si il doit envoyer vers la page catégorie ou la page article .. il te faut des schémas d'URL différents selon ce que tu veux appeler..
    Un conseil, achète un bouquin, ou revois les bases de la réécriture avant de la tenter sur un site (je te cite ):
     
  21. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    J'aimerais bien faire exprès ... au moins j'aurai comprit!
    Ceci dit, pour recup. les infos à partir de l'id, j'avais comprit.
    Ce que je ne pigeais pas, c'était comment obtenir en plus le titre proprement dans l'url ... maintenant c'est bon .. du moins presque.
    Nannnnnn je veux pas :D , j'y arriverais, na!
     
  22. darkjukka
    darkjukka WRInaute impliqué
    Inscrit:
    28 Avril 2007
    Messages:
    574
    J'aime reçus:
    0
    C'est normal, après tu dois pouvoir le modifier un peu pour qu'il te mette un "_" à la place, perso je l'ai pas fait car cela ne me gène pas outre mesure ;)
     
  23. Greendog
    Greendog WRInaute occasionnel
    Inscrit:
    18 Mars 2008
    Messages:
    437
    J'aime reçus:
    0
    Aaaahwaawwaaa le topic qui fait mal à la tête juste en le survolant. <<

    Nickargall est vraiment patient, et sur le Site du zéro si tu fouilles dans leurs forums tu trouveras forcément ta solution.
    Vu que tu avais répondu que tu ne trouvais pas la réponse à ton problème, c'est que tu ne dois pas l'attaquer dans le bon sens (ton problème).

    Le plus simple quand t'as une difficulté, c'est hyper technique et je le fais à chaque fois que j'ai un problème : prendre une feuille de papier, un stylo, poser son cul dans une pièce en dehors de celle du PC et écrire son problème pour ensuite chercher une solution à ce problème.
    Cela fonctionne à chaque fois, tu peux même faire des flèches pour montrer où vont tes donner, leurs intéractions entre elles, tout ça tout ça.

    Prendre un peu de temps pour poser ces problèmes sur une feuille permet d'en éviter un bon paquet par la suite. :wink:
     
  24. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Salut ^^, j'en remet une couche ...
    J'ai un petit soucis avec cette fonction. Si j'utilise un mot comme "créer" il me renvoit soit 3 "e" soit un seul.
    Selon le type d'encodage sa me donne:
    cr&eacute;er donne "crer"
    créer donne "crer"
    cr&Atilde;&copy;er donne "creeer"

    J'ai également testé la fonction présente ici https://www.webrankinfo.com/forum/t/resolu-str_replace-et-url.83127/ et la mes "é" sont remplacés par des "b", pourquoi svp ?
    Merci
     
  25. darkjukka
    darkjukka WRInaute impliqué
    Inscrit:
    28 Avril 2007
    Messages:
    574
    J'aime reçus:
    0
    Euh ben là je ne peux pas t'aider, ce code marche sans aucun problème chez moi donc je ne vois pas d'où ce soucis pourrait venir :s
     
  26. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Harggg , pas cool ^^ :( !
    Chose bizarre, quelque que soit la fonction de ré écriture que j'essaye, j'ai le même soucis 8O donc sa vient d'autre part .. mais ou ?
     
Chargement...
Similar Threads - bases créer dynamique Forum Date
Segments basés sur UTM de campagne, quand l'url est différent de celui du compte GA Google Analytics 21 Octobre 2020
Peut-on se connecter à différentes bases de données sur une même page ? Développement d'un site Web ou d'une appli mobile 18 Septembre 2017
Pourquoi mes bases de données travaillent-t-elles trop ? Administration d'un site Web 22 Janvier 2017
Utilise-t'on encore les fichiers à la place des bases de données ? Développement d'un site Web ou d'une appli mobile 10 Novembre 2016
Des conseils de bases pour un blog culinaire/nutrition ? Problèmes de référencement spécifiques à vos sites 14 Octobre 2015
Quelle bases acquérir ? Débuter en référencement 26 Février 2014
Script de mise à jour de deux bases de données Développement d'un site Web ou d'une appli mobile 8 Juin 2012
Droit d'internet sur les bases de données Droit du web (juridique, fiscalité...) 23 Janvier 2012
Importer 3000+ bases MySQL dans Plesk 10 Développement d'un site Web ou d'une appli mobile 12 Octobre 2011
Appeler deux bases de données sur une même page Développement d'un site Web ou d'une appli mobile 21 Avril 2011
[BDD] optimisation des bases Développement d'un site Web ou d'une appli mobile 15 Mars 2011
SandBox => Repartir sur de bonnes bases ou rattraper le coup ? Débuter en référencement 9 Avril 2010
comment transefer les bases de données de easyphp vers Wamp Administration d'un site Web 7 Mars 2009
Fermeture de Lycos et impact sur bases de données et emailing Développement d'un site Web ou d'une appli mobile 3 Décembre 2008
Taille des bases chez OVH Administration d'un site Web 30 Novembre 2008
Sauvegarder des grosses bases de données Administration d'un site Web 24 Novembre 2008
des bases mysql libre (dictionnaire, synonyme, prenom, ville Développement d'un site Web ou d'une appli mobile 21 Janvier 2008
OVH, bases supplémentaires ? Administration d'un site Web 2 Janvier 2008
1&1 bloque mes bases MySQL (et ne les rend pas (ah si)). Administration d'un site Web 18 Septembre 2007
Moteurs de recherche et bases de données Référencement Google 7 Septembre 2007