Page 1 sur 1

[résolu]transemettre un objet par session

Posté : 02 déc. 2011, 21:05
par laurents
Bonsoir,

j'ai un problème de transmission d'objet par session que je n'ai pu résoudre par une recherche. Donc je l'expose ici : je lis un fichier Excel avec phpExcel ; ça me retourne un objet que je souhaite transmettre à la page qui va l'exploiter, et c'est là que ça coince.

Mon code :
test_xls_archive.php :
 <?php 

include ('upload.html' );
include ('lire_xls.php' );
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html; charset=ISO-8859-1"
 http-equiv="content-type">
  <title></title>
</head>
<body>

<a href="analyse_xls_archive.php">afficher</a>
</body>
</html> 
lire_xls.php :
  <?php  
   session_start();

   if (isset($_SESSION['nom_fichier'])) {$File_name=$_SESSION['nom_fichier'];

   $include = "PHPExcel/Classes/PHPExcel/IOFactory.php";

   if (is_file($include))   include_once ($include);
   else                     echo "Fichier <b>".$include."</b> inaccessible <br>\n";

   $objPHPExcel = PHPExcel_IOFactory::load($File_name);
   $_SESSION['obj_xls']=serialize($objPHPExcel);
   }
?>
et analyse_xls_archive.php :
  <?php 
session_start();
if (isset($_SESSION['obj_xls'])) {$objPHPExcel=unserialize($_SESSION['obj_xls']);
  foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
...
et l'erreur :
Notice: Undefined variable: objPHPExcel in /homez.309/villardd/www/xls/analyse_xls_archive.php on line 4

Fatal error: Call to a member function getWorksheetIterator() on a non-object in /homez.309/villardd/www/xls/analyse_xls_archive.php on line 4
comment corriger ça ?

Re: transemettre un objet par session

Posté : 02 déc. 2011, 22:42
par xTG
Sur la page où tu deserialize il faut que tu ais inclus le fichier contenant la class.

Re: transmettre un objet par session

Posté : 02 déc. 2011, 23:09
par laurents
J'ai inclus ce fichier sur la page :
//session_start();
   $include = "PHPExcel/Classes/PHPExcel/IOFactory.php";

   if (is_file($include))   include_once ($include);
   else                     echo "Fichier <b>".$include."</b> inaccessible <br>\n";
if (isset($_SESSION['obj_xls'])) {$objPHPExcel=unserialize($_SESSION['obj_xls']);else echo "objet existe pas<br>";
  foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
(et commenté session_start() car c'était déjà fait avant), mais il me reste une fatal error :
Fatal error: main() [<a href='function.main'>function.main</a>]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "PHPExcel" 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 /homez.309/villardd/www/xls/analyse_xls_archive.php on line 4
:cry: et la ligne 4 mentionnée est vide :?:

Re: transemettre un objet par session

Posté : 03 déc. 2011, 11:05
par xTG
Si tu enlèves le session_start() comment veux-tu accéder à $_SESSION...
Et ton problème provient du fait que la class doit être inclue avant le session_start().

Re: transemettre un objet par session

Posté : 04 déc. 2011, 00:27
par laurents
Si tu enlèves le session_start() comment veux-tu accéder à $_SESSION...
Je l'avais fait par habitude avec les include (si fait ds l'un des fichiers, il ne faut pas recommencer...), mais j'avais pas réalisé que pour un lien, c'est pas du tout pareil...

Sinon, mtn, c'est nickel : merci bcp =D>