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 :

Appel méthode d'objet en SESSION


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 428
    Points : 123
    Points
    123
    Par défaut Appel méthode d'objet en SESSION
    Bonjour,

    Mon problème prend plusieurs sujet. La POO, les sessions, et le sqli. Il fallait bien choisir un endroit alors je suis venu ici.

    Pour faire simple j'ai une class qui hérite de mysqli, et je lui rajoute des méthodes propre qui utilise les méthodes parents de mysqli. Pour aller au plus simple j'ai fait une méthode affichage() qui m'affiche une connerie juste pour voir si cela fonctionne.
    Pour mes besoin j'ai du créer une fonction qui test si une variable de session existe et c'est le cas j'appel les méthodes de mon objet contenu en session, je détruit tout. Puis je recréer un objet que je remet en session.

    Le but évidement est de créer une nouvelle connexion dans certain cas.
    voici ma fonction
    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
    include('class_connexion.php');
    session_start();
    function mysqlI_create_co(){
    	//unset($_SESSION['connexion']);
    	var_dump($_SESSION['connexion']);
    	try{	
    		$aOpt = array(	'server' => 'localhost'
    			,'login' => '****'
    			,'password' => '****'
    			,'bdd' => '*****'
    		);
    		echo 'dans le try<br>';
    		if( isset($_SESSION['connexion']) && !empty($_SESSION['connexion']) ){
    			echo 'je suis dans le if<br>';
    			$_SESSION['connexion']->affichage();
    			if( $_SESSION['connexion']->test_connexion_exist() ){
    				echo 'je suis dedans<br>';
    				$_SESSION['connexion']->destroy_co();
    			}
    			$_SESSION['connexion'] = array();
    			unset($_SESSION['connexion']);
    		}
    		echo 'create session<br>';
    		var_dump($_SESSION['connexion']);
    		$_SESSION['connexion'] = new myMySQLi($aOpt);
    		var_dump($_SESSION['connexion']);
    	}catch(Exception $e){
    		echo $e->getMessage();
    		echo $e->getLine();
    		echo $e->getFile();
    		echo $e->getTrace();
    	}
    }
    Vous remarquerez que j'ai bien inclus ma class avant le session_start, et que j'ai aussi des var_dump pour voir si mon objet existe et il existe bien.
    Je sais que en session, je ne transporte pas le méthode de l'objet mais je dois normalement y avoir accès si la class est incluse.
    Quand a me méthode affichage() elle fait un simple echo.

    Je me retrouve avec cette erreur.
    "Fatal error: Call to undefined method mysqli::affichage() in /Users/gael/Sites/MySQLi/fonction.php on line"
    Et le plus étrange c'est que j'ai cette erreur sous chrome mais pas sous firefox.... pourquoi?

    J'éspère avoir été suffisamment clair.
    Je vous remercie d'avance pour vos lumières.

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    affiche le contenu de la variable de session avant l'appel de "affichage" pour vérifier que cette variable contient bien ce que tu attendais

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    euh, tu dois faire attention à l'avertissement en gras sur cette page
    Et new myMySQLi($aOpt); est dérivée d'une ressource... Donc ta classe incluse en session ne l'est pas en fait !

    Note aussi que empty() englobe déjà le test isset(), pas la peine de le faire deux fois donc

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 428
    Points : 123
    Points
    123
    Par défaut
    Bonjour,

    Merci d'avoir prit le temps de me répondre.
    Alors j'ai trouver qu'il s'agissait d'un objet récalcitrant, d'un autre type suite a mes tests.

    j'ai essayer rajouter plusieurs unset dans le code et mon objet qui n'étais pas du bon type a finit par dégager par hasard.
    le truc bete.

    En revanche je récupère l'objet mysqli de ma class enfant qui hérite de mysqli.
    je le met en session et j'essaye lors d'une nouvelle création d'objet "mysqlI_create_co"
    changer l'attribut mysqli de mon nouvelle objet par le mysqli de l'objet précédent qui est en session.

    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
    //session_start();
    	class myMySQLi extends mysqli{
    		private $existe;
    		public $mysqli;
     
     
    		public function __construct($aOpt,$sess = null){
     
    			try{
     
    				//echo '<br>constructeur';
    				if( $sess != null){
    						echo '<br>je remplace';
    						$this->mysqli = $sess;
     
    				}else{
    					echo '<br>je creer';
    					$this->mysqli = new mysqli($aOpt['server'], $aOpt['login'], $aOpt['password'], $aOpt['bdd']);
    					if (!$this->mysqli->set_charset("utf8")) {
    						throw new Exception('Erreur utf8 num : '.$this->mysqli->connect_errno.' - message : '.$this->mysqli->connect_error.' - ligne : '.__LINE__.' - Fichier '.__FILE__);
    				    	exit('Erreur SQL num : '.$this->mysqli->connect_errno.' - message : '.$this->mysqli->connect_error.' - ligne : '.__LINE__.' - Fichier '.__FILE__);
    					}
    				}
    avec les appels :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if( is_object($_SESSION['coo'])){
    		echo '<br>dans le premier if';
    		if ($_SESSION['coo'] instanceof mysqli) {
    			echo 'dans le second if';
    			$toto = new myMySQLi($aOpt,$_SESSION['coo']);
    		}else{
    			$toto = new myMySQLi($aOpt);
    		}
    	}else{
    		echo '<br>premier else';
    		$toto = new myMySQLi($aOpt);
    	}
     
    	$_SESSION['coo'] = $toto->mysqli;
    Quand j'affiche le thread_id, les numéro saute de 3 en 3, alors que je devrais garder le même id de connexion non ?

    Je vous remercie par avance.
    Je vous remercie d'avance pour vos lumières.

Discussions similaires

  1. Une méthode toString qui appelle tous les objets
    Par Invité dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 28/05/2013, 18h09
  2. Appeler une méthode d'objet via son nom à l'exécution
    Par Nono40 dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 09/02/2013, 11h51
  3. conception java appeler méthode sur un objet de type Object
    Par molesqualeux dans le forum Langage
    Réponses: 5
    Dernier message: 04/02/2011, 12h05
  4. Problème d'appel de méthode d'objets COM
    Par tibobao dans le forum C#
    Réponses: 0
    Dernier message: 03/08/2010, 17h35
  5. [objet] appeler une méthode d'objets contenus dans un tableau (iterator ?)
    Par psychomatt dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/09/2006, 16h28

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