Problème $_GET + BDD
RésoluJ'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
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.
-
En tout cas merci à tous les deux vous m'avez grandement aidé ;)
-
ouffffffffffffffff qui ca met que
<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>
c'est fini mini menu -
Les erreurs je sais pas car j'ai repris le code de stephane_mc2004.
J'ai juste modifié les endroits les plus importants pour faire fonctionner ton script.
Applique un petit résolu à cette discussion :)
Allez ciao
-
²Ben écoute, nikel ça marche trés bien mis à part deux petites erreur de syntaxes, tu as tout à fait saisi le problème et maintenant c'est parfait, ce que je voulais.
Merci beaucoup ;) -
Alors, après quelques tests c'est le contenue du else qui affiche l'erreur donc ceci :
else {
$adresse2 = '/get_test/articles/main.php';
include($adresse2);
}
Si je l'enlève l'erreur n'apparait pas donc j'en viens à la conclusion que la condition du if ne se vérifie pas vu que c'est le else qui s'exécute. C'est quand même bizarre tout ça.
Merci de ton aide, a ce soir ;)-
<?php /*=================== INDEX.PHP ===================*/ //A placer dans ta page index.php if (isset($_GET['page'])) { switch($_GET['page']) { case "news": include("news.php");break; case "articles": include("articles/main.php");break; case "forums": include("forums.php");break; case "medias": include("medias.php");break; } else { include("news.php"); } ?> <?php /*============= articles/main.php =============*/ //A placer dans ton main.php du répertoire articles include('connection.php'); //On se connecte à la base if(isset($_GET['id']){ //si la variable id existe $requete_selection = mysql_query('SELECT * FROM articles WHERE id='.$_GET['id']) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); $donnees = mysql_fetch_array($requete_selection); echo $donnees['contenu']; echo $donnees['auteur'] . '<br />'; } else { $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(); //On se déconnecte ?>
Donc je resume. Lorsque tu arrives sur ton site par défaut lorsque tu vas cliquer sur le lien articles, tous les articles s'afficheront car ta variable "$_GET['id']" n'existe pas.
Dès lors que tu vas cliquer sur un article pour l'afficher, tu vas instancier la variable "$_GET['id']" qui cette fois-ci n'affichera plus la liste des articles mais uniquement l'article voulu.
J'ai bien compris ta démarche ?
-
-
essais dappliker la deuxieme methode avec ce probleme, je vais faire des courses. A ce soir et bon courage
-
Donc, effectivement il y a du mieux avec la deuxième méthode :
$adresse = '/get_test/articles/main.php?id=' . $_GET['id'];
include($adresse);
Les erreurs de la page index.php disparaissent en partie vu qu'il m'en reste 2 lorsque je clique sur articles :
Warning: include(/get_test/articles/main.php) [function.include]: failed to open stream: No such file or directory in /home/www/8b02f9045067109a0cbb419d432d633f/web/get_test/index.php on line 22
Warning: include() [function.include]: Failed opening '/get_test/articles/main.php' for inclusion (include_path='.:/opt/php/lib/php') in /home/www/8b02f9045067109a0cbb419d432d633f/web/get_test/index.php on line 22
Donc ligne 22 evidement toujours une url qui pose problème :
echo '<a href="index.php?page=articles&id='.$donnees["id"].' ">';
Merci beaucoup ;) -
J'ai une parse error à la ligne 19 :
include("/get_test/articles/main.php?id=$_GET['id']" );
j'ai tenté de la remplaçer par
include("/get_test/articles/main.php?id='$_GET['id']'" );
mais l'erreur reste
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/www/8b02f9045067109a0cbb419d432d633f/web/get_test/index.php on line 19
Merci, je cherche de mon côtés aussi.-
ok ça commence a aller (enfin je crois bien ;) )
bon
essais
include('/get_test/articles/main.php?id=' . $_GET[\'id\'] );
si sa marche pas, essais sa aussi ::
$adresse = '/get_test/articles/main.php?id=' . $_GET['id']; include($adresse);
ou encore
$adresse = '/get_test/articles/main.php?id=' . $_GET[\'id\']; include($adresse);
Pour ce dernier je crois pas trop, mais on sait jaimais
-
-
===================
INDEX.PHP
===================<?php if ($_GET['page'] == "news") {include("news.php");} if ($_GET['page'] == "articles") { if(isset($_GET['id'])) { include("/get_test/articles/main.php?id=$_GET['id']" ); } else { include("/get_test/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']; $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(); } ?>
desespere pas, jespere que sa marchera -
Apareamment c'est mauvais avec l'include des url absolues... une minute je redige un nouveau code
-
Alors la c'est pire en mettant les url absolue même les autres liens déconnent pourtant ils sont bon.
http://www.rpg-z.com/get_test/index.php?page=news
code index.php :
<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
if ($_GET['page'] == "news") {include("http://www.rpg-z.com/get_test/news.php");}
if ($_GET['page'] == "articles")
{
if(isset($_GET['id']))
{
include('http://www.rpg-z.com/get_test/articles/main.php?id=' . $_GET['id'] );
}
else { include("http://www.rpg-z.com/get_test/articles/main.php"); }
}
if ($_GET['page'] == "forums") {include("http://www.rpg-z.com/get_test/forums.php");}
if ($_GET['page'] == "medias") {include("http://www.rpg-z.com/get_test/medias.php");}
?>
</div>
code articles/main.php :
<?php
include('http://www.rpg-z.com/get_test/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('http://www.rpg-z.com/get_test/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();
}
?>
Merci encore. -
si le probleme persiste copie/colle ton code de main.php ici et index.php
-
Je reprend donc
===================
INDEX.PHP
===================<?php if ($_GET['page'] == "news") {include("http://www.rpg-z.com/get_test/news.php");} if ($_GET['page'] == "articles") { if(isset($_GET['id'])) { include('http://www.rpg-z.com/get_test/articles/main.php?id=' . $_GET['id'] ); } else { include("http://www.rpg-z.com/get_test/articles/main.php"); } } if ($_GET['page'] == "forums") {include("http://www.rpg-z.com/get_test/forums.php");} if ($_GET['page'] == "medias") {include("http://www.rpg-z.com/get_test/medias.php");} ?>
=============
articles/main.php
=============*<?php include('ici ladresse absolue de la page de connexion'); 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('ici aussi ladresse absolue de la page de connexion a la base'); $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(); } ?> -
J'ai testé les deux dans le doute et ça ne change absolument rien l'erreur revient dans les deux cas. J'y compred quedale. Merci.
-
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. -
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(); } ?> -
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 ;) -
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
-
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 -
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.
- 1
- 2