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 :

PHP et SEO - Prendre en compte le SEO pour un site custom


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Par défaut PHP et SEO - Prendre en compte le SEO pour un site custom
    Bonjour à toutes et à tous,

    J'ai créé un site internet à base des "couples" HTML/CSS + PHP/MySQL.
    Format "classique": une page index.php qui via des include intègre des pages suivant la demande.

    J'ai commencé un premier cours de SEO (du coup j'ai encore de quoi faire...) et je me pose quelques questions.

    Pour le référencement, chaque page doit disposer d'un title et d'une méta description.
    Ces balises sont situées dans le <head> de la page.

    Or, il s'avère que le <head> de la page:
    . est intégré à index.php
    . n'apparait jamais dans les pages à inclure (vu que les pages à inclure n'ont pas besoin de disposer d'un code complet... car bénéficiant déjà des codes annexes qui sont ajoutés via les includes...)

    Ma question: Comment répondre à ces points avec un site custom php qui inclut des pages différentes à chaque clique sur un lien?

    Mon hypothèse pour le moment (je dois encore creuser...):
    . Les balises title et meta description contenues dans le <head> de ma page index.php n'ont pas une écriture fixe mais renvoient sur des variables (via un php echo par exemple).
    . Ces variables sont alimentées soit par la page qui est chargée, soit via la lecture d'une table (si tu cliques sur X, alors charge la page indiqué dans la colonne Y de ta table, prend le title situé en colonne Z et le meta en colonne W...)
    . Si cette hypothèse n'est pas trop déconnante... vu que ma page sera lue du haut vers le bas... cela signifie mon code de récupération de l'info est placé en démarrage de page (code php en amont de <head>. Ce dernier prendra un $_GET comme paramètre [je viens de cliquer sur un lien par exemple...] et après analyse du $_GET me chargera l'info désirée.

    Avec votre expérience:
    . Mon hypothèse est elle valable?
    . Et surtout... existe t-il d'autres manières de procéder? Plus "propre", plus sécure peut-être... bref de meilleures façons de faire

    D'avance merci pour vos retours qui me permettront de continuer à construire ma réflexion et de continuer mon apprentissage

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 666
    Par défaut
    montrez nous le code que vous avez essayé depuis votre message précédant.

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Par défaut
    Bonjour Mathieu,

    Merci pour ton retour.

    1)
    Je pense que je n'ai pas placé mon premier message dans la bonne catégorie.
    J'ai essayé de le supprimer mais je ne sais pas comment faire
    Si cela est possible, je veux bien apprendre comment effacer un message pour éviter de surcharger le forum inutilement


    2)
    Je suis plus dans la recherche d'une validation (ou pas) de mon hypothèse de travail.
    Ou de modèles qui existent déjà. Plus d'un point de vue structure que modèle déjà tout fait.
    De fait, je n'ai pas encore écris de lignes de codes, je pensais le faire en disposant d'un fil directeur correct.
    Si je devais en écrire un, il ressemblerait à cela:

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    <?php
     
    	session_start(); // Permet d'utiliser les variables superglobales
     
            //Dans mon hypothèse de travail, l'utilisateur clique sur un lien. Ce lien permet d'inclure une page dans mon index.php. Ce lien possède une info de type SEO=valeur. 
            //L'inclusion déclenche un remplissage de variables affectées à title ($index_seo_title) et à meta description ($index_seo_description)
           // La seule solution que j'imagine est un $_GET (s'il existe de meilleures solutions, je suis ouvert à l'apprentissage)
           // Dans l'exemple, imaginons que ce soit $_GET['SEO']
     
          // Etape 1 - Je vérifie de combien d'articles je dispose, cela constituera ma limite supérieure
          // Connexion à la base de données
          try
         {
    	$acces_bdd = new PDO('mysql:host=adresse;dbname=nom;charset=utf8', 'nom utilisateur','mot de passe', 
    	array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)  );
         }
         catch (Exception $e)
        {
        die('Erreur : ' . $e->getMessage());
        }
     
        //Je génère l'accès à la table articles
        $acces_table = $acces_bdd-> query('SELECT * FROM table_articles');
     
        //Je regarde le nombre total d'items dans ma table. Ce qui va définir ma limite haute
        //Je pense qu'il y a moyen d'écrire quelque chose de plus propre ici
        // Je suis preneur de toute idée d'amélioration 
     
       $table_nombre_maxi_articles = 0;
       while ($ma_recherche = $acces_table -> fetch())
       {
           $table_nombre_maxi_articles = $table_nombre_maxi_articles+ 1;
       }
     
       // Je dispose de ma limite haute, je me penche sur le remplissage de mes variables SEO
     
          if(isset ($_GET['SEO']) AND !empty($_GET['SEO']) AND is_numeric($_GET['SEO']) AND $_GET['SEO']>0 AND $_GET['SEO'] <= $table_nombre_maxi_articles)
          {
              //$_GET['SEO'] existe, est un numérique, est compris dans la fourchette de valeur de ma table donc tout est ok
              //Avec tous ces paramètres, il y a t-il un risque de sécurité? (injection de code...?)
     
              //Je génère l'accès à la table articles
              $acces_table = $acces_bdd-> query('SELECT * FROM table_articles');
     
              //La table article est complétée en manuel. Même l'id. 
              // Le lien entre la table et la données $_GET['SEO'] et l'id de ce fait
     
             while ($ma_recherche = $acces_table -> fetch())
             {
                 if($ma_recherche['id']==$_GET['SEO'])
    	     {
                      $index_seo_title = $ma_recherche['seo_title'];
                      $index_seo_description = $ma_recherche['seo_description'];
                  }
                  else //Y-a-t il une façon plus propre d'écrire cela?  Car finalement je me retrouver avec deux else à la suite qui donne la même info... 
                  {
                      $index_seo_title = "Titre général du site";
                      $index_seo_description = "Description générale du site";
                  }
     
             }  
     
          }
          else // Dans tous les autres cas
          {
             $index_seo_title = "Titre général du site";
             $index_seo_description = "Description générale du site";
          }
     
    ?>
     
    <html>
     
       <head>
     
    		 <meta charset ="utf-8"/>
     
    		<title><?php echo $index_seo_title;?></title> <!-- SEO TITRE CHANGEANT -->
     
                     <meta name="description" content="<?php echo $index_seo_description;?> "> <!-- SEO META DESCRIPTION CHANGEANTE -->
     
    		 <link rel="shortcut_icon" type="image/x-icon" href="Header/Logo.png"/> <!-- Insertion du logo dans la barre... Pour le coup, ça ne marche pas ça...-->
     
    		<link rel="stylesheet" href="feuilledestyle.css"/> <!-- Feuille de style principal -->
     
    	</head>
     
    </html>
    D'avance merci pour votre aide et retour d'expérience qui me permettent de continuer d'apprendre

    EDIT: Je pense qu'il faut que je supprime !empty($_GET['SEO']).
    De mémoire, il me semble que si je n'ai qu'un seul caractère dedans, cela sera considéré comme vide.
    Donc pour un retour chiffré de 1 à 9... mon code ne serait pas lu.

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 666
    Par défaut
    j'ai l'impression que je n'ai pas compris votre problème. ou alors vous cherchez quelque chose de compliqué et la bonne nouvelle est que c'est beaucoup plus simple que ça.

    si vous êtes débutant dans le développement web, je vous propose de lire la réponse que j'ai mise là dans une autre discussion, peut-être que cela vous aider à mieux comprendre comment structurer votre application :
    https://www.developpez.net/forums/d2.../#post11803584

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Par défaut
    Merci pour votre retour.
    Je parcours ces éléments et reviens vers vous.

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 256
    Par défaut
    Prends de façon globale le SEO comme du contenu comme un autre du point de vue PHP.

    Un fichier .php peut/va contenir une partie fixe qui est du simple code HTML (et CSS, Javascript), et les éléments dynamique entre balise <?php ...?> générant du HTML du point de ce qui est présenté au navigateur.

    Dans le cas de balise <TITLE>, si tu écris du code from scratch, il y a peu d’intérêt de le faire en PHP, autant le coder en dur vu que le titre d'une page va rester fixe si tu veux faire du SEO.
    Pour le SEO, il faut avoir des liens lisibles naturellement et donc éviter les liens genre https://monsite.com/page1?liste et privilégier des liens de type https://monsite.com/liste_elements,
    Il faut que ton site soit en https avec un certificat non autogénéré.
    Il faut aussi que ton site soit responsive càd que l'affichage s'adapte à ton type d'écran. Cela se fera avec le CSS.
    liste non exhaustive.

    Si tu utilises un CMS (exemple WordPress, Joomla), les données comme le titre de la page seront stockés dans une base de données, comme le contenu de la page, et c'est le code du CMS qui générera la page depuis les éléments dans la base, le back-end te facilitant la mise en page, et l'ajout de fonctionnalités comme un menu, un slider, etc.

    Si tu utilises un Framework, tu vas utiliser des composants logiciels et tu dois adapter ta façon de faire au fonctionnement de celui-ci. Tu en as de simples à utiliser mais aussi certains nécessitant un certain niveau
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Par défaut
    Bonjour Chrtophe,

    Merci pour ton retour.

    Pour remettre le contexte et situer mon niveau, j'ai assimilé (et continue d'assimiler bien sur) le HTML/CSS + PHP/MySQL.
    Avec ces éléments de langage j'ai créé un site custom sans me soucier du SEO dans un premier temps.

    J'ai réalisé un petit schéma ci-dessous pour la compréhension (j'ai un peu de mal à expliquer sinon )

    Nom : Vision_schema_site.PNG
