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 :

Exception à la déclaration d'une variable de session


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Points : 11
    Points
    11
    Par défaut Exception à la déclaration d'une variable de session
    Bonjour,

    Je viens vers vous aujourd'hui car je ne trouve pas la solution à un problème de boucle infinie d'exceptions. Je précise que je me forme à l'orienté objet en PHP, ce que je fais n'est pas forcément utile, j'essaye juste d'expérimenter et d'améliorer mon niveau. Là, le but est de faire une classe Tableau avec un minimum de fonctionnalités.

    Je me permets de joindre le code de 2 de mes fichiers :

    index.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
    function loadClasses($classe){
    	require $classe.'.php';
    }
    spl_autoload_register('loadClasses');
    session_start();
    include('html.php');
    enteteHTML();
    $tab = new Tableau("TabParam");
    $tab->insertInput();
    echo Tableau::getNbTabs();
    //$_SESSION['tab']=$tab;
    baseHTML();
    ?>
    tableau.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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    <?php
     class Tableau
    {
    	public function __construct($tableSQL){ // constructeur
    	  try{
     
    	  $this->db = new PDO("mysql:host=localhost;dbname=TabTest", "root", "");
    	  }
    	  catch(Exception $e){
            die('Erreur : '.$e->getMessage());
    		}
    		$this->largeur = $this->columnNumber($tableSQL);
    		$this->tableSQL = $tableSQL;
    		self::$nombreTabs++;
    		$this->valeurs = array(array());
    		$this->requestReturn($this->tableSQL);
    		$this->show();
    	}
    	public function requestReturn($tableSQL){ // mise en mémoire locale de la table
    	 	$querydim = $this->db->query("select * from $tableSQL");
    	 	if(!is_object($querydim)) return "Object Error, check your request and your table";
    	 	$j = 0;
    	 	while($fetchresult=$querydim->fetch()){
    	 		for($i=0; $i<$this->largeur; $i++){
    	 			$this->valeurs[$j][$i] = $fetchresult[$i];
    	 		}
    	 		$j++;
    	 	}
    	 	$this->longueur = $j;
     	}
      	public function show() { // fonction d'affichage de la table mémorisée
     		echo "<table name=\"tab1\">"; 		
     		foreach($this->valeurs as $cle=>$valeur){
     			echo "<tr>";
     			foreach($valeur as $cle=>$value){
     				echo "<td> $value </td>";
     			}
     			echo "</tr>";
    		}
    		echo "</table>";
     	}
      	public function columnNumber($tableSQL){ // fonction renvoyant le nombre de colonne de la table
     		$querydim = $this->db->query("select * from $tableSQL");
     		return $querydim->columnCount();
     	}
     	public function insertData($row){ // permet d'insérer des données dans la table SQL
     		header('Location : index.php');
     		$querydim = $this->db->query("insert into ($this->tableSQL) values ($row)");
     	}
     	public function insertInput(){
     		echo "<form method=POST action=traitement.php>";
     		for($i=0; $i<$this->largeur; $i++){
     			echo "<input type=\"text\" size=\"3\" name=\"input$i\">&nbsp;";
     		}
     		echo "<input type=\"submit\" size=\"2\" name=\"submitInsert\"></form><br/>";
     	}
    	private static $nombreTabs=0;
    	public static function getNbTabs(){
    		return 'la classe tableau a été instanciée '.self::$nombreTabs.' fois';
    	}
    	private $db;
    	private $largeur;
    	private $longueur;
    	private $tableSQL;
    	private $valeurs;
    }
    ?>
    Le code commenté dans index.php, s'il est décommenté, provoque une erreur : Fatal error: Exception thrown without a stack frame in Unknown on line 0

    J'ai l'impression que le problème vient de PDO, puisque d'après ce que j'ai lu, mettre en variable de session un objet se fait de cette manière là, sans sérialiser. De toutes façons, la sérialisation ne fonctionne pas, on ne peut pas sérialiser un objet PDO (c'est ce que me dit l'erreur renvoyée dans ce cas!). Je précise aussi que j'aimerais que tout ce tintouin fonctionne avec PDO

    Merci d'avance

    Edit : enteteHTML() et baseHTML() se contentent de faire des echo de balises HTML

  2. #2
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Points : 11
    Points
    11
    Par défaut
    Bon je m'autoréponds, j'ai résolu mon problème en gérant la connexion à la base depuis l'extérieur de la classe. En espérant que ça puisse en aider certains

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    PDO n'étant pas sérialisable, il faut jouer des méthodes magiques __sleep et __wakekeup (ou similaire) pour respectivement écarter l'attribut correspondant de la sérialisation et la recréer à la désérialisation du restant de l'objet.

    Sérialiser un objet PDO n'a donc aucun intérêt.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 13/07/2006, 10h04
  2. [C#] ArrayList dans une variable de session ?
    Par Oberown dans le forum ASP.NET
    Réponses: 1
    Dernier message: 12/12/2005, 15h50
  3. déclaration d'une variable
    Par ouldfella dans le forum Composants VCL
    Réponses: 8
    Dernier message: 20/10/2005, 18h21
  4. [C#] Tester existence d'une variable de session
    Par IDNoires dans le forum ASP.NET
    Réponses: 2
    Dernier message: 31/12/2004, 12h30
  5. Création d'une variable de session avec un ID
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 18/10/2004, 10h28

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