Multiple problème d'includes.

Mammouth du PHP | 702 Messages

26 mars 2011, 14:36

Bonjour, j'ai un fichier qui prends des informations sur la base de donnée (jusque la tout va bien)
Mais le problème est lors de l'inclusion. en fait ce fichier doit me générer le code pour naviguer sur le site.
et voici sa structure (du générateur)
<?
//insertion de fichier de configuration
require("_include/config/config.inc.php");
// connection et selection de la base ce donnée
$connect=mysql_connect($host,$login,$pass) or die ("Connection impossible");
mysql_select_db($base,$connect) or die ("selection impossible");
?>
<?php 
echo "<?php\n";
echo "if (!isset(\$_GET['page'])) \$page= 'accueil'; else \$page= \$_GET['page'];\n ";
echo "switch(\$page)\n";
echo "{\n";
echo "case 'accueil': include ('accueil.html');break;\n";

// on crée la requête SQL
$sql = 'SELECT name_category, name_file FROM contenu';

// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_assoc($req))
    {
    // on affiche les informations de l'enregistrement en cours
echo "case '" .$data['name_category']. "': include ('" .$data['name_file']. ".html');break;\n";   
 
    }

// on ferme la connexion à mysql
mysql_close();

echo "}\n";
echo "?>\n";
 
?>
Bon, le soucis est que lors de l'inclusion de ce fichier il me fait bien l'intégration mais ne l'interprète pas, puisque dans la source de la page qui intègre le fichier j'ai
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="theme.css" />
<meta name="generator" content="Namo WebEditor(Trial)">
</head>
<body>

    <table border="0" width="100%" cellpadding="0" cellspacing="0">
        <tr>
            <td width="50%">
                <p><a href=index.php?page=accueil>Accueil</a><br><a href=index.php?page=Home>Home</a><br></p>

            </td>
            <td width="598">
                <p><?php
if (!isset($_GET['page'])) $page= 'accueil'; else $page= $_GET['page'];
 switch($page)
{
case 'accueil': include ('accueil.html');break;
case 'Home': include ('accueil.html');break;
}
?>
</p>
            </td>
        </tr>
    </table>
</div>
</body>
</html>
le soucis c'est que le code est juste inclu mais n'est pas interprété... alors ça m'arrange pas, je suis obliger de le copier et coller dans la source... enfin la page qui utilise ce code est http://asplosion.com/test123/
et la page qui génère ce code a été mis en première source ici présente.

je ne sais pas si vous m'avez compris, car étant malade j'ai du mal a me faire comprendre.

d'avance merci pour votre aide

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

26 mars 2011, 15:04

La fonction include() inclus le script et exécute le code php qu'elle contient... si le code php contenu lui demande de faire des echo, elle affiche ce qu'il y a à afficher à l'écran, mais ne fera rien de plus...

Il te faut donc soit exécuter directement ton code php en le repensant pour qu'il fasse ce que tu veux de lui, soit si tu as besoin de générer du code, le faire évaluer avec eval() (en prenant toutes les précautions nécessaires qui vont avec ce genre de fonctions :)), mais il n suffit pas d'afficher du code pour qu'il fonctionne ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 702 Messages

26 mars 2011, 15:14

et si je fais un enregistrement dans un fichier tiers de l'echo et que je fais une include dans le fichier principal?

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

26 mars 2011, 15:23

Vouip, tu peux tout à fait générer un fichier php à inclure :)
(faudra quand même remplacer tes echo vu que le but n'est pas d'afficher, mais de stocker)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 702 Messages

26 mars 2011, 15:37

oui merci beaucoup car la fonction dont vous me parlez m'est totalement inconnue (eval)

Mammouth du PHP | 702 Messages

26 mars 2011, 15:55

J'ai pas réussi. j'ai fait ça
<?php
$fp=fopen("generator.php", "w"); //ouverture du fichier en mode écriture, création du fichier s'il n'existe pas.
fwrite($fp,"<?php 
echo "<?php\n";
echo "if (!isset(\$_GET['page'])) \$page= 'accueil'; else \$page= \$_GET['page'];\n ";
echo "switch(\$page)\n";
echo "{\n";
echo "case 'accueil': include ('accueil.html');break;\n";

// on crée la requête SQL
$sql = 'SELECT name_category, name_file FROM contenu';

// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_assoc($req))
    {
    // on affiche les informations de l'enregistrement en cours
echo "case '" .$data['name_category']. "': include ('" .$data['name_file']. ".html');break;\n";   
 
    }

// on ferme la connexion à mysql
mysql_close();

echo "}\n";
echo "?>\n";
 
?>"); // insert le texte: Un texte dans votre fichier.
?> 
mais ça me donne pas le résultat attendu :s

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

26 mars 2011, 16:22

salut,

a tu vérifier le contenu de generator.php ?

je ne vois pas l'utilité d'un tel système pour réaliser un système de pseudo frame :/

Avec une simple requête sql en fonction de $_GET['page'] s'il y a un retour tu inclus la page sinon la page d’accueil :)


@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 702 Messages

26 mars 2011, 16:32

c'est pour de l'autogestion. pour que mon père puisse mettre a jour son site sans toucher au code j'utilise un wysiwyg et les autres cms ne permettent pas de toucher au design, le wysiwyg enregistre sur la bdd et ce code doit generé. mais pour l'enregistrer je sais pas.

ViPHP
xTG
ViPHP | 7331 Messages

26 mars 2011, 19:40

Plutôt que de faire un eval je te conseillerai plutôt de coupler include() avec la gestion des buffer qui est plus propre.
ob_start();
include("fichier.php");
$contenu = ob_get_clean();
echo $contenu;

Mammouth du PHP | 702 Messages

26 mars 2011, 20:03

je vais étudier cela, mais comment l'intégrer à mon code?

Mammouth du PHP | 702 Messages

26 mars 2011, 20:07

ce code ci
ob_start();
include("fichier.php");
$contenu = ob_get_clean();
echo $contenu;
je le met à la place de mon include dans le fichier qui appel le code généré?

ViPHP
xTG
ViPHP | 7331 Messages

26 mars 2011, 20:44

Ce code te permet de faire l'include mais d'afficher plus loin dans le code ce qui est renvoyé par le contenu de cet include.
En gros charger ce que devrait afficher le fichier dans une variable.

Mammouth du PHP | 702 Messages

26 mars 2011, 20:51

d'accord je comprends mieux, mais je ne sais pas du tout comment l'exploiter.

Mammouth du PHP | 702 Messages

26 mars 2011, 21:10

bon j'ai bien réussi, l'include se fait mais il ne fait qu'afficher le code généré mais ne l'exécute pas, comme dans l'include classique précédente du début que j'avais fait.

ViPHP
xTG
ViPHP | 7331 Messages

27 mars 2011, 09:44

Oui car tu fais des echo d'un code PHP en fait dans ton fichier.
Pourquoi ne pas stocker le code en brut ? Je comprends pas la démarche. :/