8797 sujets

Développement web côté serveur, CMS

Bonjour à tous!

Je commence un petit site contenant quelques pages. Mon idée est la suivante :
une page index qui contient 4 includes :
-header
-menu
-corps
-footer

Ce que je souhaiterais faire, c'est de pouvoir afficher le contenu de chaque page du site, en appelant le contenu de la BDD dans "corps.php" et en l'affichant.

Le code pour afficher le contenu :

<?php
include("config.php");

//Requête
$req=("SELECT * FROM page WHERE nom ='" . $page . "'");
$result=mysql_query($req) or die ('Erreur :'.mysql_error());

while($ligne=mysql_fetch_assoc($result))
{
echo $ligne['contenu'];
}
?>


Pour ça, dans le menu j'ai ce genre de code :
<ul>
	<li><a href="formation.php?page=formation" title="La formation Génération Daniel"><img src="images/formation.jpg" height="" width="" alt="La formation Génération Daniel" /></a></li>
</ul>
mais je me suis dit que ça ne marcherait pas parce qu'on va chercher une page formation.php et que dans le code php, $page=$_GET['page'] renvoie une erreur, comme quoi $page n'est pas défini...

J'ai donc essayé comme cela :

<ul>
	<li><a href="<?php $page="formation" ?>" title="La formation Génération Daniel"><img src="images/formation.jpg" height="" width="" alt="La formation Génération Daniel" /></a></li>
</ul>
pour initialiser $page à "formation".

Cependant je comprends bien que ça ne sert pas à grand chose, puisque $page sera initialisé pour chaque rubrique avec une valeur différente...

Je cherche donc un moyen d'appeler un contenu différent à chaque clic, en initialisant lors du clic la variable $page...

Si vous avez des idées.. Smiley smile

Merci d'avance à tous!
Bonjour,

Quelques notions à revoir:

* les variables passées en GET ne sont utiles que si on veut utiliser un même fichier pour afficher des informations différentes. Par exemple, si on veut utiliser la page formation.php pour afficher les cours "cuisine", "ukulélé" et "tectonik", on peut imaginer de se servir de la variable $cours, à laquelle on passe la valeur adéquate. On aura alors des URLs de la forme suivante:
http://www.example.com/formation.php?cours=cuisine
Lorsque le visiteur clique sur un tel lien, le serveur calcule la page formation.php et la renvoie au navigateur. Au cours du calcul, tu peux récupérer le cours demandé via la variable $_GET['cours'], ce qui va permettre de sélectionner le contenu à afficher, soit dans une base de données, soit dans un fichier.

* l'avertissement généré lorsque la variable $_GET['cours'] n'existe pas ne devrait jamais être affiché, c'est à toi de le gérer! Si quelqu'un essaie d'ouvrir la page formation.php sans donner le paramètre, il semble logique

1. qu'il reçoive une réponse correcte du site, et pas un avertissement PHP.
2. qu'on lui propose un choix de pages susceptibles de l'intéresser, ici la liste des cours disponibles.

C'est assez facile à faire en PHP, il suffit de tester l'existence de la variable avec isset(). Dans le fichier formation.php:
<?php if (!isset($_GET['cours'])): ?>
  <h2>Choississez le cours qui vous intéresse: </h2>
  <ul>
     <li><a href="formation.php?cours=cuisine" title="Le cours de cuisine est über cool">cuisine</a></li>
     <li><a href="formation.php?cours=ukulele" title="Le cours de ukulélé est über cool aussi">ukulélé</a></li>
     <li><a href="formation.php?cours=tectonik" title="ça par contre, c'est pas mon truc, mais chacun ses goûts ...">tectonik</a></li>
  </ul>
<?php else: ?>

* les variables passées via les URLs ne sont pas sûres. N'importe qui peut en modifier la valeur, il suffit de changer l'adresse dans son navigateur. Il est donc important de les manipuler avec prudence, particulièrement lorsque ces variables vont se retrouver dans une requête SQL... Si le nombre de cours disponibles est restreint et que ça ne change pas trop souvent, le plus sûr est encore de vérifier que la valeur de $_GET['cours'] correspond bien à une des valeurs prévues et d'utiliser des fichiers. Par exemple:
<?php 
  $cours_disponibles = array('cuisine', 'ukulele', 'tectonik');
  if (!in_array($_GET['cours'], $cours_disponibles'): 
?>

<p>Désolé, mais ce cours n'existe pas!</p>

<?php
  else:
    include('./cours/'.$_GET['cours'].'.inc.php');
  endif;
?>
S'il y a beaucoup de cours et qu'on souhaite les mettre à jour ou en ajouter régulièrement, on utilisera probablement une base de données. Dans ce cas, je le répète, il faut être particulièrement prudent. Il est indispensable d'échapper les variables reçues avant d'effectuer la requête. Par exemple:
<?php 
  # Connexion à la BDD:
  $link = mysql_connect(..., ..., ...);
  $mysql_select_db(..., $link);
  $query = sprintf('SELECT * FROM cours WHERE cours_index = "%s"', mysql_real_string_escape($_GET['cours'], $link));
  $cours = mysql_query($query);
Voilà déjà de qui avancer un peu, je crois Smiley cligne Bon travail.