Subversion Repositories eFlore/Applications.cel

Rev

Rev 820 | Rev 827 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 820 Rev 822
Line 11... Line 11...
11
 * @copyright © 2010, Jean-Pascal MILCENT
11
 * @copyright © 2010, Jean-Pascal MILCENT
12
 */
12
 */
13
abstract class Cel {
13
abstract class Cel {
14
	const TYPE_OBS = 'observation';
14
	const TYPE_OBS = 'observation';
15
	const TYPE_IMG = 'image';
15
	const TYPE_IMG = 'image';
-
 
16
	const SQL_MODE_ASSOC = PDO::FETCH_ASSOC;
-
 
17
	const SQL_RETOUR_COMPLET = 'All';
-
 
18
	const SQL_RETOUR_LIGNE = 'Row';
-
 
19
	const SQL_RETOUR_COLONNE = 'Column';
-
 
20
	const SQL_RETOUR_BRUT = 'Raw';
Line 16... Line 21...
16
	
21
	
17
	public $config;
22
	public $config;
18
	private $ressources;
23
	private $ressources;
19
	private $parametres;
24
	private $parametres;
Line 56... Line 61...
56
		// Affiche les erreurs détectées par PDO (sinon mode silencieux => aucune erreur affiché)
61
		// Affiche les erreurs détectées par PDO (sinon mode silencieux => aucune erreur affiché)
57
		$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
62
		$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
58
        return $PDO;
63
        return $PDO;
59
	}
64
	}
Line -... Line 65...
-
 
65
	
-
 
66
	/**
-
 
67
	 * Protège automatiquement toutes les chaines comprises entre deux caractères '|'.
-
 
68
	 * Puis execute la requete.
-
 
69
	 * @see protegerRequete()
-
 
70
	 * @param unknown_type $requete
60
	
71
	 */
-
 
72
	protected function requeter($requete, $retour = self::SQL_RETOUR_COMPLET, $mode = PDO::FETCH_ASSOC) {
-
 
73
		$requete = $this->protegerRequete($requete);
-
 
74
		return $this->executerRequete($requete);
-
 
75
	}
61
	protected function executerRequete($requete, $retour = 'All', $mode = PDO::FETCH_ASSOC) {
76
	
-
 
77
	/**
62
		try {
78
	 * Protège automatiquement toutes les chaines comprises entre deux caractères '|'.
63
			switch ($retour) {
79
	 * @see protegerRequete()
-
 
80
	 * @param unknown_type $requete
-
 
81
	 */
64
				case 'All' :
82
	protected function executer($requete) {
-
 
83
		$requete = $this->protegerRequete($requete);
-
 
84
		return $this->executerRequeteSimple($requete);
-
 
85
	}
65
					$resultat = $this->bdd->query($requete)->fetchAll($mode);
86
	
-
 
87
	/**
-
 
88
	 * Méthode permettant de rechercher dans une requete SQL sous forme de chaine (String) les chaines
-
 
89
	 * à protéger. Cela évite de protéger chaque variable avant de l'insérer dans une requete SQL.
-
 
90
	 * Par contre, il est important que les chaine à protéger ne contiennent pas le caractère '|'.
66
					break;
91
	 * 
-
 
92
	 * @param $requete
67
				case 'Column' :
93
	 */
-
 
94
	protected function protegerRequete($requete) {
-
 
95
		if (substr_count($requete, '|') % 2 === 0) {
68
					$resultat = $this->bdd->query($requete)->fetchColumn();
96
			if (preg_match_all('/\|([^|]*)\|/', $requete, $correspondances, PREG_SET_ORDER)) {
69
					break;
97
				print_r($correspondances);
70
				default:
98
				foreach ($correspondances as $chaine) {
71
					$resultat = false;
99
					$chaine_protegee = $this->bdd->quote($chaine[1]);
-
 
100
					$requete = str_replace($chaine[0], $chaine_protegee, $requete);
72
					$this->messages[] = "Le type de retour '$retour' est inconnu.";
101
				}
-
 
102
			}
-
 
103
		} else {
-
 
104
			$this->messages[] = "La requête a protéger contient un nombre impair de caractère de protection '|'.";
-
 
105
			$requete = false;
-
 
106
		}
-
 
107
		return $requete;
-
 
108
	}
-
 
109
	
-
 
110
	protected function proteger($chaine) {
-
 
111
		return $this->bdd->quote($chaine);
-
 
112
	}
-
 
113
	
-
 
114
	/**
-
 
115
	 * @deprecated utiliser executer() à la place
-
 
116
	 * @see executer()
-
 
117
	 */
-
 
118
	protected function executerRequeteSimple($requete) {
-
 
119
		try {
73
			}
120
			$resultat = $this->bdd->exec($requete);
74
			if ($resultat === false) {
121
			if ($resultat === false) {
75
				$this->messages[] = "La requête a retourné aucun résultat.";
122
				$this->messages[] = "La requête a échoué.";
76
			}
123
			}
77
		} catch (PDOException $e) {
124
		} catch (PDOException $e) {
78
			$this->messages[] = sprintf($this->getTxt('sql_erreur_requete'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
125
			$this->messages[] = sprintf($this->getTxt('sql_erreur_requete'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
79
		}
126
		}
80
		return $resultat;
127
		return $resultat;
Line -... Line 128...
-
 
128
	}
81
	}
129
	
-
 
130
	/**
-
 
131
	 * @deprecated utiliser requeter() à la place
-
 
132
	 * @see requeter()
82
	
133
	 */
-
 
134
	protected function executerRequete($requete, $retour = self::SQL_RETOUR_COMPLET, $mode = PDO::FETCH_ASSOC) {
-
 
135
		try {
-
 
136
			switch ($retour) {
-
 
137
				case self::SQL_RETOUR_COMPLET :
-
 
138
					$resultat = $this->bdd->query($requete)->fetchAll($mode);// Retourne toutes les lignes
-
 
139
					break;
-
 
140
				case self::SQL_RETOUR_LIGNE :
-
 
141
					$resultat = $this->bdd->query($requete)->fetch($mode);// Retourne la première ligne
-
 
142
					break;
-
 
143
				case self::SQL_RETOUR_COLONNE :
-
 
144
					$resultat = $this->bdd->query($requete)->fetchColumn();// Retourne la première colonne de la première ligne
-
 
145
					break;
-
 
146
				case self::SQL_RETOUR_BRUT :
-
 
147
					$resultat = $this->bdd->query($requete);// Retourne l'objet brut pour être utilisé dans une boucle de type foreach
83
	protected function executerRequeteSimple($requete) {
148
					break;
84
		try {
149
				default:
-
 
150
					$resultat = false;
85
			$resultat = false;
151
					$this->messages[] = "Le type de retour '$retour' est inconnu.";
86
			$resultat = $this->bdd->query($requete);
152
			}
87
			if ($resultat === false) {
153
			if ($resultat === false) {
88
				$this->messages[] = "La requête a retourné aucun résultat.";
154
				$this->messages[] = "La requête a retourné aucun résultat.";
89
			}
155
			}
90
		} catch (PDOException $e) {
156
		} catch (PDOException $e) {
91
			$this->messages[] = sprintf($this->getTxt('sql_erreur_requete'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
157
			$this->messages[] = sprintf($this->getTxt('sql_erreur_requete'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
92
		}
158
		}
93
		return $resultat;
-
 
94
	}
-
 
95
	
-
 
96
	protected function proteger($chaine) {
-
 
Line 97... Line 159...
97
		return $this->bdd->quote($chaine);
159
		return $resultat;
98
	}
160
	}
99
 
161
 
100
	protected function getTxt($id) {
162
	protected function getTxt($id) {