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,

34 réponses

Utilisateur anonyme
 
Salut,
Essaye d'ecrire : index.php?page=article&id='.$donnees['id'].'

change le ? devant id par &
0
Psyk974 Messages postés 551 Date d'inscription   Statut Membre Dernière intervention   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
stephane_mc2004 Messages postés 755 Date d'inscription   Statut Membre Dernière intervention   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
Psyk974 Messages postés 551 Date d'inscription   Statut Membre Dernière intervention   51
 
????
0
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
Psyk974 Messages postés 551 Date d'inscription   Statut Membre Dernière intervention   51
 
Est ce que ton paramètre passe bien dans l'url ?

Si oui montre nous le code de ta page "articles.php"
0
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
Psyk974 Messages postés 551 Date d'inscription   Statut Membre Dernière intervention   51
 
Est ce que tu vois tous tes articles au moins ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
Psyk974 Messages postés 551 Date d'inscription   Statut Membre Dernière intervention   51
 
Tu veux pouvoir afficher quoi exactement ? c'est que je comprend pas...
0
stephane_mc2004 Messages postés 755 Date d'inscription   Statut Membre Dernière intervention   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
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
stephane_mc2004 Messages postés 755 Date d'inscription   Statut Membre Dernière intervention   96
 
je me suis trompé, il ya deux parenntheses a mettre if(isset($_GET['id'])) au lieu de if(isset($_GET['id'])
0
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
stephane_mc2004 Messages postés 755 Date d'inscription   Statut Membre Dernière intervention   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
stephane_mc2004 Messages postés 755 Date d'inscription   Statut Membre Dernière intervention   96
 
retente le code ci-dessus, j'ai fais quelques modicfications
0
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
stephane_mc2004 Messages postés 755 Date d'inscription   Statut Membre Dernière intervention   96
 
Je vois, l'espace est du a ce que le contenu de l'article qui a pour id $id est vide...non ?
0
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
stephane_mc2004 Messages postés 755 Date d'inscription   Statut Membre Dernière intervention   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
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
stephane_mc2004 Messages postés 755 Date d'inscription   Statut Membre Dernière intervention   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
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
stephane_mc2004 Messages postés 755 Date d'inscription   Statut Membre Dernière intervention   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
stephane_mc2004 Messages postés 755 Date d'inscription   Statut Membre Dernière intervention   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
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
stephane_mc2004 Messages postés 755 Date d'inscription   Statut Membre Dernière intervention   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
stephane_mc2004 Messages postés 755 Date d'inscription   Statut Membre Dernière intervention   96
 
toujours en sachant que le connection.PHP doit etre l'url absolue, du genre
http://.../connection.php
0
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
stephane_mc2004 Messages postés 755 Date d'inscription   Statut Membre Dernière intervention   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