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

PHP & Base de données Discussion :

[PDO] Intégrer PDO dans une classe


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2011
    Messages : 67
    Points : 38
    Points
    38
    Par défaut [PDO] Intégrer PDO dans une classe
    Bonjour a tous !

    Je suis en train de réécrire du code que j'avais écrit en procédural pour "tester" .

    Donc je réécrit tout se beau monde de façon plus propre et réutilisable !

    Donc mon code est fait pour créer des tinyurl avec mon propore nom de domaine.
    Et j'ai besoin de travailler avec une base de données ,le truc c'est que je n'arrive pas a intégré PDO dedans ...


    Voila le code sans PDO :


    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
    48
    49
     
    <?php
     
    class LitiiUrl
    {
        private $hash;
        private $urlBrowser;
        private $redirect;
     
        public function generateLitiiKey($nbcar)//Génère une clé alléatoire 
        {
                    $string = "";
                    $chaine = "abcdefghijklmnopqrstuvwxyzABCDEFGJHIJKLMNOPQRSTUVWXYZ0123456789";//les caractères autorisés dans la clé.
                    srand((double)microtime()*1000000);
     
                    for($i = 0; $i < $nbcar; $i++) 
                    {
                     $string .= $chaine[rand() % strlen($chaine)];
                    }
                    $this->hash=$string;
                    return $string;
     
        }
     
        public function getLitiiUrl()
        {
            $this->urlBrowser = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
            echo '<br>'.$this->urlBrowser;              
        }
     
        public function WriteDataBase()
        {
            $resultat=executeRequeteSQL("INSERT INTO tinyurl (url_utilisateur , url_reduite) VALUES('$this->urlBrowser' , '$this->hash')", 'Error : Litii Url Not write in database ');
            return $resultat;
        }
     
        public function fecthDataBase()
        {
            $reponse = mysql_query('SELECT url_utilisateur , url_reduite FROM tinyurl WHERE url_reduite="'.$this->hash.'"');//Sélectionne tous les champs de la table tynirul lorsque le champ url_reduite est égal à YRfz3Z
     
              while ($donnees = mysql_fetch_array($reponse))
                   {
                    echo '<br>'.'la cle est ' . $donnees['url_reduite'] . ' et l\'adresse correspondante est : '.$donnees['url_utilisateur'].'<br />';
                    $redirection=$donnees['url_utilisateur'];
                   }
     
        }
    }
    ?>
    Code appelé dans mon contrôleur comme ceci ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    function index() {
     
            $this->load->library('LitiiUrl');
            echo $this->litiiurl->generateLitiiKey(6);
            echo $this->litiiurl->getLitiiUrl();
            echo $this->litiiurl->writeDataBase();
            echo $this->litiiurl->fecthDataBase();
            die();
    ?>

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Et si tu nous disait plutôt ce qui coince exactement ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2011
    Messages : 67
    Points : 38
    Points
    38
    Par défaut
    Oh le boulet j'ai zappé -_-

    Autant pour moi !

    Donc dans mon code procédural j'avais :

    -pour me connecter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
                                 $bdd = new PDO('mysql:host=;dbname=tinyurl_litii', 'root', '');
    ?>
    pour réaliser les opération dont j'ai besoin :

    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
    <?php
    $req=$bdd->prepare(('INSERT INTO tinyurl (url_utilisateur , url_reduite) VALUES(:url_utilisateur , :hash)'));//requête d'écriture de l'url dans la BDD
                                           if ($req->execute(array(//Exection de la requête (écriture de l'url dans le champs url_tilisateur de la table tinyurl
                                                                   'hash'=>$hash,
                                                                   'url_utilisateur'=>$url_base
                                                                  )))
                                                            {
                                                            }
                                                            else//Sinon , en cas de clé déjà existante dans la BDD, regénération de clé 
                                                            {
                                                                 '<br><br>'.print $req->errorCode();
                                                                 generateRandomString(6);
                                                                 '<br>'.$hash = generateRandomString(6).'<br>';
                                                            }
                                                            } else 
                                                                {
                                                                //Si la variable $url_base!= ' ' alors il ne se passe rien.
                                                                }
    ?>
    Le truc c'est que j'y intègre (en remplaçant le mysql_fetch ) dans ma fonction "fetchDataBase"

    J'ai sa comme erreur :

    Fatal error: Call to a member function prepare() on a non-object in...

    J'ai réussi a contourner le problème en n'utilisant pas PDO mais bon .. Sa serais plus pratique quand même !

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    tu montres ton code complet, executeRequeteSQL sort d'ou ?
    $bdd est définie ou ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2011
    Messages : 67
    Points : 38
    Points
    38
    Par défaut
    ExecuteSQL fait appel une fonction dans une "librairie" faite maison :

    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
    <?php 
    function executeRequeteSQL($requete, $messageErreur) {
     
        $CI = & get_instance();
    //    $modeSQL = $CI->config->item('modeSQL');
        $modeSQL = $CI->config->item('mode');
     
        if (strcmp($modeSQL, 'dev') === 0) {
            $resultatRequete = mysql_query($requete) or trace($messageErreur . mysql_error()); //die($messageErreur . mysql_error());
            return $resultatRequete;
        } else {
            $resultatRequete = mysql_query($requete);
            if ($resultatRequete === false) {
                header("Location: index.php?erreur");
            } else {
                return $resultatRequete;
            }
        }
    }?>
    Et $bdd ..je sais pas ou le déclarer.. (c'est la que je vois que j'ai pas totalement compris la POO ...

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    y'a zéro PDO dans ton code,

    pour le reste c'est du basique :
    http://php.net/manual/fr/language.variables.scope.php

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2011
    Messages : 67
    Points : 38
    Points
    38
    Par défaut
    prepare et execute ne sont pas PDO ?

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par blinkman04 Voir le message
    prepare et execute ne sont pas PDO ?
    si mais dans executeRequeteSQL y'a pas de PDO, pour le reste on ne sais pas ou t'as définie $bdd, c'est un mystère ...

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2011
    Messages : 67
    Points : 38
    Points
    38
    Par défaut
    Ben le truc c'est que j'ai pas le droit de toucher a cette fonction ...

    Donc je peux pas utiliser de PDO ici ?

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par blinkman04 Voir le message
    Ben le truc c'est que j'ai pas le droit de toucher a cette fonction ...

    Donc je peux pas utiliser de PDO ici ?
    en effet tu peux pas

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2011
    Messages : 67
    Points : 38
    Points
    38
    Par défaut
    Haaa... je comprend... -_-

    Au moins je suis fixé ! (et je suis dégoûter d'avoir perdu des jours a cherché -_-!)

    Me reste a crée une fonction qui test si la clé généré n'existe pas déjà auquel cas je redemande un génération...

    PAs de problème sauf que je voulais vérifiez que j'avais mit un clé primaire le bon champ .. Mais Wamp ne veux plus lancer phpMyadmin ...

    Aestan tray menu :

    Could not execute menu item (internat error)
    [Exception] Could not execute run action:
    Nom de répertoire non valide .


    Le truc c'est sa fonctionnais très bien y'a même pas deux heures ...

Discussions similaires

  1. Intégrer une image dans une classe
    Par wallace27 dans le forum VB.NET
    Réponses: 0
    Dernier message: 16/02/2015, 20h39
  2. Comment intégrer du JSF dans une class java(swing)
    Par Jaafar_scorpion dans le forum JSF
    Réponses: 0
    Dernier message: 25/05/2013, 02h43
  3. [PDO] Utilisation de PDO dans une classe
    Par arthuro45 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 19/04/2012, 13h54
  4. [POO] Sérialiser un objet PDO dans une classe
    Par __fabrice dans le forum Langage
    Réponses: 9
    Dernier message: 15/09/2008, 22h30

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