Problème $_GET + BDD

Résolu
killermano66 Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   -  
killermano66 Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,
J'essaie de construire une structure pour un site web avec la méthode GET affin de me faciliter la tâche lors de futures modifications. Tout fonctionne très bien au niveau de l'affichage des pages de base, je vous met le script ici même :

<div>
MON MENU :
<a href="index.php?page=news">News</a>
<a href="index.php?page=articles">Articles</a>
<a href="index.php?page=forums">Forums</a>
<a href="index.php?page=medias">Medias</a><br /><br /><br />
<div>

<div>
CONTENUE DES PAGES DU MENU :<br />

<?php
$id = intval($_GET["id"]);

if ($_GET['page'] == "news") {include("news.php");}
if ($_GET['page'] == "articles") {include("articles/main.php");}
if ($_GET['page'] == "forums") {include("forums.php");}
if ($_GET['page'] == "medias") {include("medias.php");}
?>
</div>

Voilà donc jusqu'ici, tout va très bien. Mon soucis vient au niveau de la page articles\main.php. Je veux y inclure le contenu d'une base de donnée. Mon staff ayant la possibilité de poster ses articles par le biais de formulaire incluant les données dans une base de données. Les données étant triés par id j'aimerais afficher mes articles avec une url du genre

index.php?page=article?id=2

qui irait donc chercher l'article portant l'id 2 dans ma base de données et l'afficherais dans la partie CONTENUE DES PAGES DU MENU sans bien sur me virer le MENU.

Je vous met le contenue de ma page /articles/main.php :
<?php
include('connection.php');
$requete_selection = mysql_query('SELECT * FROM articles') or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
while ($donnees = mysql_fetch_array($requete_selection)){

echo '<a href="index.php?page=article?id='.$donnees['id'].'">';
echo $donnees['titre'] . '</a>' . ' ' . 'écrit par ';
echo $donnees['auteur'] . '<br />';
}
?>

Donc la je suis bien conscient que le problème vient d'ici : ?id='.$donnees['id'].'">';
Mais je n'arrives pas à le résoudre, quand je clique sur le liens de mes articles, je reste sur la base de la page index.php avec mon menu etc ... mais l'article n'est pas présent (je peux vous certifier que celàa ne vient pas d'un problème de BDD car les articles s'affichent bien un a un). Je fais donc appel à vos lumières, en espérant trouver une réponse en attendant, je vous remercies de votre attention ;)

Cordialement,
Configuration: Windows Vista
Firefox 3.0.6

34 réponses

  • 1
  • 2
Résumé de la discussion

Le problème consiste à afficher dynamiquement le contenu d'un article récupéré dans une base de données en utilisant une URL du type index.php?page=article&id=2 tout en conservant le menu. Pour y parvenir, récupérer l'id via $_GET['id'], sécuriser sa valeur avec intval, puis afficher le contenu dans la zone CONTENUE DES PAGES DU MENU après une requête SELECT * FROM articles WHERE id = ... . Des détails pratiques incluent la standardisation du routage (par exemple index.php?page=articles&id=2), la vérification de l'existence de l'id et l'utilisation d'inclusions locales plutôt que d'URL distantes. En cas de persistance, privilégier une approche locale et homogène des pages, surveiller l'incohérence entre 'article' et 'articles' dans les paramètres et éviter les inclusions par des liens externes.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. karando
     
    Salut,
    Essaye d'ecrire : index.php?page=article&id='.$donnees['id'].'

    change le ? devant id par &
    0
    1. Psyk974 Messages postés 559 Statut Membre 51
       
      <?php
      if ($_GET['page'] == "news") {include("news.php");}
      if ($_GET['page'] == "articles") {include("articles/main.php");}
      if ($_GET['page'] == "forums") {include("forums.php");}
      if ($_GET['page'] == "medias") {include("medias.php");}


      index.php?page=article&id='.$donnees['id'].'
      ?>

      Ya pas un truc qui cloche là ??? un coup tu utilises "articles" et un coup "article" lol

      et effectivement remplace le ? à coté de id par &
      0
  2. stephane_mc2004 Messages postés 807 Statut Membre 96
     
    je suis d'accord. ou encore tu peux utiliser & amp ; (il n'ya pas d'espace entre les symboles et les lettres) au lieu de &
    0
    1. Psyk974 Messages postés 559 Statut Membre 51
       
      ????
      0
  3. killermano66 Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   41
     
    Ok ok, effectivement il y avait une erreur d'où le fait que quand je cliquais sur les liens ça m'affichait une page vide vu qu'elle était inexistante. Inattention de ma part.

    En revanche maintenant que cette erreur est corrigée, rien ne se passe quand je cliques sur les divers liens, aucune autres pages n'est inclus je garde l'affichage du listing de mes articles et un simple changement dans l'url :

    url article 1 : index.php?page=articles&id=1
    url article 2 : index.php?page=articles&id=2
    url article 3 : index.php?page=articles&id=3
    url article 4 : index.php?page=articles&id=4

    etc ... ... ...

    C'est le seul changement que j'ai lors du clic sur les divers liens. Les articles ne s'incluent toujours pas.

    Merci à vous deux ;)
    0
    1. Psyk974 Messages postés 559 Statut Membre 51
       
      Est ce que ton paramètre passe bien dans l'url ?

      Si oui montre nous le code de ta page "articles.php"
      0
  4. killermano66 Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   41
     
    Il n'y a pas de page articles.php mais une page main.php dans un répertoire articles :

    if ($_GET['page'] == "articles") {include("articles/main.php");}

    Je te remet le code de cette page main ici :

    <?php
    include('connection.php');

    $requete_selection = mysql_query('SELECT * FROM articles') or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    while ($donnees = mysql_fetch_array($requete_selection)){

    echo '<a href="index.php?page=articles&id='.$donnees['id'].' ">';
    echo $donnees['titre'] . '</a>' . ' ' . 'écrit par ';
    echo $donnees['auteur'] . '<br />';
    }
    ?>

    Voilà, merci bien ;)
    0
    1. Psyk974 Messages postés 559 Statut Membre 51
       
      Est ce que tu vois tous tes articles au moins ?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. killermano66 Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   41
     
    Oui, tous s'affiche sans soucis. Si tu veux le script fonctionne j'ai juste un problème pour l'inclure avec ce type de système :

    http://www.rpg-z.com/get_test/index.php?page=articles&id=1

    Ca sera peut être plus clair.
    0
    1. Psyk974 Messages postés 559 Statut Membre 51
       
      Tu veux pouvoir afficher quoi exactement ? c'est que je comprend pas...
      0
  7. stephane_mc2004 Messages postés 807 Statut Membre 96
     
    Regarde dans ta page INDEX.PHP, tu avais verifié au debut si $_GET['page'] vallait "articles" alors inclure la page main.PHP du dossier articles.
    Maintenant, tu veux dire "si page=article ALORS si ID=x, afficher le contenu de ARTICLES/MAIN.PHP mais qui affiche que les infos a propos de l'id qui a pour valeur x

    Fais ceci :

    if ($_GET['page'] == "articles") {
        if(isset($_GET['id']) { //si la variable id existe
    
             $id = $_GET['id'];     //  je cree une variable qui sapel id qui a pour valeur l'id en parametre dans l'URL
    
              /* ici tu entre le code qui te connecte a ta base de donnée */
    
              /*
               tu fais cette requete sql : SELECT * from nomdetatable WHERE id=$id 
               qui veut dire selectionner les elements de la table qui on pour id ma variable $id
               */
              /* 
               tu affiches les données ici du contenu de l'article ayant pour id $id 
               en faisant echo ~~~~['contenu'] ;  avec "~~~~~~" qui est une variable quelconque 
               que tu te serais créée comme ce que tu as fais precedemment pour afficher le titre 
                des elements de ta base de donnée
               */
              }
                
    include("articles/main.php");
    
    } 
    0
  8. killermano66 Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   41
     
    Ok merci alors j'ai testé comme tu m'as dis :

    if ($_GET['page'] == "articles"){
    if(isset($_GET['id']){ //si la variable id existe
    $id = $_GET['id']; // je cree une variable qui sapel id qui a pour valeur l'id en parametre dans l'URL
    include('connection.php');

    $requete_selection = mysql_query('SELECT * FROM articles WHERE id="$id"') or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    while ($donnees = mysql_fetch_array($requete_selection)){
    echo '<a href="index.php?page=articles&id='.$donnees["id"].' ">';
    echo $donnees['titre'] . '</a>' . ' ' . 'écrit par ';
    echo $donnees['auteur'] . '<br />';
    }
    include("articles/main.php");
    }
    }

    qui me renvoi une erreur :
    Parse error: syntax error, unexpected '{' in /home/www/8b02f9045067109a0cbb419d432d633f/web/get_test/index.php on line 18

    ligne 18 = if(isset($_GET['id']){ //si la variable id existe

    Merci de ton aide ;)
    0
    1. stephane_mc2004 Messages postés 807 Statut Membre 96
       
      je me suis trompé, il ya deux parenntheses a mettre if(isset($_GET['id'])) au lieu de if(isset($_GET['id'])
      0
  9. killermano66 Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   41
     
    Ok, merci donc cette fois ci, la liste de mes articles ne s'affiche carrément plus, j'ai l'impression que la condition :
    if(isset($_GET['id'])){

    N'est pas remplis donc que la suite ne s'exécute pas ... enfin je n'y comprend pas grand chose la.

    Voilà le code actuel :
    if ($_GET['page'] == "articles"){
    if(isset($_GET['id'])){ //si la variable id existe
    $id = $_GET['id']; // je cree une variable qui sapel id qui a pour valeur l'id en parametre dans l'URL
    include('connection.php');

    $requete_selection = mysql_query('SELECT * FROM articles WHERE id="$id"') or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    while ($donnees = mysql_fetch_array($requete_selection)){
    echo '<a href="index.php?page=articles&id='.$donnees["id"].' ">';
    echo $donnees['titre'] . '</a>' . ' ' . 'écrit par ';
    echo $donnees['auteur'] . '<br />';
    }
    include("articles/main.php");
    }
    }

    A savoir que
    $id_test = $donnees['id'];
    echo $id_test;

    Me renvois bien les id présentes dans ma BDD.

    Merci encore.
    0
  10. stephane_mc2004 Messages postés 807 Statut Membre 96
     
    Aussi, tu as écris :
    if ($_GET['page'] == "articles"){
    
    if(isset($_GET['id']){ //si la variable id existe 
    $id = $_GET['id']; // je cree une variable qui sapel id qui a pour valeur l'id en parametre dans l'URL
    include('connection.php');
    
    $requete_selection = mysql_query('SELECT * FROM articles WHERE id="$id"') or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    while ($donnees = mysql_fetch_array($requete_selection)){
    echo '<a href="index.php?page=articles&id='.$donnees["id"].' ">';
    echo $donnees['titre'] . '</a>' . ' ' . 'écrit par ';
    echo $donnees['auteur'] . '<br />';
    }
    include("articles/main.php");
    }
    }
     


    regarde ce que j'ai mis en gras. Puisque tu dois afficher QUE ce que contient l'article ayant pour id "$id", on a pas besoin de parcourir toute la base de données avec une boucle, tu fais juste :

    if ($_GET['page'] == "articles"){
    if(isset($_GET['id']){ //si la variable id existe 
    $id = $_GET['id']; // je cree une variable qui sapel id qui a pour valeur l'id en parametre dans l'URL
    include('connection.php');
    
    $requete_selection = mysql_query('SELECT * FROM articles WHERE id="$id"') or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    
    $donnees = mysql_fetch_array($requete_selection);
    echo $donnees['contenu'];
    echo $donnees['auteur'] . '<br />';
    }
    
    }
    include("articles/main.php");
    }


    avec bien sur le champ CONTENU qui contient le contenu de l'article dans la base de donnée.
    Tente de code et dis moi ce qui se passe. (celui ci-dessus)
    0
    1. stephane_mc2004 Messages postés 807 Statut Membre 96
       
      retente le code ci-dessus, j'ai fais quelques modicfications
      0
  11. killermano66 Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   41
     
    Ca ne fonctionne toujours pas, l'orsuqe je clique sur un lien ca me met un espace entre le menu et le reste de la page je te laisse tester par toi même :

    http://www.rpg-z.com/get_test/index.php?page=articles&id=7

    Sinon ma page main.php doit bien contenir :
    <?php
    include('connection.php');

    $requete_selection = mysql_query('SELECT * FROM articles') or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    while ($donnees = mysql_fetch_array($requete_selection)){

    echo '<a href="index.php?page=articles&id='.$donnees["id"].' ">';
    echo $donnees['titre'] . '</a>' . ' ' . 'écrit par ';
    echo $donnees['auteur'] . '<br />';
    }
    ?>

    non ?

    Merci encore.
    0
    1. stephane_mc2004 Messages postés 807 Statut Membre 96
       
      Je vois, l'espace est du a ce que le contenu de l'article qui a pour id $id est vide...non ?
      0
  12. killermano66 Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   41
     
    Non, les champs contenu ne sont pas vides, ils sont composés du code HTML des articles.

    Je peux les afficher avec une requete SQL mais j'aimerais que ça se fasse dynamiquement sans que j'ai a modifier la page main a chaque fois qu'un rédacteur poste un article. D'ou le fait que je me prenne la tête la dessus.

    Merci
    0
  13. stephane_mc2004 Messages postés 807 Statut Membre 96
     
    Essais ceci :
    if ($_GET['page'] == "articles"){
    if(isset($_GET['id']){ //si la variable id existe 
    $id = $_GET['id']; // je cree une variable qui sapel id qui a pour valeur l'id en parametre dans l'URL
    include('connection.php');
    
    $requete_selection = mysql_query('SELECT * FROM articles WHERE id="$id"') or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    
    $donnees = mysql_fetch_array($requete_selection);
    echo nl2br(htmlspecialchars($donnees['contenu'])) . '<br/>' ;
    echo nl2br(htmlspecialchars($donnees['auteur'])) . '<br />';
    }
    
    }
    include("articles/main.php");
    }
    
    
    0
  14. killermano66 Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   41
     
    Avec ce code j'ai deux saut de ligne au lieu de un dans le code précédent mais mes articles ne sont toujours pas présents. J'y comprend rien je vois même pas d'ou peuvent sortir ces deux saut de lignes.

    EDIT : A moins qu'ils viennent des <br /> mais dans ces cas là c'est ma BDD qui n'est pas lue et je vois pas du tout pourquois ...
    0
  15. stephane_mc2004 Messages postés 807 Statut Membre 96
     
    ces deux sauts de lignes sont dus aux deux '<br>' que j'ai mis. Donc en principe les données devraient s'afficher... ouvre ton phpMyAdmin et regarde ta table si toutes les infos sont correctes (infos de connexion a la base et tout)
    0
  16. killermano66 Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   41
     
    Regarde : http://www.rpg-z.com/script/articles/affiche_articles.php

    La ca fonctionne parceque vu que c'est externe au site la gestion des url est beaucoup plus simple avec ce code :
    affiche_article.php :
    <?php
    include('../connection.php');
    $requete_selection = mysql_query('SELECT * FROM articles') or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    while ($donnees = mysql_fetch_array($requete_selection)){

    echo '<a href="view.php?id='.$donnees['id'].'">';
    echo $donnees['titre'] . '</a>' . ' ' . 'écrit par ';
    echo $donnees['auteur'] . '<br />';
    }
    ?>

    view.php
    <?php
    include('../connection.php');

    $id = intval($_GET["id"]);
    $requete_selection = mysql_query('SELECT * FROM articles WHERE id="'.$id.'"') or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    $donnees = mysql_fetch_array($requete_selection);

    // affichage
    echo $donnees["contenu"];
    ?>

    Voilà donc ma BDD est tout à fait saine et mes infos de connections aussi. Et ton script m'a l'air aussi trés bien donc je ne vois pas ce qui cloche du tout.
    0
  17. stephane_mc2004 Messages postés 807 Statut Membre 96
     
    J'ai trouvé !!! j'espere que ça pourra t'aider :

    CODE page MAIN.PHP du dossier articles :
    **************************************************************************************
    if(isset($_GET['id']){ //si la variable id existe 
    $id = $_GET['id']; // je cree une variable qui sapel id qui a pour valeur l'id en parametre dans l'URL
    include('connection.php');
    
    $requete_selection = mysql_query('SELECT * FROM articles WHERE id="$id"') or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    
    $donnees = mysql_fetch_array($requete_selection);
    echo $donnees['contenu'];
    echo $donnees['auteur'] . '<br />';
    }
    


    **********************************************************************************

    et le code de la page index.php

    ***********************************************************************************
    if ($_GET['page'] == "articles"){

    if(isset($_GET['id']){
    include("articles/main.php?id=" . $_GET['id'] );
    }
    else { include("articles/main.php");

    }
    ...

    ..

    essais sa
    0
  18. stephane_mc2004 Messages postés 807 Statut Membre 96
     
    note que connection.php est l'url qui contient tes infos de connexion a la base, donc je te conseille d'ecrire l'url absolue, genre http://...../connection.php
    0
  19. killermano66 Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   41
     
    Nop la ça ne m'affiche plus rien :
    http://www.rpg-z.com/get_test/index.php?page=articles

    Merci quand même pour tous le mal que tu te donnes ;)
    0
  20. stephane_mc2004 Messages postés 807 Statut Membre 96
     
    C'est rien tkt, c'est le role du developpeur.

    Je reprend donc, peut-etre que je me suis trompé.

    ===================
    INDEX.PHP
    ===================
    <?php
    
    if ($_GET['page'] == "news") {include("news.php");}
    if ($_GET['page'] == "articles") 
    {
         if(isset($_GET['id']))
         {
              include('articles/main.php?id=' . $_GET['id'] );
         }
         else { include("articles/main.php"); } 
    
    
    }
    
    
    
    if ($_GET['page'] == "forums") {include("forums.php");}
    if ($_GET['page'] == "medias") {include("medias.php");}
    ?> 


    =============
    articles/main.php
    =============*
    <?php
    
    include('connection.php');
    if(isset($_GET['id']){ //si la variable id existe 
    $id = $_GET['id']; // je cree une variable qui sapel id qui a pour valeur l'id en parametre dans l'URL
    
    
    $requete_selection = mysql_query('SELECT * FROM articles WHERE id="$id"') or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    
    $donnees = mysql_fetch_array($requete_selection);
    echo $donnees['contenu'];
    echo $donnees['auteur'] . '<br />';
    mysql_close();
    }
    else {
    
    include('connection.php');
    
    $requete_selection = mysql_query('SELECT * FROM articles') or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    while ($donnees = mysql_fetch_array($requete_selection)){
    
    echo '<a href="index.php?page=articles&id='.$donnees["id"].' ">';
    echo $donnees['titre'] . '</a>' . ' ' . 'écrit par ';
    echo $donnees['auteur'] . '<br />';
    }
    mysql_close();
    }
    ?> 
    
    0
    1. stephane_mc2004 Messages postés 807 Statut Membre 96
       
      toujours en sachant que le connection.PHP doit etre l'url absolue, du genre
      http://.../connection.php
      0
  21. killermano66 Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   41
     
    La page main.php me renvois :

    Warning: include(articles/main.php?id=2) [function.include]: failed to open stream: No such file or directory in /home/www/8b02f9045067109a0cbb419d432d633f/web/get_test/index.php on line 18

    Warning: include(articles/main.php?id=2) [function.include]: failed to open stream: No such file or directory in /home/www/8b02f9045067109a0cbb419d432d633f/web/get_test/index.php on line 18

    Warning: include() [function.include]: Failed opening 'articles/main.php?id=2' for inclusion (include_path='.:/opt/php/lib/php') in /home/www/8b02f9045067109a0cbb419d432d633f/web/get_test/index.php on line 18

    id=2 car j'ai cliqué sur le deuxieme article meme erreur pour les autres liens avec le changement d'id dans l'erreur.

    Cette galère ><. Merci.
    0
    1. stephane_mc2004 Messages postés 807 Statut Membre 96
       
      C'est pour ça que j'ai parlé des url absolues. remplace tout ce qui est include('nomdufichier') par include('http://tonsite/dossier-du-fichier/fichier.php');
      0
  • 1
  • 2