Affichages : 306
Taille : 26,3 Ko

    Ma page index.php contient:
    . la partie <head></head> où se situent les balises SEO title + meta description
    . l'inclusion des pages que je place entre les balises <body></body>

    Lors de la première ouverture de la page, les balises SEO contiennent les informations générales sur le site.

    Quand je clique sur navigation (A), je change le contenu de corpsdepage.php (je charge un page dfférente suivant la demande de l'utilisateur).
    L'une de ses pages est une page qui contient un résumé des différents articles + un lien vers les articles.
    Si je clique sur le lien d'un article, celui-ci remplace la page précédente (la page article est incluse à la place de la page corpsdepage.php).

    1) Ma problématique: Mes pages articles ne contiennent pas les balises <head></head> (qui sont déjà contenues dans index.php) et de ce fait pas les balises SEO.
    C'est la raison pour laquelle je souhaitais que dès lors que je charge une page article, le contenu des balises SEO change suivant le contenu de l'article (B).
    En effet, je ne suis pas certain que je puisse changer la structure du code:

    <html>
    <head></head>
    <body></body>
    </html>

    par:
    <html>
    <body></body>
    <head></head>
    </html>
    Auquel cas il serait effectivement possible d'inclure un title et un meta description écrit en dur en html pour chaque page.

    2) Tu soulèves à juste titre un second problème auquel je suis confronté... les liens...
    Ces derniers ressemblent en effet plus à https://monsite.com/page1?liste qu'à cela: https://monsite.com/liste_elements
    Je ne sais pas encore comment résoudre ce problème...

    Ma page article est structurée de la sorte:
    Nom : cdp_vision.PNG
Affichages : 162
Taille : 19,2 Ko

    L'utilisateur arrive dessus depuis la navigation (je reçois un GET) (C)
    Si ma page ne reçoit pas d'autre entrée (GET article n°x), alors elle va chercher dans une table des données:
    id - thème de l'article - titre de l'article - description de l'article - lien vers l'article (nom de la page.php spécifique à l'article)
    Et génère un résumé par article via un while... jusqu'à ce que la table soit entièrement lue.

    Dès que l'utilisateur a accès aux résumés, il peut cliquer sur un des liens menant vers les articles.
    Cliquer sur un lien génère le "GET article n°x"
    Et si le GET article n°x existe, alors ma page n'affiche pas tous les articles disponibles mais va inclure la page demandés (D)
    Exemple: comprendreleSEO.php (ce qui est loin d'être mon cas pour le moment )

    Mon problème: Le lien dans la barre d'adresse n'est pas monsite.php/comprendreleSEO.php mais plutôt monsite.php&article=x

    Cela doit se changer facilement, mais pour le moment je n'ai pas encore eu l'étincelle sur comment résoudre ce point

    3) Le responsive je l'ai pris en compte vis le CSS. C'est du fait maison mais l'affichage semble correct sur les différents supports que j'ai pu utiliser.
    Ce n'est pas parfait mais le résultat est correct (je dois encore améliorer deux/trois points...).
    C'est aussi comme cela qu'on apprend

    4) Tu as (à nouveau) raison.
    Je ne m'étais pas penché sur la manière d'obtenir un https...
    Suite à mes lectures toutes fraiches d'hier soir... j'ai vu qu'il fallait acheter un certificat suivant le type de site (vitrine, eboutique...).
    Je dois encore creuser ce point car les tarifs ne sont pas les mêmes suivants ce que l'on souhaite réaliser.
    A termes, je souhaite vendre des produits sur mon site (made in moi même).
    A date, je n'ai pas encore fait la jonction avec la partie financière (mettre en place une passerelle entre une banque et mon site, quelle passerelle, comment la paramétrer...).
    Y'a encore un peu de taf car c'est une partie que je n'ai jamais vu.
    Et la question que je me posais est:
    . Faudra -t-il un super certificat (qui coute très cher) pour tout couvrir
    . Ou un certificat type vitrine et la partie paiement qui renvoie vers la banque. Et auquel cas, est ce que la banque dispose déjà d'un certificat https?

    Voila tu sais tout.

    Il me reste encore plein de choses à découvrir et c'est vrai que mes questions peuvent vous sembler très basiques.
    J'arrive mieux à assimiler par petit bout et avec la pratique.
    C'est la raison pour laquelle je n'ai pas encore commencer d'autres langages (peur de mélanger, peur de survoler les langages que j'ai déjà appris... car apprendre un langage ce n'est pas en maitriser les subtilités... et des subtilités j'en découvre encore...).

    Du coup, désolé pour mes questions basiques et encore merci pour le temps que vous m'accordez, et vos conseils qui me permettent de mieux comprendre/ voir de corriger ce que je n'aurai pas bien capté

    EDIT: Pour les CMS, j'avoue avoir lu des éléments dessus mais sans trop m'y pencher. J'avais cependant l'intuition qut tout était stocké dans des tables d'une BDD. Et que l'on piocher dans le contenu des tables pour générer les pages. Partant de cette hypothèse... c'est la raison pour laquelle j'ai voulu alimenter les contenus des balises SEO via des données contenues dans une table (d'où le <?php echo $seo_title...;?>).

  8. #8
    Membre averti
    Avatar de LAB3W
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2022
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2022
    Messages : 26
    Par défaut
    En quelques mots :

    Tu crées une page index.php comme tu l'a fait ici avec que du HTML et des include PHP.



    Puis tu te crée en plus une fichier head.php avec tes balises pour le SEO - Tout ton code PHP que nous a montré/écris.

    Et tu te crées une page article.php qui ressemble à index.php donc avec que du HTML et des include 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
    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
    42
    # Exemple de page index.php et de la page article.php
    <?php
    #phpinfo(); exit;
     
    include head.php
     
    ?>
     
    <html>
     
       <head>
     
    		<meta charset ="utf-8"/>
     
    		<title><?php echo $index_seo_title;?></title> <!-- SEO TITRE CHANGEANT -->
     
                     <meta name="description" content="<?php echo $index_seo_description;?> "> <!-- SEO META DESCRIPTION CHANGEANTE -->
     
    		 <link rel="shortcut_icon" type="image/x-icon" href="Header/Logo.png"/> <!-- Insertion du logo dans la barre... Pour le coup, ça ne marche pas ça...-->
     
    		<link rel="stylesheet" href="feuilledestyle.css"/> <!-- Feuille de style principal -->
     
    	</head>
     
    <body>
    <?php
        switch($_SERVER['SCRIPT_NAME']) {
     
           default:
           case '/index.php':
                include 'home.php' 
           break;
     
           case '/article.php':
                include 'corpsdepage.php' 
           break;
     
       }
    ?>
    </body>
     
    </html>
    Et du change le corps de page...

    C'est à dire :

    Dans le fichier home.php tu écris un text de présentation pour ta page d'accueil.
    Dans le fichier corpsdepage.php tu demandes ou récupère et affiche que le contenus texte par exemple de tes articles - comme tu l'as fait pour les balises meta-title et meta-description.

    Et c'est tout !

    //------

    En 1ere ligne je t'ai ajouté la fonction native de PHP qui te retourne des variables d'environnements et globales - Qui te renseigne ou t'aide à travailler !

    Regarde les PHP Variables : $_SERVER et d'autres.. en dé-commentant la 1ere ligne pour afficher le contenu de la fonction phpinfo();

    Bon courage

    Romain.

  9. #9
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Par défaut
    Bonjour Romain,

    Merci pour ton retour.
    Après avoir lu ton message je sais... que je ne sais rien

    Ton message n'est pas long et pourtant cela fait déjà plusieurs heures que je trime dessus.
    Je m'arrête sur beaucoup de choses... Une claque en moins de 5min top chrono.

    Côté positif, ma marge de progression est énorme.
    Côté négatif, le travail à réaliser est encore énorme...

    1) phpinfo(), j'avoue qu'avec mon niveau actuel, je n'imagine pas trop ce qu'il est possible de faire avec les infos que me renverront cette fonction

    2) Placer mon code php dans head.php en amont des balises <head></head> sert simplement pour la lisibilité de mon code ou il y a un autre intérêt (que je n'ai pas encore capté )?

    3) J'ai du mal à comprendre ce que renvoie: switch($_SERVER['SCRIPT_NAME']) et qu'est ce qui va l'alimenter.
    Comment savoir si l'on doit afficher home.php ou corpsdepage.php.
    Avec un $_GET['paramètre'] je comprends. Autant la je ne vois pas comment ce paramètre générique/figé se "complète".

    4) Dans ton exemple, la page corpsdepage.php doit complétement être générée en récupérant les infos dans une table d'une BDD c'est bien cela?
    Quel est l'intérêt de faire cela comparé au chargement de diverses pages articles?
    Si je ne charge pas diverses pages articles, je n'arriverai pas à afficher le nom de la page article dans mon url non?

    Je m'arrête après ces premières questions qui te paraitront fort basiques.
    Je suis encore dans le flou et la lecture des définitions (par exemple sur le manual php) n'enlève pas ce flou.
    En gros je lis le manuel, mais ne comprends pas ce que je lis... :
    Et comme je ne comprends pas ce que je lis, je n'arrive pas à capter les subtilités que tu essaies de m'enseigner

  10. #10
    Membre averti
    Avatar de LAB3W
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2022
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2022
    Messages : 26
    Par défaut
    Citation Envoyé par BOU59000 Voir le message
    Côté positif, ma marge de progression est énorme.
    CooL !

    Citation Envoyé par BOU59000 Voir le message
    Côté négatif, le travail à réaliser est encore énorme...
    CooL

    Citation Envoyé par BOU59000 Voir le message
    1) phpinfo(), j'avoue qu'avec mon niveau actuel, je n'imagine pas trop ce qu'il est possible de faire avec les infos que me renverront cette fonction
    C'etait pour t'expliquer / te monter pourquoi j'avais fait un switch en interrogeant la variable native PHP $_SERVER['SCRIPT_NAME']

    Citation Envoyé par BOU59000 Voir le message
    2) Placer mon code php dans head.php en amont des balises <head></head> sert simplement pour la lisibilité de mon code ou il y a un autre intérêt (que je n'ai pas encore capté )?
    Oui bien sur : justement c'est ton fichier PHP reeel (sans code HTML) qui se connecte à la Base de données et récupére tes INFOS SEO et TEXTE - Donc infos que tu peut te servir partout - dans tous les include du dessous.

    Citation Envoyé par BOU59000 Voir le message
    3) J'ai du mal à comprendre ce que renvoie: switch($_SERVER['SCRIPT_NAME']) et qu'est ce qui va l'alimenter.
    Comment savoir si l'on doit afficher home.php ou corpsdepage.php.
    Avec un $_GET['paramètre'] je comprends. Autant la je ne vois pas comment ce paramètre générique/figé se "complète".
    CF : Le site du language PHP et son moteur de recherche des fonction PHP : switch

    En clair $_SERVER['SCRIPT_NAME'] est la variable native qui retourne le nom du fichier appelé dans l'URL - Barre d'adresse !

    Citation Envoyé par BOU59000 Voir le message
    4) Dans ton exemple, la page corpsdepage.php doit complétement être générée en récupérant les infos dans une table d'une BDD c'est bien cela?
    Quel est l'intérêt de faire cela comparé au chargement de diverses pages articles?
    Si je ne charge pas diverses pages articles, je n'arriverai pas à afficher le nom de la page article dans mon url non?
    Dans ton script PHP que je t'ai dis de mettre dans un fichier head.php - je ne comprend pas ton $_GET['SEO'] etc.....

    Logiquement dans ta table "SELECT * FROM table_articles" tu doit avoir un champ IDentifiant

    Puis quand tu fais des liens vers des article.php - Pour ton article 1 - tu feras un href - exemple <a href="/article.php?id=1">Liens vers l'article 1</a> - Pour ton article 2 - tu feras un href - exemple <a href="/article.php?id=2">Liens vers l'article 2</a>

    Puis après dans ton fichier head.php >> tu demandes $_GET['id'] << exemple : SELECT * FROM table_articles WHERE id = $_GET['id']; Et hop du aura les meta-title et meta-description et text de l'article en question !

    Puis dans ton fichier corpsdepage.php - tu fais des echo de title et description et texte que tu as créé dans head.php

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    // Exemple de page corpsdepage.php
     
    echo '<h2>'.$article_seo_title.'</h2>';
    echo '<p>'.$article_seo_description.'</p>';
     
    echo '<div id="article" class="corps">'.$article_seo_text.'</div>';
     
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    // Exemple de page home.php
     
    echo '<h2>'.$index_seo_title.'</h2>';
    echo '<p>'.$index_seo_description.'</p>';
     
    echo '<div id="home" class="corps">'.$index_seo_text.'</div>';
     
    ?>

    Bon courage.

    Romain


    Citation Envoyé par BOU59000 Voir le message
    Je m'arrête après ces premières questions qui te paraitront fort basiques.
    Je suis encore dans le flou et la lecture des définitions (par exemple sur le manual php) n'enlève pas ce flou.
    En gros je lis le manuel, mais ne comprends pas ce que je lis... :
    Et comme je ne comprends pas ce que je lis, je n'arrive pas à capter les subtilités que tu essaies de m'enseigner
    Bon apprentissage - C'est comme tout il faut pratiquer

  11. #11
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Par défaut
    Bonjour Romain,

    Merci pour ton retour.

    Je teste cela ce jour et reviens vers toi suite à ma séance pratique (+mon code mis à jour)

  12. #12
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Par défaut
    Bonjour Romain,

    J'ai eu moins de temps que prévu pour moi ce samedi...
    D'où mon retour dans la livraison des mes avancées seulement ce jour.

    Je suis parti sur la création d'un site d'apprentissage que j'ai appelé "Bac A Sable".
    Cela permettra de me concentrer sur l'apprentissage des seuls éléments dont nous parlons + disposer des mêmes supports.

    Voici l'ensemble de mes fichiers (histoire d'avoir un semblant de vrai site )
    Nom : fichiers_001.PNG
