problème avec les class

Répondre
tenko_95
le 21/11/2008 à 02:54
tenko_95
Bonjour j'ai un petit problème gênant avec les class
j'ai 3 fichiers php (session.php, test1_sess.php et test2_sess.php)

session.php
<?php
class CSession {
function init() {
session_start();
global $session;
if($session == null) {
$session=new CSession();
session_register("session");
return $session;
}
}
}

$composant=new CSession();
$composant->init();
?>


test1_sess.php
<?php
include "session.php";

if (!empty($_POST['message'])) {
$session->message=$_POST['message'];
}
?>
<html>
<body>
<form method="post" action="test1_sess.php">
Votre message : <input type="text" name="message" /><br />
<input type="submit" value="Envoyer" />
</form>

<hr />
<a href="test2_sess.php">Page 2 du test</a>
</body>
</html>


et

test2_sess.php
<?php
include "session.php";
?>
<html>
<body>
<?php
echo $session->message;
?>
</body>
</html>


J'ouvre test1_sess.php, j'entre un message j'envoi le formulaire. Ensuite je clique sur le lien pour ouvrir test2_sess.php et la il apparait

Notice: Undefined property: CSession::$message in C:\SESSION\test2_sess.php on line 7


Quelqu'un pourrait m'aider à comprendre d'où celà peut il venir parce que j'ai retourner le problème dans tous les sens mais rien y fait de plus c'est la première fois que j'utilise php poo et j'aimerais bien comprendre

Je vous remercie d'avance

Tenko
Now we know the truth -> Space invaders are back
LA GLOBULE
le 21/11/2008 à 14:48
LA GLOBULE
C'est logique.

En fait, sur chaque page, tu ne modifies jamais tes valeurs de session. Tu modifies un objet $session, mais une fois modifié, tu ne le ré enregistres pas en session.

En effet, pour enregistrer une variable en session, il faut soit utiliser directement $_SESSION soit utiliser la fonction session_register.

Dans le cas ou tu modifies directement $_SESSION, pas de problème, tu retrouves ta valeur dans toutes les pages ou tu appelles ta session.

Toi, tu utilises session_register. Mais tu l'utilises trop tot. C'est à dire que au moment où tu appelles session_register, la propriété $session->message n'existe pas encore. Et donc au moment ou tu "saves" ta session, $session est un objet vide, ce qui explique ton message d'erreur.

En résumé, voici ce que tu fais :

<?php
session_start();
$session = (object)null;
session_register('session');
$session->message = 'blu';
?>


Alors qu'il faudrait faire :

<?php
session_start();
$session = (object)null;
$session->message = 'blu';
session_register('session');
?>
tenko_95
le 23/11/2008 à 01:03
tenko_95
Je te remercie la globule, je comprends ce que tu veux dire et je comprends trés bien le principe mais comme tu dis dans un de tes cours l'avantage de la programmation objet c'est que l'on a pas besoin de comprendre et a vrai dire là je comprends pas trop, je me contente d'éessayer d'arranger des codes trouver pour qu'il fonctionne avec ce que j'ai envi d'en faire. Enfin bref tout ca pour dire que je ne trouve pas où est ce que mon code source cloche ?!

ps: je te remercie tes cours et tes comments faire sont nickel je les ai découvert l'été dernier et tous ce que j'ai appris de php me viens d'ici, et tous ca parce que tes cours sont illustré par de nombreux exemples concrets (choses que l'on ne trouve pas dans la plupart des livres informatique que l'on peut trouver en librairie spécialisée)

Encor merci !!
Now we know the truth -> Space invaders are back
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours