begin process at 2012 05 31 02:29:24
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive PHP

 > 

Archives

 > 

AU SECOURS !!!

 > 

problème de session avec objets


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

problème de session avec objets

mardi 20 décembre 2005 à 20:06:48 | problème de session avec objets

jackrichard

salut a tous

voila mon problème j'utilise des objets et les sessions mais voilà lorsque je fixe mon objet dans ma session je le récupére vide et je ne peut utiliser les méthodes qui l'implémente on ma dit d'utiliser les méthode __sleep et __wake mais cela ne fonctionne pas pour autant

 

page contenant les définition d'objets

 

<?php

class object

{

protected $reseau=0;

protected $database=0;

public $sql="select * from marque ";

private function connection()

{

$this->reseau=@mssql_connect("JACK-2790B2F285","","");

if($this->reseau!=0)

{

$this->database=@mssql_select_db("PTI",$this->reseau);

if($this->database==0)

exit();

}

else

exit();

}

 

private function __construct()

{

$this->connection();

//$this->direc();

}

}

 

class requete extends object

{

private $contenue;

private function requete()

{

if(strpos($this->sql,'insert')===false)

{

if(strpos($this->sql,'delete')===false)

{

if(strpos($this->sql,'update')===false)

{

return 0;

}

else return 1;

}

else return 1;

}

else return 1;

}

public function direc()

{

if($this->requete()==1)

$this->requetegene();

else

$this->requeteselect();

}

private function requetegene()

{

if(get_magic_quotes_gpc())

mssql_query($this->sql,$this->reseau);

else

{

$this->sql=addcslashes($this->sql);

mssql_query($this->sql,$this->reseau);

}

}

private function requeteselect()

{

if(get_magic_quotes_gpc())

{

$this->contenue=@mssql_query($this->sql,$this->reseau);

if(@mssql_num_rows($this->contenue)!=0)

{

$j=@mssql_num_fields($this->contenue);

while($ligne=mssql_fetch_row($this->contenue))

{

echo"<tr>";

for($i=0;$i<$j;$i++)

echo "<td><a href='$_SERVER[REQUEST_URI]'?vari=$ligne[$i]>".trim($ligne[$i])."</a></td>";

echo"</tr>";

}

}

elseif($this->contenue==0)

die("désolé une erreur s'est produite");

}

else

{

$this->sql=addcslashes($this->sql);

$contenue=mssql_query($this->sql,$this->reseau);

if(mssql_num_rows($contenue)!=0)

{

$j=mssql_num_fields($contenue);

while($ligne=mssql_fetch_row($contenue))

{

echo"<tr>";

for($i=0;$i<$j;$i++)

echo "<td>".$ligne[$i]."</td>";

echo"</tr>";

}

}

}

}

public function mutateur($res)

{

$this->sql=$res;

$this->direc();

}

public function __construct($init="")

{

$this->sql=$init;

parent::__construct();

}

public function __wake()

{

if($this->reseau==0)

parent::__construct();

}

public function __sleep()

{

}

}

?>

 

 

1ère page

 

<?php

session_start();

include("obj.php");//contient les objets déclaré en haut

 

$monobjet=new requete("select lisoustype from sous_type;");

$_SESSION[objet]=$monobjet;

 

//dans cette page j'ai un lien qui m'enmène sur la seconde feuille

?>

 

2ème page

 

<?php

session_start();

 

 

 

if(empty($_REQUEST[name])==false && isset($_REQUEST[name])==true)//lorsque le formulaire est validé

$_SESSION[objet]->mutateur();

?>

 

 

mais lors de l'appel de cette fonction

 

$_SESSION[objet]->mutateur();

 

J'ai cette erreur:

 

Fatal error: main() [function.main]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "requete" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in c:\wamp\www\inscription.php on line 92
mardi 20 décembre 2005 à 21:04:12 | Re : problème de session avec objets

FhX

Réponse acceptée !
Il faut que tu charges ta classe avant d'utiliser :
$objet = unserialise($_SESSION['objet']);

Par contre, je viens de voir que tu fais des trucs mauvais.

