8792 sujets

Développement web côté serveur, CMS

Salut a tous,

j'ai un petit soucis et j'aurai bien besoin de votre aide ^^.

Donc voila j'ai une fonction comme ca:


<?php
function petitcadre($titre,$addressecontenu)
{

echo '<div class="petitcadre"><div class="toppetitcadre">'.$titre.'</div><div class="middlepetitcadre">';
$Test='test';
include($rootpath.$addressecontenu);
echo '</div><div class="bottompetitcadre"></div></div>';
}
?>


dans le code que j'inclue je souhaite récupérer affiche $Test mais ca ne marche pas. Pour lui $Test à la valeur null. J'ai essayé avec global mais ca ne marche toujours pas.

Est ce normal? (dans se cas les include sont a proscrire dans les fonctions).


Par exemple si je fait echo $_POST['Login']; dans la fonction , ca marche, mais si je met cet echo dans le code inclu, pour lui la variable n'existe plus.

Savez vous pourquoi ca fait ca? Et comment y remédier.

Merci d'avance ^^.
Salut death83,

j'ai fait le test suivant :

page1.php
<?php
function petitcadre($titre, $addressecontenu)
{
echo '<div class="petitcadre"><div class="toppetitcadre">'.$titre.'</div><div class="middlepetitcadre">';
$Test='test';
include($addressecontenu);
echo '</div></div>';
}
petitcadre('Titre', 'page2.php');
?>

page2.php
<?php
echo $Test;
?>


et ça m'affiche bien
Titre
test

il faudrait voir ce que tu as dans ta page $addressecontenu

@+
Modifié par Heyoan (01 Oct 2006 - 11:56)
Donc je vais détaillé mon contexte pour que vous puissiez avoir les même conditons que moi.

Donc dans ma page index.php j'ai:


<html>
 <head>
  <?php
    include('fonctions/petitcadre.php');
  ?>
 </head>
 <body>
   <?php
       petitcadre('Connexion',$rootpath.'include/connection.php');
   ?>
 </body>
</html>

