Inclure une page déterminée par une variable

Eléphanteau du PHP | 16 Messages

19 oct. 2015, 13:02

Bonjour,

alors voilà pour la fin de ma page je genere une sortie aleatoire de ma table jusque là tout va bien cette variable nommée donc sdonnees['nom'] s'affiche très bien en echo ou meme en a href le problème c'est que je voudrais la mettre dans une include et quand je fais
<?php include(.$donnees['Nom']. '.php'); ?>
Ma page ne s'execute plus du tout donc je pense ne pas avoir la bonne méthode je vous remercie d'avance pour votre aide.
Voici le code complet de ma page
<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8" />

        <link rel="stylesheet" href="page.css" />
		<link href='https://fonts.googleapis.com/css?family=Shadows+Into+Light' rel='stylesheet' type='text/css'>

        <title>La Grouse</title>
		


    </head>



    <body>
	    
<?php
try
{
	// On se connecte à MySQL
	$bdd = new PDO('mysql:host=localhost;dbname=Cuisine;charset=utf8', 'root', '***********');
}
catch(Exception $e)
{
	// En cas d'erreur, on affiche un message et on arrête tout
        die('Erreur : '.$e->getMessage());
}

// Si tout va bien, on peut continuer



// On récupère tout le contenu de la table jeux_video
$total_Recette = $bdd->query('select COUNT(id) as total from Volaille');
$total_Recette = $total_Recette->fetch();
$total_Recette = $total_Recette['total'];

$nbrIdRecette= rand(1, $total_Recette);
$res = $bdd->query("SELECT * FROM Volaille WHERE id = $nbrIdRecette");



while($donnees=$res->fetch())
{



?>
<div class="container_principal">
<?php include("entete.php"); ?>	
<h1>Comment cuisiner la Grouse</h1>

<p class="contenu_recette">La Grouse est une volaille sauvage donc elle se cuisine comme n'importe quelle poule, poulet ou même faisant.
<br />Voici une petite recette que l'ont peut faire avec de la grouse.</p>


    

  <p><a href="<?php echo $donnees['Nom']; ?>">Un lien</a>
 </p>





</div>
<?php
}

$reponse->closeCursor(); // Termine le traitement de la requête

?>
</body>
</html>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 oct. 2015, 14:34

Bonjour,

Tu as un point en trop au début de ton include :
<?php include($donnees['Nom'] . '.php'); ?>

Edit : attention par contre lorsque tu inclus des pages dont le nom ou le chemin dépendent d'une valeur transmise par un utilisateur. Il faut en effet t'assurer que celui-ci ne change pas la valeur envoyée pour aller inclure un fichier de configuration ou autre et récupérer les infos de ton site, ce qui serait une importante faille de sécurité.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 16 Messages

19 oct. 2015, 14:43

Oh merci tu me sauves la vie en fait le . doit être mit pour tout élement "texte" extérieur à la variable ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 oct. 2015, 15:08

La fonction include() attend en paramètre une simple chaîne de caractères, peut importe comment celle-ci lui est passée : une chaîne en dur entre guillemets/apostrophes, une chaîne contenue dans une variable ou même une chaîne constituée de plusieurs chaînes.

Le point est l'opérateur de concaténation, il permet de coller entre elles deux chaînes ou plus pour n'en former qu'une seule.

A partir de là, toutes les combinaisons sont envisageable, il faut juste être cohérent dans la chaîne constitué et ce qui est passé en paramètre de ta fonction :)
<?php include('ma_page.php'); ?>

<?php include('ma' . '_' . 'page' . '.php'); ?>

<?php 
  $page = 'ma_page.php';
  include($page); 
?>

<?php 
  if (isSet($donnees['Nom']) && file_exists($donnees['Nom'] . '.php'))
    include($donnees['Nom'] . '.php'); 
  else
    echo 'La page demandée n\'existe pas.';
?>
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...