On instancie JAMAIS une classe dans une superglobale !!!!!!
On utilise la superglobal $_SESSION pour stocker ta classe sérialisée !!

Donc ce que tu dois faire :

<?php
$objet = new objet;

$objet->method();
$objet->method();

$_SESSION['objet'] = serialize($objet); // Utilisera la méthode magique __sleep() si elle est existante.
?>
<?php

if ( isset($_SESSION['objet']) ) {
   $objet = unserialize($_SESSION['objet']);
}

$objet->method();

//...
?>

Par contre, ca ne sert à rien de sérialiser une classe de DB... pour la simple et bonne raison que tu dois fermer OBLIGATOIREMENT la connection à la fin de ta classe pour la réouvrir lors de l'instanciation futur...

Regarde toutes les classes de DB présentes sur PHPCS et sur le net, et tu verras qu'aucune utilise la méthode que tu fais toi, car c'est techniquement impossible.

Voila !
mardi 20 décembre 2005 à 23:19:25 | Re : problème de session avec objets

FhX

De plus, une classe rien que pour les requetes, ca ne sert pas à grand chose.

Dans ce cas la, autant faire une classe de query, une classe de fetch, etc... :/ L'interêt est limité ici.

Nonon, ta classe de requete ne doit pas exister, elle doit etre implanté en tant que méthode de ta classe principale. Ce n'est pas comme ca que ca marche l'OO !
mercredi 21 décembre 2005 à 20:50:46 | Re : problème de session avec objets

jackrichard

oki merci de vos conseil je vais pencher la dessus et c'est pas que je veuille utiliser les objet pour ca on me demande de faire une apli avec objet pour les requete
mercredi 21 décembre 2005 à 21:06:56 | Re : problème de session avec objets

FhX

Oui mais dans ce cas la, oriente le tout sous une seule classe.

Regarde les classes PHP5 déja présente, tu peux te servir d'une d'entre elle comme base pour une futur modification par exemple !


Cette discussion est classée dans : function, reseau, sql, mssql, contenue


Répondre à ce message

Sujets en rapport avec ce message

Liaison php-mssql [ par fafa00 ] Bonjour,Je voudrais connecter une base sql (j'utilise sql server 2000 et iis) sur une page phpVoici mon code : $server="localhost";$username="root";$p connexion avec sql server [ par mabrouk ] bonjour, svp je travaille sur un poste client windows2000 server dans un domaine j'ai installé easyphp(php+apache+mysql), j'ai voulu se connecter a no Connection mssql_connect [ par galldup ] Je ne comprend pas très bien : Quand je me connecte au serveur SQL SERVER 2000 et que je selectionne la base de données nommée 'ESSAI', cela marche. problème de connexion SQL SERVER 2005 [ par milouse95620 ] Afin de déployer une page web sur une serveur linux, je prépare la page sur un xp avec wampserver 2.Je dois me connecter sur un sql server 2005.J'ai c Besoin d'analyse critique [ par zzzzzz ] Yop,J'aurai besoin d'avis critique concernant une classe de connection mysql. Eventuel bugs/failles et idées pour la développer d'avantage.Voici la cl problème de connection au serveur sql server avec mssql_connect() sous XP [ par briant86 ] Bonjour à tous, Voici mon problème: J'ai installé sql server2005 sur XP et l'installation s'est bien passé, via sql management studio je me connecte à Problème avec les requêtes préparé [ par yukimura27 ] Bonjour, J'aimerais que l'on éclair ma lanterne car j'ai quelques soucis et quelques incompréhension par ci par la [^^happy13]. j'ai une page PDO.ph connexion BDD SQL Server [ par akkaoui ] Salut tout le monde! J'essaie de se connecter à une base de donnée SQL server via un script php pour mon projet Donc j'utilise le code suivant Code tableau retounée par procédure stockée sqlserver ==> php [ par younes371 ] Bonjour, J’ai une procédure stockée sous mssql (sql server) qui retounée un résultat sous forme de tableau (requette sql). Mais j’ai pas pu récuperer


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales