Salut salut.
Je m'essaye à la POO avec mon piètre niveau en php.
Free ne disposant visiblement pas de l'API mysqli, je me décide à faire une petite class mysql adaptée à mes besoins.

Premier essai: rien ne marche.
Après qques heures de bidouille: rien ne marche.

Alors au final j'ai construit ma class en la calibrant par rapport à mon script d'exemple (une récéption de formulaire login).
Bref, c'est encore bien loin d'être classe utile...

Voici ma classe:

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
 
<?php
 
class mysql {
 
	public $query_result='';
	public $num_rows='';
	public $fetch_row=array();
 
	public function __construct() {
		$connect = mysql_connect("sql.free.fr", "xxx", "xxx");
				if (!$connect) { echo "<br /> Echec connection serveur MySQL <br />";	exit();	}
		echo "<br /> Connection serveur MySQL réussie <br />" ;
		$dbconnect = mysql_select_db(xxx,$connect);	
				if (!$dbconnect) { echo "<br /> Echec connection BDD <br />"; exit(); }
		echo "<br /> Connection BDD réussie <br />" ;
	}
 
        public function __destruct()
        {
  	        $this->close();
        } 	
 
	public function mysql_do_query($sql) {		
		$query_result=mysql_query($sql);
				if (!$query_result) { echo "<br /> Echec de la requête mysql_do_query <br />";	exit(); }
		echo "<br /> mysql_do_query OK<br />" ;
		$this->query_result=$query_result ;
	}
 
	public function mysql_do_num_rows($query) {
		$num_rows=mysql_num_rows($query);
				if (!$num_rows) { echo "<br /> Echec de la requête mysql_do_num_rows <br />";	exit(); }
		echo "<br /> mysql_do_num_rows OK <br />";
		$this->num_rows=$num_rows ;
	}
 
	public function mysql_do_fetch_row($query) {
		$fetch_row=mysql_fetch_row($query);
				if (!$fetch_row) { echo "<br /> Echec de la requête mysql_do_fetch_row <br />";	exit(); }
		echo "<br /> mysql_do_fetch_row OK <br />";
		$this->fetch_row=$fetch_row;
	}
 
 
 
}
le code de ma récéption de formulaire:

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
 
<?php
 
include ("class.mysqlw.php5");
 
extract($_POST);
$name = trim(htmlspecialchars(addslashes($_POST["name"])));
$pass = trim(htmlspecialchars(addslashes($_POST["pass"])));
 
$mysql_login = new mysql;
 
$sql = sprintf("SELECT * FROM w_users WHERE name='%s' AND pass='%s'", mysql_real_escape_string($name), mysql_real_escape_string($pass));
 
$mysql_login->mysql_do_query($sql);
 
$query = $mysql_login->query_result;
 
$mysql_login->mysql_do_num_rows($query);
 
if ($mysql_login->num_rows == 1) 
{
	$mysql_login->mysql_do_fetch_row($query);
 
	$datalogin = $mysql_login->fetch_row;
 
	echo "<br />Salut<br />".$datalogin['id']." ".$datalogin['name']." ".$datalogin['pass']." ".$datalogin['level']."<br />";
}
 
else
{
	echo "login échoué";
}
 
 
$mysql_login->close();
 
?>
et enfin voici ce que cela me retourne:

Connection serveur MySQL réussie

Connection BDD réussie

mysql_do_query OK

mysql_do_num_rows OK

mysql_do_fetch_row OK

Salut


Fatal error: Call to undefined method mysql::close() in /var/www/free.fr/1/0/ouafouaf9/_WAFBLOG/exercices/004_structure_de_controle/3_Class/form.php5 on line 34

Fatal error: Call to undefined method mysql::close() in /var/www/free.fr/1/0/ouafouaf9/_WAFBLOG/exercices/004_structure_de_controle/3_Class/class.mysqlw.php5 on line 20

Donc deux problème:

1) j'ai pas trop compris le fonctionnement de __destruct()
2) l'extraction des résultats de mysql_fetch_row dans un tableau.

Merci pour votre aide éventuel
Je trouve pas trop d'infos ou de sites pour m'aider. La pluparts des documents sont soit trop compliqués pour moi, soit ne m'aident pas...