Bonjour à tous,

Je suis en train de développer une classe pour gérer les menus, tout avec PDO.

Bref quand je lance ma fonction create_menu('0') depuis mon objet.

J'ai dès la première recursivité de mon code, une erreur de ce type

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Fatal error: Call to a member function fetch() on a non-object in D:\Hebergement\xampp\htdocs\cms creamotion\class menu.php on line 98
Voici mon code

SI vous avez une idée, je suis preneur !

Merci d'avance

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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
 
<?php
 
/**
 * Class Menu
 *
 * @version 0.1
 * @copyright 2006 - Xavier VALENTIN
 */
class Menu {
 
public $db;						// base de données - class d'abstraction PDO
public $table;					// table contenant les informations du menu
 
 
	function __construct($z_table,$z_db){
		$this->db 		= $z_db;
		$this->table 	= $z_table;
	}
 
   	/**
   	 * Menu::get_title()
   	 *
   	 * @param mixed $id
   	 * @return - string - donne le title pour $id
   	 **/
   	function get_title($id){
   		$title	= $this->db->query("SELECT title FROM $this->table
		   							WHERE id = '$id'");
   		$result = $title->fetch(PDO::FETCH_BOTH);
      	return $result[0];
   	}
 
   	/**
   	 * Menu::get_parentID()
   	 *
   	 * @param mixed $id
   	 * @return - string - donne le parentID pour $id
   	 **/
   	function get_parentID($id){
   		$parentID	= $this->db->query("SELECT parentID FROM $this->table
		   							WHERE id = '$id'");
   		$result 	= $parentID->fetch(PDO::FETCH_BOTH);
      	return $result[0];
   	}
 
	/**
	 * Menu::create_node()
	 *
	 * @param mixed $title
	 * @param mixed $position
	 * @param mixed $parentID
	 * @return
	 **/
	function create_node($title,$position,$parentID){
		$this->db->query("INSERT INTO $this->table(title,position,parentID)
							VALUES ('$title','$position','$parentID')");
	}
 
	/**
	 * Menu::delete_node()
	 *
	 * @param mixed $id
	 * @return
	 **/
	function delete_node($id){
		$this->db->query("DELETE FROM $this->table WHERE id = '$id'");
	}
 
	/**
	 * Menu::update_node()
	 *
	 * @param mixed $id
	 * @param mixed $title
	 * @param mixed $position
	 * @param mixed $parentID
	 * @return
	 **/
	function update_node($id,$title,$position,$parentID){
		$this->db->query("UPDATE $this->table SET
							title		=	'$title',
							position	=	'$position',
							parentID	= 	'$parentID'
							WHERE id	=	'$id';");
	}
 
	function create_menu($parentID){
		global $i;
		global $req;
 
		if ($parent == 0) {$i=0;}
		$i = $i + 1 ;
 
   		$req = $this->db->query("SELECT * FROM $this->table
		   							WHERE parentID = '$parentID'");
 
		print "<ul id=\"menu\">\n";
 
		while($myrow  = $req->fetch()) {
			print '<li><a href="'.$myrow['id'].'">'.$myrow['title'].'</a>';
			$this->create_menu($myrow['id']);
			print "</li>\n";
		}
		print "</ul>\n";
 
	}
 
}
?>
Et pour excuter ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
<?php
// paramètres de connexion
$dsn = 'mysql:host=localhost;dbname=mabase';
$user = 'utilisateur';
$password = 'motsdepasse';
$db = new PDO($dsn, $user, $password);
 
$menu = new Menu('matable', $db);
 
$menu->create_menu('0');
?>