IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] Initiation à la POO avec le passage d'un objet entre deux pages


Sujet :

Langage PHP

  1. #1
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Points : 234
    Points
    234
    Par défaut [POO] Initiation à la POO avec le passage d'un objet entre deux pages
    Bonjour,

    Voila je me suis lancé dans la programation orientée objet avec php et je rencontre quelques difficultés lors de mes tests.

    Voici le code que j'ai pour l'instant :

    la class class.class.php (pas top le nom je sais)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    <?php	
    	class MyClass
    	{
    		var $myVar;
     
    		function MyClass($nom)
    		{
    			mysql_connect('host', 'user', 'pwd');
    			mysql_select_db('jeu');
     
    			$requete = 'select Password from Joueurs where login=\''.$nom.'\'';
     
    			$result = mysql_query($requete);
     
    			$donnees = mysql_fetch_assoc($result);
     
    			$this->myVar = $donnees['Password'];
     
    			mysql_close();
    		}
     
    		function afficher()
    		{
    			echo $this->myVar.'<br />';
    		}
     
    		function _sleep()
    		{
    			$sauver[0] = $this->myVar;
    			return $sauver;
    		}
     
    		function _wakeup()
    		{
    			$this->myVar = $sauver[0];
    		}
    	}
    ?>
    la page test1.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    	require 'class.class.php';
     
    	$class = new MyClass('shadow');
     
    	$class->afficher();
     
    	echo '<p><a href="test2.php?class='.serialize($class).'" >go</a></p>';
    ?>
    la page test2.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <?php
    	require 'class.class.php';
     
    	if (isset($_GET['class']))
    	{
    		$class = unserialize($_GET['class']);
     
    		$class->afficher();
    	}
    	else
    	{
    		echo 'ko';
    	}
    ?>
    L'idée est que je crée un objet dans test1.php, et je voudrais le passer dans la page test2.php pour pouvoir le réutiliser (plutot utile de réutiliser la même instance sur plusieurs pages ... )

    mais je n'y arrive pas, lorsque j'arrive sur test2.php j'ai ce message :
    Fatal error: Call to a member function afficher() on a non-object in /var/www/tests/test2.php on line 8
    et je ne vois pas pourquoi ...

    Merci d'avance pour votre aide.

    Au passage auriez vous des bons cours php5 objet ?
    j'ai cherché et j'en ai trouvé plein et c'est bien la le problème, j'en ai regardé un ou deux mais qui ne me convenaient pas vraiment, j'en voudrai un qui permet de vraiment bien comprendre chaque spécificité de la poo en php, ou tout du moins les principales comme ici, que je n'ai pas du bien comprendre en suivant pourtant un cours sur un site ...
    (j'ai regardé celui ci entre autre mais il n'était pas vraiment complet, même s'il explique plutot bien les types static etc ... )

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 434
    Points : 15 806
    Points
    15 806
    Par défaut
    tu as des caractères spéciaux que tu dois échapper avec la fonction "rawurlencode" pour les passer dans l'URL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<p><a href="test2.php?class=' . rawurlencode(serialize($class)) . '" >go</a></p>';
    par contre ton exemple est mal choisi, tu fais passer un mot de passe dans l'URL ce n'est pas très sécurisé

  3. #3
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Points : 234
    Points
    234
    Par défaut
    c'est juste pour le test ^^ je sais bien que le mot de passe dans l'url n'est pas super au niveau sécurité. De plus ils ne sont ici pas cryptés alors que je les crypte tout le temps dans de vraies applis (autre mesure de sécurité).

    J'ai modifié mes pages comme ceci :
    pour test1.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<p><a href="test2.php?class='.rawurlencode(serialize($class)).'" >go</a></p>';
    et pour test2.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $class = rawurldecode(unserialize($_GET['class']));
    mais cela n'a rien changé au niveau du résultat. La seule chose qui ai changée c'est la valeur de l'attribut class dans le lien après le rawrlencode ...

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 434
    Points : 15 806
    Points
    15 806
    Par défaut
    non il suffisait de faire la modification dans le fichier "test1.php" et ton exemple fonctionne
    regarde l'URL et le code html généré par "test1.php" pour comprendre ce qui n'allait pas

  5. #5
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Points : 234
    Points
    234
    Par défaut
    j'ai fais pour test1.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    	require 'class.class.php';
     
    	$class = new MyClass('shadow');
     
    	$class->afficher();
    	echo serialize($class);
    	echo '<p><a href="test2.php?class='.rawurlencode(serialize($class)).'" >go</a></p>';
    ?>
    j'ai donc ajouté l'echo sur le serialize de l'instance pour voir.

    La même chose avec test2.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <?php
    	require 'class.class.php';
     
    	if (isset($_GET['class']))
    	{
    		echo $_GET['class'];
    		$class = unserialize($_GET['class']);
     
    		$class->afficher();
    	}
    	else
    	{
    		echo 'ko';
    	}
    ?>
    j'echo le $_GET pour voir, et les deux sont identiques. Et j'ai donc enlevé le rawurldecode

    Aucune erreur non plus ne semble s'être glissée dans le code source de test1.php ... il donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    pwd<br />
    O:7:"MyClass":1:{s:3:"pwd";N;}
    <p><a href="test2.php?class=O%3A7%3A%22MyClass%22%3A1%3A%7Bs%3A3%3A%22pwd%22%3BN%3B%7D" >go</a></p>
    donc je ne sais pas trop ce qui ne va pas ... peut être mes fontions __sleep et __wakeup ...
    es voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function __sleep()
    {
    	$sauver[0] = $this->myVar;
    	return $sauver;
    }
     
    function __wakeup()
    {
    	$this->myVar = $sauver[0];
    }
    Est ce correct ou non ? Je ne suis pas sur de si j'utilise correctement ces fonctions ...

  6. #6
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Points : 234
    Points
    234
    Par défaut
    j'ai résolu mon problème, ou plutot contourné.

    J'utilise les sessions pour passer l'objet d'une page a l'autre et ca marche beaucoup mieu ^^

    Merci tout de même pour avoir pris le temps de me répondre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. passage de valeur entre deux pages avec a href
    Par phenix1988 dans le forum Langage
    Réponses: 9
    Dernier message: 14/03/2011, 17h52
  2. Passage Objet entre deux pages
    Par IcedLand dans le forum ASP.NET
    Réponses: 2
    Dernier message: 21/08/2007, 11h17
  3. Passage d'un objet entre deux classes
    Par ericlemoustic dans le forum Langage
    Réponses: 2
    Dernier message: 13/10/2006, 10h58
  4. [langage] Passage d objet entre deux fichiers
    Par Slippers dans le forum Langage
    Réponses: 2
    Dernier message: 28/04/2005, 15h45
  5. passage de parametre entre deux page asp
    Par tomtom25 dans le forum ASP
    Réponses: 4
    Dernier message: 01/04/2005, 17h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo