Débutant en POO, class mysql php5

Débutant en POO, class mysql php5 - PHP - Programmation

Marsh Posté le 05-02-2006 à 22:33:16    

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 :
  1. <?php
  2. class mysql {
  3. public $query_result='';
  4. public $num_rows='';
  5. public $fetch_row=array();
  6. public function __construct() {
  7.  $connect = mysql_connect("sql.free.fr", "xxx", "xxx" );
  8.    if (!$connect) { echo "<br /> Echec connection serveur MySQL <br />"; exit(); }
  9.  echo "<br /> Connection serveur MySQL réussie <br />" ;
  10.  $dbconnect = mysql_select_db(xxx,$connect);
  11.    if (!$dbconnect) { echo "<br /> Echec connection BDD <br />"; exit(); }
  12.  echo "<br /> Connection BDD réussie <br />" ;
  13. }
  14.         public function __destruct()
  15.         {
  16.            $this->close();
  17.         }
  18. public function mysql_do_query($sql) {
  19.  $query_result=mysql_query($sql);
  20.    if (!$query_result) { echo "<br /> Echec de la requête mysql_do_query <br />"; exit(); }
  21.  echo "<br /> mysql_do_query OK<br />" ;
  22.  $this->query_result=$query_result ;
  23. }
  24. public function mysql_do_num_rows($query) {
  25.  $num_rows=mysql_num_rows($query);
  26.    if (!$num_rows) { echo "<br /> Echec de la requête mysql_do_num_rows <br />"; exit(); }
  27.  echo "<br /> mysql_do_num_rows OK <br />";
  28.  $this->num_rows=$num_rows ;
  29. }
  30. public function mysql_do_fetch_row($query) {
  31.  $fetch_row=mysql_fetch_row($query);
  32.    if (!$fetch_row) { echo "<br /> Echec de la requête mysql_do_fetch_row <br />"; exit(); }
  33.  echo "<br /> mysql_do_fetch_row OK <br />";
  34.  $this->fetch_row=$fetch_row;
  35. }
  36. }


 
le code de ma récéption de formulaire:
 

Code :
  1. <?php
  2. include ("class.mysqlw.php5" );
  3. extract($_POST);
  4. $name = trim(htmlspecialchars(addslashes($_POST["name"])));
  5. $pass = trim(htmlspecialchars(addslashes($_POST["pass"])));
  6. $mysql_login = new mysql;
  7. $sql = sprintf("SELECT * FROM w_users WHERE name='%s' AND pass='%s'", mysql_real_escape_string($name), mysql_real_escape_string($pass));
  8. $mysql_login->mysql_do_query($sql);
  9. $query = $mysql_login->query_result;
  10. $mysql_login->mysql_do_num_rows($query);
  11. if ($mysql_login->num_rows == 1)
  12. {
  13. $mysql_login->mysql_do_fetch_row($query);
  14. $datalogin = $mysql_login->fetch_row;
  15. echo "<br />Salut<br />".$datalogin['id']." ".$datalogin['name']." ".$datalogin['pass']." ".$datalogin['level']."<br />";
  16. }
  17. else
  18. {
  19. echo "login échoué";
  20. }
  21. $mysql_login->close();
  22. ?>


 
et enfin voici ce que cela me retourne:
 

Citation :


 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...

Reply

Marsh Posté le 05-02-2006 à 22:33:16   

Reply

Marsh Posté le 05-02-2006 à 23:20:00    

1)__destruct() , c'est le destructeur de ta classe, il contient le code qui doit être executé lors de la destruction de ton objet. Ici tu fais this->close(), donc tu devrais avoir une méthode close() dans la classe, or ici tu n'en as pas, donc forcément ca bloque.
De même dans le traitement de ton formulaire, tu fais un mysql_login->close() or ...[idem que precedement] donc ca bloque  
2)Ca doit te permettre de remplir un tableau en fonction des resultats de ta requête.


Message édité par cesarr89 le 05-02-2006 à 23:23:32
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed