Page 1 sur 1

Problème avec un include

Posté : 23 déc. 2007, 17:27
par Gomme
Bonjour,

Je suis débutant en PHP et j'ai un problème avec un include. Le contenu de mon include ne s'affiche pas et je n'ai aucune idée pourquoi. Pouvez-vous m'aider svp.

Voici mon code qui a le include :

Code : Tout sélectionner

<?php require 'configuration.php'; $content = ' <div id="cont"> avant <?php include "templates/myphoto_fr.php"; ?> apres </div> '; ob_start(); include 'templates/footer.php'; ob_end_flush(); ?>
Voici le contenu du include myphoto_fr.php :

Code : Tout sélectionner

<?php print "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"; print "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"fr\" lang=\"fr\">"; print "<head>"; print "<meta http-equiv=\"Content-Type\" content=\"text/html\" /> "; print "</head>"; print "<BODY>"; print "test - ceci est un test"; print "</BODY>\n</HTML>\n"; ?>
J'ai mis une trace, les mots "avant" et "après" s'affichent, mais pas le contenu du include myphoto_fr.php

Merci pour votre aide

Posté : 23 déc. 2007, 17:41
par dunbar
Salut

Et comme ceci :?:
<?php
require 'configuration.php';

$content = '

    <div id="cont">';
    echo'avant';
    include "templates/myphoto_fr.php";
    echo'apres';
    '</div>';



ob_start();
include 'templates/footer.php';
ob_end_flush();
?>

Posté : 23 déc. 2007, 17:50
par Gomme
Bonjour Dunbar,

Merci d'avoir pris le temps de me répondre. J'ai remplacé le code par celui que tu m'a fourni.
Il y a du progrès...

Le contenu s'affiche, mais pas au bon endroit. Il ne s'affiche pas à l'intérieur de la balise <div id="cont">. Comment faire pour le faire afficher au bon endroit.

Merci

Posté : 23 déc. 2007, 18:04
par Ryle
Il faut bien comprendre qu'un include exécute le code qui a été inclu au moment où il est appellé. Il ne s'agit pas d'une fonction qui retourne une chaine que l'on peut stocker dans une variable.

En revanche, tu peux dans ton include définir une variable contenant ton code, que tu pourras ensuite utiliser dans ton script après avoir fait appel au include. Tu peux également ouvrir un fichier et lire son contenu avec les fonction du type fopen().

A toi de voir à partir de là comment et à quel endroit le code doit être exécuté :)

A noter qu'il ne faudrait n'utiliser le code php que lorsque tu en as besoin et que ton myphoto_fr.php ferait exactement la même chose, et serait plus lisible et plus rapide à exécuter s'il n'était pas surchargé inutilement de print :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html" />
</head>

<BODY>

<?php // mais rien ne t'empêche d'en mettre ponctuellement, là où tu en as vraiment besoin
  $var = 'test';
  echo $var . ' - ceci est un ' . $var;
?>

</BODY>
</HTML>

Posté : 23 déc. 2007, 18:08
par Gomme
Merci pour la suggestion... J'ai essayé et cela ne fonctionne toujours pas.
Voici maintenant mon code :

Code : Tout sélectionner

<?php require 'configuration.php'; require 'templates/contact_fr.php'; $content = 'include "templates/myphoto_fr.php" '; ob_start(); include 'templates/campinggregoire.php'; ob_end_flush(); ?>
Et le le contenu de myphoto_fr.php :

Code : Tout sélectionner

<?php print "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"; print "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"fr\" lang=\"fr\">"; print "<head>"; print "<meta http-equiv=\"Content-Type\" content=\"text/html\" /> "; print "</head>"; print "<BODY>"; print "<div id=\"cont\">"; print "test - ceci est un test"; print "</div>"; print "</BODY>\n</HTML>\n"; ?>
Le contenu de myphoto_fr.php, ne s'affiche pas

Posté : 23 déc. 2007, 18:23
par dunbar
Dans la même direction que RYLE (enfin je pense :oops: )
<?php
require 'configuration.php';
include 'templates/myphoto_fr.php';

$content = 'apres';

echo'<div id="cont">'.$var.' '.$content.'</div>';

ob_start();
include 'templates/footer.php';
ob_end_flush();
?>
myphoto_fr.php
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"fr\" lang=\"fr\">
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html\" />
</head>

<BODY>
<?php
$var ='test - ceci est un test';
?>
</BODY>
</HTML>

Posté : 23 déc. 2007, 19:11
par Ryle
Euh.... j'ai pas du être bien clair ... :?
Il faut bien comprendre qu'un include exécute le code qui a été inclu au moment où il est appellé.
Il ne s'agit pas d'une fonction qui retourne une chaine que l'on peut stocker dans une variable.
Je ne sais pas à quoi sert ta variable $content, si elle est utilisée ou pas par la suite, mais tu ne pourras jamais y stocker le résultat d'un include. Oublie que c'est un fichier externe et imagine que le code qu'il contient est à l'endroit exacte où tu fais appel à include(), car ce n'est ni plus ni moins que ce qui se passe :)

Voici une possibilité :
<?php 
  require 'configuration.php';
  ob_start(); 
?>

<div id="cont">
  avant
  <?php include "templates/myphoto_fr.php"; ?>
  apres
</div>

<?php
  include 'templates/footer.php'; 
  ob_end_flush(); 
?>

Posté : 23 déc. 2007, 19:14
par dunbar
Euh.... j'ai pas du être bien clair ... :?
Ok je retourne à mes livres alors :oops:

Posté : 23 déc. 2007, 20:58
par Gomme
Merci, grâce à votre aide, j'ai résolu mon problème