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
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 <?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(); ?>
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
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\"> "; } 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; } ?>
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
Partager