Page 1 sur 1

Utilisation d'une fonction d'une même classe

Posté : 29 juin 2006, 18:18
par Dadou
Bonjour,

Désolé pour le titre, mais je ne savias pas comment décrire mon problème.

Je débute totalement avec la POO, et j'essaie d'apprendre à m'en servir.

Mais il y a quelques trucs que je ne comprends pas.

Dans ma classe, j'aimerais appeler une fonction déjà déclarée dans cette même classe, mais j'obtiens un fatal error function inconnue.

Donc j'aimerais savoir comment on fait pour appeler cette fonction.

Second problème, qui n'en est pas un, il y a un second paramètre optionnel à ma fonction req, mais si je mets TRUE, sur une requête de ce style :

Code : Tout sélectionner

SELECT pseudo FROM TABLE WHERE id=2
Cela me retourne la 1ère lettre du pseudo, c'est étrange, si quelqu'un pouvait m'expliquer pourquoi.

Voici la class en question :
class connexion
{
    var $tt_req = 0;
    function connexion($h, $u, $p, $b)
    {
        $this -> connect = @mysql_connect($h, $u, $p);
        if( $this -> connect !== false )
        {
            $this -> bdd = @mysql_select_db($b);
            if( $this -> bdd === false )
            {
                @mysql_close($this -> connect);
                $this -> connect = false;
                exit('Impossible de sélectionner une base de données');
            }
            $this -> tt_exec = microtime(true);
            return true;      
        }
        exit('Le serveur du site est momentanément indisponible, veuillez réessayer ultérieurement.<br /><br />Merci de votre compréhension');
    }
       
    function deconnexion()
    {
        if( $this -> connect !== false )
        {
            $this -> connect = mysql_close($this -> connect);
            $this -> tt_exec = round(microtime(true) - $this -> tt_exec, 4);
            return $this -> connect;
        }
        return false;
    }
    
    function securise($sql)
    {
        if(get_magic_quotes_gpc)
        {
            $this -> sql = stripslashes($sql);
        }
        if( !is_numeric($sql) )
        {
            $this -> sql = mysql_real_escape_string($sql);
        }
        return $this -> sql;
    }
    
    function req($sql, $param = false)
    {
        $this -> sql = securise($sql); 
        if( $this -> connect !== false )
        {
            $this -> result = @mysql_query($this -> sql, $this -> connect);
            $this -> tt_req++;
            $this -> erreur = ($this -> result === false) ? true : false;
            if( $param && !$this -> erreur )
            {
                if( $param == 'result' ) $this -> result = @mysql_result($this -> result, 0);
                elseif( $param == 'row') $this -> result = @mysql_fetch_row($this -> result);
                elseif( $param == 'assoc') $this -> result = @mysql_fetch_assoc($this -> result);
                elseif( $param == 'array' ) $this -> result = @mysql_fetch_array($this -> result);
                elseif( $param == 'num_rows' ) $this -> result = @mysql_num_rows($this -> result);
                elseif( $param == 'data_seek' ) $this -> result = @mysql_data_seek($this -> result);
                else $this -> result = false;
                $this -> erreur = ($this -> result === false) ? true : false;
            }
        }
        if( $this -> erreur ) exit('Une erreur s\'est produite lors de la requête');
        return $this -> result;
    }
}
Donc, j'aimerais appeler la function securise dans la function req.

Merci de votre aide :P

Posté : 29 juin 2006, 19:16
par zigz4g
Salut,
tu devrais essayer comme ceci dans ta methode :
$this->sql = $this->securise($sql);

Posté : 29 juin 2006, 19:48
par Dadou
Ca fonctionne :D

Mais en fait je viens de me rendre compte que je ne peux pas l'utiliser comme ça :(

Car si j'ai des données non numériques, je suis obligé de les entourer de quotes dans la requête, et elles seront échappées, donc erreur sql.

En tout cas, j'aurais toujours appris à appeler une fonction d'une même classe.

Merci ;)