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 :

query, session et classe..


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 55
    Par défaut query, session et classe..
    Bonjour,

    apres maintes recherches rien trouvé.. donc help, je craque!

    je vous explique.. j'ai une classe MysqlHelper qui me permet de me connecter à ma base mysql.. je met le résultat dans une session.. jusque la tout va bien..

    //On se connecte à la base de données
    $_SESSION['sql'] = new mysqlHelper();
    $_SESSION['sql']->setMysqlHost('localhost');
    $_SESSION['sql']->setMysqlUser('root');
    $_SESSION['sql']->setMysqlPassword('');
    $_SESSION['sql']->setMysqlDatabase('planning');
    $_SESSION['sql']->MysqlConnect();

    puis dans un autre fichier je veux faire un select..

    /********************************
    / MySql Select
    *********************************/
    public function MysqlSelect ($tablename, $idname='', $id='')
    {
    if ($idname != '' AND $id != '')
    {
    $this->mysqlQuery = 'SELECT * FROM '.$tablename.' WHERE '.$idname.' = "'.$id.'"';
    }
    else
    {
    $this->mysqlQuery = 'SELECT * FROM '.$tablename;
    }
    return ($this->mysqlQuery);
    }

    j'y fais donc appel.. cela construit bien mon select :

    $_SESSION['sql']->MysqlSelect('param','idTypeParam',2);

    puis je veux faire ma requete :

    /********************************
    / MySql Query
    *********************************/
    public function MysqlQuery ()
    {
    $this->mysqlResult = @mysql_query ('SELECT * FROM param WHERE idTypeParam = "2"');
    if (!$this->mysqlResult)
    {
    $this->MysqlErr('Vérifiez la requête : '.$this->mysqlQuery.'<br>');
    //On se redirige vers la page d'erreur
    return 0;
    }
    return ($this->mysqlResult);
    }

    et la ca me pete à la figure.. impossible de lui faire executer la requete.. j'ai bien verifié la construction du select elle est correcte, je l'ai executé directement sous phpmyadmin. Deja je ne sais pas à quoi sert le "@" devant le mysql_query (code recupéré sur le forum php à http://www.developpez.net/forums/sho...t=14617&page=2 --> mysqlHelper) et ensuite de toute façon il ne veut pas l'executer.. si je vire le @ il me dit que je n'ai pas le droit de me connecter à la base..

    Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\wamp\www\planning\systeme\sql\mysqlHelper.php on line 337

    ma session n'est pas fermée.. ni ma connexion close, donc logiquement je suis tjrs connecté à la base..


  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 235
    Par défaut
    Bonjour,

    le @ sert juste a virer le message d'erreur. Apparemment, ta connexion n'est pas bonne. Vérifie si les login, mot de passe et base de données sont les bons paramètres et si tu as les droits d'accès.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 55
    Par défaut
    Citation Envoyé par Steph82
    Bonjour,

    le @ sert juste a virer le message d'erreur. Apparemment, ta connexion n'est pas bonne. Vérifie si les login, mot de passe et base de données sont les bons paramètres et si tu as les droits d'accès.
    Le truc c'est qu'il y a un test à la connexion

    /********************************
    / Connexion to MySQL Server
    *********************************/
    public function MysqlConnect ()
    {
    if ($this->mysqlIsConnected == FALSE)
    {
    $this->mysqlConnextionId = @mysql_connect($this->getMysqlHost(), $this->getMysqlUser (), $this->getMysqlPassword());
    if (!$this->mysqlConnextionId)
    {
    $this->MysqlConnexionErr();
    $this->mysqlIsConnected = FALSE;
    return 0;
    }
    }
    $selectDb = @mysql_select_db($this->getMysqlDatabase($this->mysqlConnextionId));
    if (!$selectDb)
    {
    $this->MysqlErr ('Impossible de sélectionner la base : <b>'.$this->getMysqlDatabase().'</b>');
    $this->mysqlIsConnected = FALSE;
    $this->MysqlClose();
    return 0;
    }
    $this->mysqlIsConnected = TRUE;
    }

    et donc moi lors de la création de ma connexion je fais un test..

    // si la connexion s'est mal faite erreur
    if ($_SESSION['sql']->getMysqlIsConnected() == FALSE ) {
    //On se redirige vers la page d'erreur
    header("Location: /planning/systeme/erreur/erreurConnexion.php?codeErreur=1\n\n");
    } else {
    header("Location: /planning/collaborateur/ConsultCongesCollab.php?ssMenuChoisi=conges\n\n");
    }

    or il ne passe pas dans la page d'erreur..

    de plus lorsque j'essaye de faire une connexion "en dur" à l'endroit ou je veux faire mon select..

    $connexion=@mysql_connect("localhost","root","");
    $base=@mysql_select_db("planning",$connexion);
    $sql = "select * from param";
    $selection = @mysql_query($sql);
    echo $resultat=@mysql_num_rows($selection);

    ca ca marche et me renvoie le bon résultat.. à n'y rien comprendre..

    la session perd elle la connexion au fil des pages? mais logiquement non..

    bon... en rajoutant

    $_SESSION['sql']->MysqlConnect(); juste avant de faire mon
    $selection = $_SESSION['sql']->MysqlQuery();

    du coup maintenant une fois sur deux ca marche.. et quand ca ne marche pas j'ai le message :

    [FONT=arial,helvetica]Impossible de sélectionner la base : planningErreur SQL :
    Erreur no SQL :
    [/FONT]
    [FONT=arial,helvetica]Vérifiez la requête : SELECT * FROM param WHERE idTypeParam = "2"
    Erreur SQL :
    Erreur no SQL :
    [/FONT]
    ................

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 235
    Par défaut
    Enlève les @ pour bien voir les erreurs et fait un echo de chaque paramètre (login, bdd,...) pour voir s'il y'en a un qui saute.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 55
    Par défaut
    Citation Envoyé par Steph82
    Enlève les @ pour bien voir les erreurs et fait un echo de chaque paramètre (login, bdd,...) pour voir s'il y'en a un qui saute.
    j'ai rajouté :

    echo $_SESSION['sql']->getMysqlHost().'<br/>';
    echo $_SESSION['sql']->getMysqlUser().'<br/>';
    echo $_SESSION['sql']->getMysqlPassword().'<br/>';
    echo $_SESSION['sql']->getMysqlDatabase ().'<br/>';
    echo $_SESSION['sql']->getMysqlIsConnected().'<br/>';

    et j'obtiens..

    localhost
    root

    planning
    1

    il n'a donc perdu aucune info.. mais apparement la connexion ne reste pas.. j'ai essayé avec la fonction
    mysql_pconnect() Ouvre une connexion persistante à un serveur MySQL.


    mais ca donne exactement la même chose..

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 235
    Par défaut
    Essaie de mettre la selection de bdd en dur là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             $selectDb = @mysql_select_db($this->getMysqlDatabase($this->mysqlConnextionId));
    Pense bien aux balises code car c'est la galère de s'y retrouver avec les accolades.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 55
    Par défaut
    Citation Envoyé par Steph82
    Essaie de mettre la selection de bdd en dur là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             $selectDb = @mysql_select_db($this->getMysqlDatabase($this->mysqlConnextionId));
    Pense bien aux balises code car c'est la galère de s'y retrouver avec les accolades.
    j'ai essayé ceci :
    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
     
        /********************************
        /  MySql Query
        *********************************/
        public function MysqlQuery ()
        {
            echo @mysql_select_db($this->getMysqlDatabase($this->mysqlConnextionId));
            $this->mysqlResult = @mysql_query ($this->mysqlQuery,$this->mysqlConnextionId);
            if (!$this->mysqlResult)
            {
                $this->MysqlErr('Vérifiez la requête : '.$this->mysqlQuery.'<br>');
                //On se redirige vers la page d'erreur
                ?>
                <!--<meta http-equiv="refresh" content="1; URL=/planning/systeme/erreur/erreurCreation.php">-->
     
                <?php 
                //header("Location: /planning/systeme/erreur/erreurCreation.php\n\n"); 
                return 0;
            }
            return ($this->mysqlResult);
        }
    mais cela ne donne rien du tout non plus..

    sinon j'ai une bidouille qui permet de ne jamais avoir d'erreur et que ca marche.. mais bon on peut pas dire que ce soit propre..

    $_SESSION['sql']->MysqlSelect('param','idTypeParam',2);
    $_SESSION['sql']->setMysqlIsConnected(false);
    $_SESSION['sql']->MysqlConnect();
    $selection = $_SESSION['sql']->MysqlQuery();

    a chaque fois dire qu'on est pas connecté et refaire la connexion..

    Et la ou je me dis que cela ne va pas être top du tout c'est que vu que je vais avoir 80 personnes potentielles qui peuvent se connecter en même temps si à chaque fois on initialise une connexion ca risque peut être de pas plaire du tout à mysql?

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Par défaut
    salut
    j'ai pas tout lu (excuse moi si je suis a coté de la plaque)
    les ressources ne peuvent etre conservé en session (par exemple connexion a une base de donnée)
    pour faire ce que tu il faut (comme tu le dit) se reconnecter a la base, pour cela les classe php peuvent implementer les methode __sleep et __wakeup(voir manuel)
    __sleep retour les donnés a sauvegarder sans la connexion et __wakeup te permet de reinitialiser ta ressource a l'ouverture de ta session

Discussions similaires

  1. Beans Session pour classes Entity
    Par Car0le dans le forum NetBeans
    Réponses: 12
    Dernier message: 04/02/2015, 07h32
  2. Pb Session : entity class not found
    Par fagma dans le forum Hibernate
    Réponses: 4
    Dernier message: 03/05/2011, 10h05
  3. Sessions et Classes dans App_Code
    Par cinemania dans le forum ASP.NET
    Réponses: 2
    Dernier message: 12/07/2010, 13h50
  4. [EJB Session] class not found exception ?
    Par champion dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 11/02/2005, 23h46
  5. [VB.NET] Server.MapPath et Session dans une classe
    Par nancy54 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 09/09/2004, 14h23

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