IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] Débutant en POO, class mysql php5


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut [POO] Débutant en POO, class mysql php5
    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...

  2. #2
    Invité
    Invité(e)
    Par défaut


    bah tu n'as pas implementé de methode close() dans ta classe mysql (d'ailleurs le nom de la classe n'est pas tres judicieux). tu peux appeler ton destructeur, c'est lui qui fait le travail

  3. #3
    Fabouney
    Invité(e)
    Par défaut
    Bonjour,

    essay comme ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function __destruct()
            {
                 $this->mysql_close();
            }

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	public function __destruct() { mysql_close(); }
    puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $objet->__destruct();
    ?
    c'est mieux?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Points : 74
    Points
    74
    Par défaut
    pourquoi $this->mysql_close() ?

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Fabouney
    Bonjour,

    essay comme ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function __destruct()
            {
                 $this->mysql_close();
            }
    pourquoi $this->mysql_close(); ?
    ca me perturbe cette histoire

    edit: grillé

  7. #7
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    C'est surement une erreur d'inattention. Quand à la méthode __destruct il n'est pas necessaire de l'appeler explicitement.
    Chaque objet est détruit à la fin de l'execution du script, lors de cette manip le compilo appelle la méthode __desctruct de l'objet et execute les instructions contenu.

  8. #8
    Fabouney
    Invité(e)
    Par défaut
    Bien vu epox, c'est vrai, mais est-il vraiment faut de l'appeller ds le script ?

  9. #9
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    mais est-il vraiment faut de l'appeller ds le script
    tu veux dire faux ?
    Non, sa dépend des besoins.

    Mais sa c'est comme mysql_close, c'est pas obligatoire, puisque php ferme automatiquement les connexions mysql à la fin du script.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Points : 74
    Points
    74
    Par défaut
    Le nettoyage est fait à la fin du script et non au dernier appel de l'objet il me semble, donc le destructeur peut etre utile quand on à un script de 3km de long et que l'objet n'est utilisé qu'au début

Discussions similaires

  1. [POO] Accès d'une classe Mysql dans une autre classe
    Par anxious dans le forum Langage
    Réponses: 4
    Dernier message: 10/03/2010, 16h29
  2. Réponses: 3
    Dernier message: 02/12/2005, 15h58
  3. [POO] PHP et la gestion des classes
    Par Acti dans le forum Langage
    Réponses: 7
    Dernier message: 23/09/2005, 00h06
  4. [POO] Classe en PHP5
    Par neptune dans le forum Langage
    Réponses: 5
    Dernier message: 01/09/2005, 17h55
  5. Réponses: 3
    Dernier message: 19/05/2005, 10h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo