Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/02/2008, 17h46   #1
Membre habitué
 
Inscription : août 2004
Messages : 451
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 451
Points : 137
Points : 137
Envoyer un message via MSN à artotal
Par défaut [POO] Utilisation d'une classe pdo perso

Bonjour,
j'essaie d'implémenter une class à partir de pdo, mais j'ai toujours des erreurs ?
Code :
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
<?php
class ConnectionClass
{
	private $db = 'test'; //nom de la base de données
	private $host = 'localhost'; // nom de la machine hôte
	private $user = 'root'; // nom de l'utilisateur
	private $pwd = 'xav';// mot de passe 
	private $dsn;
	private $con;
	private $requette; // requette
 
	function __construct()
	{
		try 
		{
			$this->dsn = "mysql:dbname=$this->db;host=$this->host";
			$this->con = new PDO($this->dsn, $this->user, $this->pwd);	
		}
		catch (PDOException $e)
		{
			print 'Erreur ! : '.$e->getMessage().'<br/>';
			echo 'N° : '.$e->getCode();
			die();
		}
		return $this->con;
	}
 
	function reqSelection($requette)
	{
		$result = $con->query($requette);
		//return $result;
	}
}
//$conn=new ConnectionClass();
reqSelection("select * From client");
foreach ($result as $row)
{
echo $row['nomH'] . " - " . $row['prenomH'] . "<br />";
}
?>
l'erreur
Code :
1
2
 
Fatal error: Call to undefined function reqSelection() in /var/www/agenda_d_or/ConnectionClass.php on line 35
numéro de ligne 35 correspond :
reqSelection("select * From client");
Merci
__________________
contribution sur phpclasses d'une classe de connection à une base de donnée en php5
http://www.phpclasses.org/browse/file/23687.html
artotal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2008, 19h03   #2
Nouveau Membre du Club
 
Inscription : juin 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 41
Points : 36
Points : 36
Bonjour,
Il faut instancier un objet de type ConnectionClass pour pouvoir accéder à une de ses méthodes.

Code :
1
2
$Connec = new ConnectionClass();
$result = $Connec->reqSelection("select * From client");
MKITONE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2008, 20h13   #3
Membre habitué
 
Inscription : août 2004
Messages : 451
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 451
Points : 137
Points : 137
Envoyer un message via MSN à artotal
j'ai cette erreur

Fatal error: Call to a member function query() on a non-object in /var/www/agenda_d_or/ConnectionClass.php on line 30

Code :
1
2
3
4
5
6
	function reqSelection($requette)
	{
//ligne 30 ci-dessous
		$result = $con->query($requette);
		//return $result;
	}
__________________
contribution sur phpclasses d'une classe de connection à une base de donnée en php5
http://www.phpclasses.org/browse/file/23687.html
artotal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2008, 20h20   #4
Membre habitué
 
Inscription : août 2004
Messages : 451
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 451
Points : 137
Points : 137
Envoyer un message via MSN à artotal
Cette fois je n'ai plus d'erreur, mais la requete ne renvoie rien ?
Code :
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
<?php
class ConnectionClass
{
	private $db = 'test'; //nom de la base de données
	private $host = 'localhost'; // nom de la machine hôte
	private $user = 'root'; // nom de l'utilisateur
	private $pwd = 'xav';// mot de passe 
	private $dsn;
	private $con;
	private $requette; // requette
 
	function __construct()
	{
		try 
		{
			$this->dsn = "mysql:dbname=$this->db;host=$this->host";
			$this->con = new PDO($this->dsn, $this->user, $this->pwd);
		}
		catch (PDOException $e)
		{
			print 'Erreur ! : '.$e->getMessage().'<br/>';
			echo 'N° : '.$e->getCode();
			die();
		}
		return $this->con;
	}
 
	function reqSelection($requette)
	{
		$result = $this->con->query($requette);
		//return $result;
	}
}
 
$Connec = new ConnectionClass();
$result = $Connec->reqSelection("select * From client");
foreach ($Connec as $row)
{
echo $row['nom'] . " - " . $row['prenom'] . "<br />";
}
?>
ma table
Code :
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
-- phpMyAdmin SQL Dump
-- version 2.10.3deb1ubuntu0.1
-- http://www.phpmyadmin.net
-- 
-- Serveur: localhost
-- Généré le : Sam 16 Février 2008 à 20:19
-- Version du serveur: 5.0.45
-- Version de PHP: 5.2.3-1ubuntu6.3
 
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
 
-- 
-- Base de données: 'test'
-- 
 
-- --------------------------------------------------------
 
-- 
-- Structure de la table 'client'
-- 
 
CREATE TABLE `client` (
  nom varchar(30) NOT NULL,
  prenom varchar(30) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
-- 
-- Contenu de la table 'client'
-- 
 
INSERT INTO client VALUES ('jacky', 'double Coup');
INSERT INTO client VALUES ('Rasmus', 'Lerdorf');
INSERT INTO client VALUES ('Rasmus', 'Lerdorf');
INSERT INTO client VALUES ('Rasmus', 'Lerdorf');
INSERT INTO client VALUES ('developpus', 'artotal');
INSERT INTO client VALUES ('developpus', 'artotal');
__________________
contribution sur phpclasses d'une classe de connection à une base de donnée en php5
http://www.phpclasses.org/browse/file/23687.html
artotal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2008, 23h07   #5
Nouveau Membre du Club
 
Inscription : juin 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 41
Points : 36
Points : 36
Ok, il faut que ta fonction renvoie le résultat avec le return et le foreach doit utiliser le résultat et pas l'objet $Connec.
Par contre, dans tes requêtes il est préférable de ne pas faire de SELECT *...mais plutôt SELECT NOM,PRENOM....

Code :
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
<?php
class ConnectionClass
{
	private $db = 'test'; //nom de la base de données
	private $host = 'localhost'; // nom de la machine hôte
	private $user = 'root'; // nom de l'utilisateur
	private $pwd = '';// mot de passe 
	private $dsn;
	private $con;
	private $requette; // requette
	
	function __construct()
	{
		try 
		{
			$this->dsn = "mysql:dbname=$this->db;host=$this->host";
			$this->con = new PDO($this->dsn, $this->user, $this->pwd);
		}
		catch (PDOException $e)
		{
			print 'Erreur ! : '.$e->getMessage().'<br/>';
			echo 'N° : '.$e->getCode();
			die();
		}
		return $this->con;
	}
	
	function reqSelection($requette)
	{
		$result = $this->con->query($requette);
		return $result;	}
}
 
$Connec = new ConnectionClass();
$result = $Connec->reqSelection("select nom,prenom From client");
foreach ($result as $row)
{
	echo $row['nom'] . " - " . $row['prenom'] . "<br />";
}
?>
MKITONE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2008, 14h31   #6
Membre habitué
 
Inscription : août 2004
Messages : 451
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 451
Points : 137
Points : 137
Envoyer un message via MSN à artotal
Bonjour,
j'ai toujours la même erreur !
Code :
1
2
Erreur ! : SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: NO)
N° : 0
curieux, je vais peut-être faire une classe en php sans PDO().
Mais c'est dommage on perd la Persistence, les requêtes préparés, la sécurité accrue et plus important la robusteste.
Qu'an penses-tu ?
__________________
contribution sur phpclasses d'une classe de connection à une base de donnée en php5
http://www.phpclasses.org/browse/file/23687.html
artotal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2008, 19h55   #7
Nouveau Membre du Club
 
Inscription : juin 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 41
Points : 36
Points : 36
Non attend, tu as dû faire un copier coller du code et moi j'ai enlever le password pour tester chez moi, il suffit de le remettre et c'est ok...
MKITONE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2008, 23h27   #8
Membre habitué
 
Inscription : août 2004
Messages : 451
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 451
Points : 137
Points : 137
Envoyer un message via MSN à artotal
j'amène une amélioration notable:
(pour une production sans risque)
Code :
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
<?php
class Connection
{
	private $db = 'pdo'; 			// base de données
	private $host = 'localhost'; 	// adresse de la base
	private $user = 'root'; 		// nom
	private $pwd = ''; 				// mot de passe 
	private $con;
	private $reqSelect; 			// requette de séléction
 
	public function __construct()
	{
		try 
		{
			$dsn = "mysql:dbname=$this->db;host=$this->host";
			$this->con = new PDO($dsn, $this->user, $this->pwd);
		}
		catch (PDOException $e)
		{
			//On indique par email qu'on n'a plus de connection disponible
			error_log(date('c').': '.$e->getMessage(), 1, 'artotal@gmail.com');
			$message= new Message();
			$message=outPut('Erreur critique', 'Serveur de BDD indisponible, veuillez réessayer dans un instant');
		}
		return $this->con;
	}
 
	public function requette($reqSelect)
	{
		$result = $this->con->query($reqSelect);
		return $result;	
	}
}
 
$Connec = new Connection();
$result = $Connec->requette("select * FROM personne");
foreach ($result as $row)
{
	echo $row['nom'] . " - " . $row['prenom'] . "<br />";
}
echo date('c');
?>
la classe message (moteur de template)
Code :
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
<?php
class Message
{
	private $messageHtml;
	function __construct($as_file='message.html')
	{
		//file_get_contents — Lit tout un fichier dans une chaîne
		$this->messageHtml=file_get_contents($as_file);
	}
	public function exceptionHandler($exception)
	{
		Message::erreur('erreur inconnue', $exception->getMessage(), 'message.html');
	}
	public function outPut($as_titre, $as_message, $as_file=NULL)
	{
		// gestion des caractères spéciaux pour le titre et texte (affiche < == &lt;)
		$ls_msg=htmlentities($as_message);		
		$ls_titre=htmlentities($as_titre);
		// remplace dans le message
		$ls_sortie=str_replace('{MSG}', $ls_msg, $this->messageHtml);
		$ls_sortie=str_replace('{TITRE}', $ls_titre, $ls_sortie);
		// Affichage et arrêt du traitement
		die($ls_sortie);
	}
	public static function erreur($exception, $message, $file)
	{
		$ls_titre=htmlentities('Erreur inconnue');
		$ls_msg=htmlentities($message);
		$ls_messageHtml=file_get_contents($file);
		// remplace dans le message
		$ls_sortie=str_replace('{MSG}', $ls_msg, $this->messageHtml);
		$ls_sortie=str_replace('{TITRE}', $ls_titre, $ls_sortie);
		die($ls_sortie);
	}
}
?>
Le fichier xhtml "message.html"
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD xhtml" xml:lang="fr">
<html>
<head>
<title>Ereur</title>
<link rel="stylesheet" type="text/css" media="all" href="*.css" />
</head>
<body>
	<h1>{TITRE}</h1>
	<p class="">
		{TITRE}
	</p>
</body>
</html>
Si quelqu'un peux le tester notamment les erreurs sa serai cool , sa permetra d'améliorer cette contribe.
__________________
contribution sur phpclasses d'une classe de connection à une base de donnée en php5
http://www.phpclasses.org/browse/file/23687.html
artotal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2008, 00h12   #9
Membre habitué
 
Inscription : août 2004
Messages : 451
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 451
Points : 137
Points : 137
Envoyer un message via MSN à artotal
Quand je provoque une erreur
private $host = 'localhostuuuuuuuuuuuuu'; // adresse de la base
j'ai une première erreur qui est lié à ma configuration local ?
sendmail_from (sous m$)
Mais la deuxième erreur je ne vois pas
Code :
1
2
3
Warning: error_log() [function.error-log]: "sendmail_from" not set in php.ini or custom "From:" header missing in C:\wamp\www\pdo\testPdo.php on line 23
 