(la fonction est donc incluse dans la page et n'est pas directement dedans).

La fonction petitcadre:


<?php
function petitcadre($titre,$addressecontenu)
{
	echo '<div class="petitcadre"><div class="toppetitcadre"><h2>'.$titre.'</h2></div><div class="middlepetitcadre">';
	$Test='test';
	require($addressecontenu);
	echo '</div><div class="bottompetitcadre"></div></div>';
}
?>


et enfin la page appelé (include/connection.php):


<?php
echo $Test;
if(isset($_POST['login']))
{
	$connexion=connexion($_POST['password'],$_POST['login']);
}
if(isset($_POST['deconnect']))
{
	deconnexion();
}
if(isset($_SESSION['Nom']))
{
	echo $_SESSION['Nom'];

}
else
{
echo '<form action="" method="post" class="aligncenter">
	<div>
	<table>
		<tr>
			<td>
				Login:
			</td>
			<td>
				<input type="text" name="login" class="input2"/>
			</td>
		</tr>
		<tr>
			<td>
				Pass:
			</td>
			<td>
				<input type="password" name="password" class="input2"/>
			</td>
		</tr>
	</table>
	</div>
	<div>
		<a href="'.$rootpath.'inscription/inscription.php?mdpo=1" class="littlefont">Mot de passe oublié?</a>
	</div>
	<div>
		<button type="submit" class="button">Connexion</button>
	</div>
	<div>
		<a href="'.$rootpath.'inscription/inscription.php?insc=1" class="littlefont">S\'inscrire</a>
	</div>
	</form>
	
' ;
}
?>


Et la le echo $Test n'addiche rien.
Modifié par death83 (01 Oct 2006 - 13:02)
juste une petite question : tu la déclares comment ta variable $rootpath ?

parce qu'avec le test suivant ça marche :

index.php
<html>
<head>
<?php
    include('fonctions/petitcadre.php');
?>
</head>
<body>
<?php
	$rootpath='./';
	petitcadre('Connexion',$rootpath.'include/connection.php');
?>
</body>
</html>

fonctions/petitcadre.php
<?php
function petitcadre($titre,$addressecontenu)
{
	echo '<div class="petitcadre"><div class="toppetitcadre"><h2>'.$titre.'</h2></div><div class="middlepetitcadre">';
	$Test='Valeur de Test';
	require($addressecontenu);
	echo '</div><div class="bottompetitcadre"></div></div>';
}
?>

include/connection.php
<?php
echo $Test;

$rootpath='./';

if(isset($_POST['login']))
{
	$connexion=connexion($_POST['password'],$_POST['login']);
}
if(isset($_POST['deconnect']))
{
	deconnexion();
}
if(isset($_SESSION['Nom']))
{
	echo $_SESSION['Nom'];
}
else
{
echo '<form action="" method="post" class="aligncenter">
	<div>
	<table>
		<tr>
			<td>
				Login:
			</td>
			<td>
				<input type="text" name="login" class="input2"/>
			</td>
		</tr>
		<tr>
			<td>
				Pass:
			</td>
			<td>
				<input type="password" name="password" class="input2"/>
			</td>
		</tr>
	</table>
	</div>
	<div>
		<a href="'.$rootpath.'inscription/inscription.php?mdpo=1" class="littlefont">Mot de passe oublié?</a>
	</div>
	<div>
		<button type="submit" class="button">Connexion</button>
	</div>
	<div>
		<a href="'.$rootpath.'inscription/inscription.php?insc=1" class="littlefont">S\'inscrire</a>
	</div>
	</form>
' ;
}
?>


@+
Modifié par Heyoan (02 Oct 2006 - 18:33)
C'est vraiment bizarre cette histoire. Rootpath est bien déclaré car si ce n'était pas le cas je n'aurai pas les élément pour la connection qui s'afficherai.

Hors la j'ai tout qui s'affiche sauf la variable $Test Smiley ohwell .
Modifié par death83 (01 Oct 2006 - 14:39)
Je viens d'essayer en recopiant le meme texte et en effet ca marche. Je vais ajouter au fur et a mesure les différents éléments de ma page pour voir celui qui déclenche ce problème.
j'ai trouver la source du problème:

Dans le head j'inclu également ce fichier:


<?php
$NomAdmin="Gankutsuou";
$MailAdmin="manganime83@yahoo.fr";
$RacineSite="http://127.0.0.1/castlemangaV1.0/";
$rootpath=$RacineSite;
$habillage="castlemanga1";
?>


(celui qui définit le rootpath).
Si je met la ligne en commentaire ca marche tres bien. Mais je ne vois pas comment corriger ca. (quand j'enleve la ligne rootpath=null, ca marche car ca devient des chemins relatif, mais j'ai besoin d'avoir des chemins absolus).
Effectivement il semblerait qu'un include avec un path absolu fasse perdre la portée des variables Smiley decu

Donc la solution (un peu galère) c'est de faire comme ça :

index.php
<html>
<head>
<?php
    include('include/rootpath.php');
    include('fonctions/petitcadre.php');
?>
</head>
<body>
<?php
	petitcadre('Connexion',$rootpath.'include/connection.php');
?>
</body>
</html>

include/rootpath.php
<?php
$RacineSite="http://127.0.0.1/Test/";
$rootpath=$RacineSite;
?>

fonctions/petitcadre.php
<?php
function petitcadre($titre,$addressecontenu)
{
	echo '<div class="petitcadre"><div class="toppetitcadre"><h2>'.$titre.'</h2></div><div class="middlepetitcadre">';
	$Test=urlencode('Valeur de Test');
	$addressecontenu .= "?Test=$Test"; 
	
	include ($addressecontenu);
	echo '</div><div class="bottompetitcadre"></div></div>';
}
?>

include/connection.php
<?php
echo $_GET['Test'];
include('rootpath.php');

if(isset($_POST['login']))
...
?>


@+
Oui merci c'est ce que j'ai fait. DU coup je suis obliger de retaper à la main les chemin relative selon leur hierarchie dans mes repertoires.

Merci quand même Smiley cligne .
J'inclus souvent un fichier dans le constructeur d'une classe pour utiliser des textes internationalisables. Exemple :

class MaClasse {
    var $x;
    var $textes;

    function MaClasse() {
        include("ma_classe_textes.php");
    }
}


et dans ma_classe_textes.php :

$this->textes = array (
    "de" => array (
        "annuler" =>  "Löschen",
        ....
    ),
    "fr" => array (
        "annuler" => "Annuler",
        ....
   )
);


Ca fonctionne, c'est pratique pour avoir les textes dans une page à part, mais ça paraît bizarre et je me demande si c'est bien correct dans l'art de la programmation...