Affichages : 136
Taille : 5,5 Ko

    Et dans mon dossier articles:
    Nom : fichiers_002.PNG
Affichages : 136
Taille : 2,1 Ko

    Fichier index.php - j'ai retiré la partie head que j'ai placé dans un fichier spécifique comme échangé:
    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
    42
    43
    44
    45
    46
    47
    48
     
    <?php
     
    	session_start(); // Permet d'utiliser les variables superglobales
     
    ?>
     
    <HTML>
     
    	<?php include ("balise_head.php"); // Insertion des balises <HEAD></HEAD> ?>
     
    	<BODY>
     
    		<?php include ("entete.php"); // Insertion du bloc Entete ici ?>
     
    		<?php include ("navigation.php"); // Insertion du bloc Navigation ici ?>
     
    		<section>
     
     
    			<?php // Insertion des pages contenus ici
     
    			// L'accès aux pages se fera suivant les autorisations qui ont été données
    			if(isset($_GET['page']) AND !empty($_GET['page']))
    			{
    				$page = array('page1' =>1, 'page2' =>2);
     
    				if(in_array($_GET['page'], $page)) 
    				//Ici je vérifie si la valeur de Get est comprise dans mon array
    				{
    					include('corps_page' . $_GET['page'] . '.php');
    				}
    			}
    			else
    			{
    				include('corps_page1.php');
    			}
     
    			?>
     
     
    		</section>
     
    		<?php include ("pied.php"); // Insertion du pied de page ici ?>
     
    	</BODY>
     
    </HTML>
    Le fichier balise_head.php:
    Cela fonctionne sauf le cas où $_GET['SEO'] == 1 ou cela me renvoie directement dans le ELSE.
    Pour des retour autre que 1, mes balises SEO title + meta description prennent bien les valeurs qu'elles doivent prendre.
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    <?php
     
        // L'utilisateur clique sur un lien contenu dans navigation  par exemple. 
    	// Ce lien permet d'inclure une page dans mon index.php. Ce lien possède une info de type SEO=valeur. 
        // Ce qui permet de compléter des variables SEO: $index_seo_title (pour le titre) et $index_seo_description (pour la description)
     
        // Etape 1 - Je vérifie de combien d'articles je dispose, cela constituera ma limite supérieure
        // Connexion à la base de données
        try
    	{
    		$acces_bdd = new PDO('mysql:host=localhost;dbname=bacasable;charset=utf8', 'root','', 
    		array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)  );
    	}
    	catch (Exception $e)
    	{
    		die('Erreur : ' . $e->getMessage());
    	}
     
        //Je génère l'accès à la table articles
        $acces_table = $acces_bdd-> query('SELECT * FROM table_articles');
     
        //Je regarde le nombre total d'items dans ma table. Ce qui va définir ma limite haute
     
       $table_nombre_maxi_articles = 0;
       while ($ma_recherche = $acces_table -> fetch())
       {
           $table_nombre_maxi_articles = $table_nombre_maxi_articles+ 1;
       }
     
       // Je dispose de ma limite haute, je me penche sur le remplissage de mes variables SEO
     
        if(isset ($_GET['SEO']) AND !empty($_GET['SEO']) AND is_numeric($_GET['SEO']) AND $_GET['SEO']>0 AND $_GET['SEO'] <= $table_nombre_maxi_articles)
        {
            //$_GET['SEO'] existe, est un numérique, est compris dans la fourchette de valeur de ma table donc tout est ok
     
            //Je génère l'accès à la table articles
            $acces_table = $acces_bdd-> query('SELECT * FROM table_articles');
     
             while ($ma_recherche = $acces_table -> fetch())
             {
                 if($ma_recherche['Id']==$_GET['SEO'])
    	     {
                      $index_seo_title = $ma_recherche['titre_seo'];
                      $index_seo_description = $ma_recherche['description_seo'];
                  }
                  else //Y-a-t il une façon plus propre d'écrire cela?  Car finalement je me retrouver avec deux else à la suite qui donne la même info... 
                  {
                      $index_seo_title = "Titre général du site";
                      $index_seo_description = "Description générale du site";
                  }
     
             }  
     
          }
          else // Dans tous les autres cas
          {
             $index_seo_title = "Titre général du site";
             $index_seo_description = "Description générale du site";
          }
     
    ?>
     
     
    <HEAD>
     
    	<meta charset ="utf-8"/>
     
    	<title><?php echo $index_seo_title;?></title> <!-- SEO TITRE CHANGEANT -->
     
        <meta name="description" content="<?php echo $index_seo_description;?> "> <!-- SEO META DESCRIPTION CHANGEANTE -->
     
    	<link rel="shortcut_icon" type="image/x-icon" href="Header/Logo.png"/> <!-- Insertion du logo dans la barre... Pour le coup, ça ne marche pas ça...-->
     
    	<link rel="stylesheet" href="feuilledestyle.css"/> <!-- Feuille de style principal -->
     
    	<!-- Permet de fixer les éléments sur une partie de l'écran -->
    	<style>
            html,
            body 
            {
            margin: 0;
            padding: 0;
            }
            header
            {
            position: sticky;
            top: 0;
            height: 11em;
            }
            nav
            {
            position: sticky;
            top: 12em;
            }
        </style>
     
    </HEAD>
    Navigation.php - rien de transcendant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <nav>
     
    	<div class = "nav_n_un_deux">
     
    		<a href="index.php?page=1">Accueil</a> 
     
    		<a href="index.php?page=2">Articles</a> 
     
    	</div>
     
    </nav>
    corps_page1.php, pied.php, article1.php et article2.php sont des coquilles vides du coup je ne place pas le code. Pas trop d'intérêt.

    Le plus intéressent est corps_page2.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
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
     
    <article>
     
    	<?php
    	// 0 - Que je sois en 1 ou en 2, dans tous les cas j'ai besoin d'accéder à la table_articles de ma BDD bacasable
    	// 1 - Si je dispose d'une variable GET valable alors je parcoure If. Ce qui me permettra d'obtenir l'article désiré. 
    	// 2 - Si non, je présente au lecteur tous les articles disponibles sous formes de résumé vers les articles.
     
    	// 0 - Que je sois en 1 ou en 2, dans tous les cas j'ai besoin d'accéder à la table_articles de ma BDD bacasable
     
    	// ------------------------------------------------------------------------------------------------
    	//                                     ACCES A LA TABLE
    	// ------------------------------------------------------------------------------------------------
    	try
    	{
    		$acces_bdd = new PDO('mysql:host=localhost;dbname=bacasable;charset=utf8', 'root','', 
    		array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)  );
    	}
    	catch (Exception $e)
    	{
    		die('Erreur : ' . $e->getMessage());
    	}
     
    	//Je génère l'accès à la table articles
        $acces_table = $acces_bdd-> query('SELECT * FROM table_articles');
     
    	// Je regarde combien de lignes sont présentes dans ma table_article
    	$compteur = 0;
    	while ($retour_donnees = $acces_table->fetch())
    	{
    		// J'ajoute 1 pour chaque ligne contenue dans ma table
    		$compteur = $compteur +1;
    	}
     
    	// 1 - Si je dispose d'une variable GET valable alors je parcoure If. Ce qui me permettra d'obtenir l'article désiré.
     
    	// ------------------------------------------------------------------------------------------------
    	//                                     ACCES A UN ARTICLE
    	// ------------------------------------------------------------------------------------------------
     
    	if(isset($_GET['id']) AND !empty($_GET['id']) AND is_numeric($_GET['id']) AND $_GET['id']>0 AND $_GET['id']<$compteur+1)
    	{
    		// Je me protège contre la donnée entrante
    		$id = htmlspecialchars($_GET['id']);
     
    		// J'ouvre un accès vers la table upvs_cp2_articles
    		$acces_table = $acces_bdd ->query('SELECT * FROM table_articles');
     
    		// Je récupète l'article demandé
    		while ($retour_donnees = $acces_table->fetch())
    		{
    		if($retour_donnees['Id']== $id)
    			{
    			include ("articles/".$retour_donnees['lien'].""); // ENTETE
    			}
    		}
    	}
     
    	// 2 - Si non, je présente au lecteur tous les articles disponibles sous formes de résumé vers les articles.
     
    	// ------------------------------------------------------------------------------------------------
    	//                              PRESENTATION DE TOUS LES ARTICLES
    	// ------------------------------------------------------------------------------------------------
     
    	else
    	{
    	?>
     
    		<div class = "article_pg_ppale_master">
     
    			<div class = "article_pg_ppale_contenu">
     
    				<div class = "article_pg_ppale_articles">
     
    					</br>
     
    					<?php
    					// J'ouvre un accès vers la table upvs_cp2_articles
     
    					$acces_table = $acces_bdd ->query('SELECT * FROM table_articles ORDER BY Id DESC');
     
    					// Je parcours tous les éléments de ma table 
    					while ($retour_donnees = $acces_table->fetch())
    					{
    					// J'ajoute 1 pour chaque ligne contenue dans ma table upvs_cp2_articles et je génère un tableau par ligne
    						?>
    						<table class="article_pg_ppale_tableau">
    							<tr>
    								<td class = "article_pg_ppale_tab_theme"><?php echo $retour_donnees['theme']; ?></td>
    								<td><?php echo $retour_donnees['date']; ?></td>
    							</tr>
    							<tr>
    								<td rowspan = "2"> Insertion de l'image </td>
    								<td>
    									<p><?php echo $retour_donnees['titre_contenu']; ?></p>
    									<p><?php echo $retour_donnees['description_contenu']; ?></p>
    								</td>
    							</tr>
    							<tr>
    								<td class = "article_pg_ppale_tab_theme"> <a href="index.php?page=2&amp;id=<?php echo $retour_donnees['Id']; ?>&amp;SEO=<?php echo $retour_donnees['Id']; ?>"> Lien </a>  </td>
    							</tr>
    						</table>
    						</br>
    						<?php
    					}
    					?>
     
    				</div> <!-- article_pg_ppale_articles -->
     
    				<div class = "article_pg_ppale_numerotation">
    				   <p> Page n° 1/1 </p>
    				</div> <!-- article_pg_ppale_numerotation -->
     
    			</div> <!-- article_pg_ppale_contenu -->
     
    			<div class = "article_pg_ppale_aside">
     
    				<p> Ceci est mon aside </p>
     
    			</div> <!-- article_pg_ppale_aside -->
     
    		</div> <!-- article_pg_ppale_master -->
    	<?php
    	}
    	?>
     
    </article>
    1) J'avais déjà vu le switch mais je ne l'utilise quasiment pas. Plus d'affinité avec les if elseif else du coup il m'a fallu un peu de temps pour capter.
    Merci pour tes explications sur le script_name qui m'ont aidé à situer le tout.
    En gros, si dans mon url la page qui est chargée est index.php j'inclus home.php (qui est en fait mon corps_page1.php ou dit autrement la page d'accueil du site web)
    Si dans mon url j'ai chargé article.php alors j'inclus la page corpsdepage.php.

    Si je ne dis pas de bêtise, le code ci-dessous:

    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
     
    <?php
        switch($_SERVER['SCRIPT_NAME']) {
     
           default:
           case '/index.php':
                include 'home.php' 
           break;
     
           case '/article.php':
                include 'corpsdepage.php' 
           break;
     
       }
    ?>
    A plus ou moins la même logique que ce que j'ai écris ici, non?:
    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
     
    <?php // Insertion des pages contenus ici
     
    			// L'accès aux pages se fera suivant les autorisations qui ont été données
    			if(isset($_GET['page']) AND !empty($_GET['page']))
    			{
    				$page = array('page1' =>1, 'page2' =>2);
     
    				if(in_array($_GET['page'], $page)) 
    				//Ici je vérifie si la valeur de Get est comprise dans mon array
    				{
    					include('corps_page' . $_GET['page'] . '.php');
    				}
    			}
    			else
    			{
    				include('corps_page1.php');
    			}
     
    			?>
    Ou alors cela n'a rien à voir et je n'ai toujours pas compris
    L'intérêt que je vois sur ton code par rapport au mien est que je dépend d'une $_GET et que l'utilisateur peut me truander... Avec ton code cela n'est pas possible.
    C'est bien cela?

    2) La logique de créer une page article.php qui soit un clone de index.php est de permettre d'avoir une url de type www.monsite.fr/article.php quand je clique sur article.
    Plutôt que www.monsite.fr/index.php?page=3.
    C'est bien cela?

    La seule différence est que le contenu de cette page sera généré en piochant des infos dans une table de type:
    Nom : fichiers_003.PNG