Fatal error: Call to undefined function outPut() in C:\wamp\www\pdo\testPdo.php on line 25
La class message modifié
Code :
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
<?php
class Message
{
	private $messageHtml;
	function __construct($as_file='message.html')
	{
		//file_get_contents — Lit tout un fichier dans une chaîne
		$this->messageHtml=file_get_contents($as_file);
	}
	public function exceptionHandler($exception)
	{
		Message::erreur('erreur inconnue', $exception->getMessage(), 'message.html');
	}
	public function outPut($titre, $message, $as_file=NULL)
	{
		// gestion des caractères spéciaux pour le titre et texte (affiche < == &lt;)
		$ls_msg=htmlentities($message);
		$ls_titre=htmlentities($titre);
		// remplace dans le message
		$ls_sortie=str_replace('{MSG}', $ls_msg, $this->messageHtml);
		$ls_sortie=str_replace('{TITRE}', $ls_titre, $ls_sortie);
		// Affichage et arrêt du traitement
		die($ls_sortie);
	}
	public static function erreur($exception, $message, $file)
	{
		$ls_titre=htmlentities('Erreur inconnue');
		$ls_msg=htmlentities($message);
		$ls_messageHtml=file_get_contents($file);
		$ls_sortie=str_replace('{MSG}', $ls_msg, $this->messageHtml);
		$ls_sortie=str_replace('{TITRE}', $ls_titre, $ls_sortie);
		die($ls_sortie);
	}
}
?>
__________________
contribution sur phpclasses d'une classe de connection à une base de donnée en php5
http://www.phpclasses.org/browse/file/23687.html
artotal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2008, 02h35   #10
Nouveau Membre du Club
 
Inscription : juin 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 41
Points : 36
Points : 36
Salut,
Peux tu envoyer le code de ta page de test "testPdo.php" stp ??
MKITONE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2008, 02h39   #11
Nouveau Membre du Club
 
Inscription : juin 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 41
Points : 36
Points : 36
Dans ta gestion d'exception tu devrais avoir plutôt un truc du genre
objet->outPut plutot que objet=outPut puisque c'est une méthode de ton objet..
Code :
1
2
 
$message->outPut('Erreur critique', 'Serveur de BDD indisponible, veuillez réessayer dans un instant');
MKITONE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2008, 03h47   #12
Membre habitué
 
Inscription : août 2004
Messages : 451
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 451
Points : 137
Points : 137
Envoyer un message via MSN à artotal
Oui c'était ça, une faute d'inatention...
Mais j'ai :

Code :
1
2
3
4
Warning: error_log() [function.error-log]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\wamp\www\pdo\testPdo.php on line 23
Erreur critique
 
Erreur critique
quand je lance testPdo.php
Code :
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
<?php
require_once('message.class.php');
class Connection
{
	private $db = 'pdo'; 			// base de données
	private $host = 'localhost'; 	// adresse de la base
	private $user = 'rootiiii'; 		// nom
	private $pwd = ''; 				// mot de passe 
	private $con;
	private $reqSelect; 			// requette de séléction
	private $reqExecution; 			// requette d'execution
 
	public function __construct()
	{
		try 
		{
			$dsn = "mysql:dbname=$this->db;host=$this->host";
			$this->con = new PDO($dsn, $this->user, $this->pwd);
		}
		catch (PDOException $e)
		{
			//On indique par email qu'on n'a plus de connection disponible
			error_log(date('D-m-Y').': '.$e->getMessage(), 1, 'artotal@gmail.com');
			$message= new Message();
			$message->outPut('Erreur critique', 'Serveur de BDD indisponible, veuillez réessayer dans un instant');
		}
		return $this->con;
	}
 
	public function requetteSel($reqSelect)
	{
		$result = $this->con->query($reqSelect);
		return $result;
	}
 
	public function requetteExe($reqExecution)
	{
		$result = $this->con->exec($reqExecution);
		return $result;
	}	
}
 
$Connec = new Connection();
$result = $Connec->requetteSel("select * FROM personne");
foreach ($result as $row)
{
	echo $row['id'].'/ '.$row['nom'] . " - " . $row['prenom'] . "<br />";
}
$result = $Connec->requetteExe("delete id FROM personne where id=2");
?>
dans le php.ini j'ai mis:
Code :
1
2
3
4
5
6
7
[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25
 
; For Win32 only.
sendmail_from = artotal@gmail.com
je crois que l'utilisation de set_ini(); serait pas mal, ça devrai amélioré la portabilité ?

@MKITONE
as-tu des idée d'amélioration, on en parle ?
@+
__________________
contribution sur phpclasses d'une classe de connection à une base de donnée en php5
http://www.phpclasses.org/browse/file/23687.html
artotal est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h36.


 
 
 
 
Partenaires

Hébergement Web