Affichages : 129
Taille : 34,4 Ko
    La page article.php piochera, par exemple, le titre_contenu et description_contenu suivant l'article que l'on aura demandé. Et en affichera ses éléments.

    Si oui, je n'ai pas encore réalisé ce clone car j'avais cru comprendre qu'en SEO, il est important d'avoir le titre de l'article dans l'URL de la page.
    Pour cela, une page spécifique doit être appelée non?
    Le fait de passer par article.php améliore l'url mais ne permet pas d'inclure le titre de la page dans l'url, non?
    D'où la raison pour laquelle j'ai créé les pages article1.php et article2.php.
    En revanche, la où je ne suis pas encore bon... comme j'inclus ces pages... elles n'apparaissent toujours pas dans la barre URL...

    Ce qui me fait penser qu'il y a une subtilité avec le clonage de ma page index que je n'ai peut-être pas encore bien capté...

  13. #13
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Par défaut
    Bonjour Romain,

    Après plusieurs manipulations cela a commencé à se structurer dans mon esprit.
    Grâce à des pistes j'ai pu obtenir le résultat que je voulais.

    J'ai aussi pu mettre en valeur certains manques dans mes connaissances (que j'ai listé) sur lesquels je compte travailler (plusieursssssss heuresssss en perspective! lol)

    Un grand merci en tout cas pour ton aide

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/10/2011, 23h30
  2. [RegEx] prendre en compte les # dans un get php
    Par xess91 dans le forum Langage
    Réponses: 3
    Dernier message: 23/10/2009, 21h17
  3. Réponses: 2
    Dernier message: 07/07/2004, 17h44
  4. [plugin][tomcat] Comment prendre en compte les jar ?
    Par djodjo dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 08/04/2004, 19h47

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