Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 14-04-2010 12:05:05

0866
Membre
Date d'inscription: 02-04-2010
Messages: 27

[Résolu][zend_auth][1.9]authentification_DbTable

Bonjour,

je suis entrain de créer une petite application consiste a réaliser l'identification d'un user qui comporte un login et une mot de passe enregistrer dans une base de données oracle, cet identification se sera fait a travers une formulaire.
mon application se comporte 3 fichiers principal : View(login.phtml), contoler(userControler avec l'action loginAction) et le model(user.php).

j vous montre le code :

login.phtml :

Code:

<html>
<body>
<form action="<?php echo $this->url(); ?>" method="post">
<fieldset>
<legend>Sign in</legend>
    
<?php if (sizeof($this->errors)) echo $this->formErrors($this->errors).'<br />'; // Error output (by the way of bulleted list)?>

    <label for="login">Login</label>
    <input type="text" id="login" name="login" value="<?php if (isset($_POST['login'])) echo $_POST['login'];?>" />
    <br /><br />
    
    <label for="pass">Password</label>
    <input type="password" id="pass" name="pass" value="<?php if (isset($_POST['pass']))  echo $_POST['pass'];?>" />
    <br /><br />

    <input type="submit" value="Submit" />
    <br /><br />

</fieldset>
</form>
</body>
</html>

userControler.php :

Code:

class UserController extends Zend_Controller_Action
{    
    
    public function loginAction() 
    {
        // If data was sent
        if(isset($_POST['login']) && !empty($_POST['login'])) {
        
            // Connect to the database and receive the adapter
            $db_adapter = Zend_Db::factory('Oracle',
                    array('host'     => 'XXXXXX',
                          'username' => 'XXXXX',
                          'password' => 'XXXX',
                          'dbname'   => 'XXXXXX'
                    )
            );
          
            // Receive the model
            $user_model = new Auth_MODEL_User($db_adapter);
      
            $message = $user_model->login($_POST['login'], $_POST['pass']);
           if (true === $message ) {
            // Successfully
                 $this->_redirect('/');
              
            } else {
                 $this->view->assign('errors', $message);
                
            }

        }
    }
 }

et le contenu du fichier user.php :

Code:

<?php
class Auth_MODEL_User extends Zend_Db_Table_Abstract
{
    public function login($login, $pass)
    {    
         
        // Receive Zend_Auth instance
        $auth = Zend_Auth::getInstance();
        
               
        // Create Adapter for Zend_Auth, indication where in the database 
        // it should search for login and password for comparison   
        // Configure une instance avec des paramètres de constructeur ...

    // Règle les valeurs d'entrées des crédits
    // (en général, à partir d'un formulaire d'enregistrement)
    $authAdapter = new Zend_Auth_Adapter_DbTable($this->getAdapter());    

    $authAdapter->setTableName('users')
                    ->setIdentityColumn('login')
                    ->setCredentialColumn('pass');
                    
    $authAdapter->setIdentity($login)
                    ->setCredential($pass);
        
             
        // Réalise la requête d'authentification, et sauvegarde le résultat
        $result = $auth->authenticate($authAdapter);
        
        // Affiche l'identité
    echo $result->getIdentity() . "\n\n";

    // Affiche la ligne de résultat
    print_r($authAdapter->getResultRowObject());
        
    }
}

lors de l'exécution de mon code sur le navigateur ( FF ou IE ) il me rentre un message d'erreur suivant :

An error occurred
Application error
Exception information:

Message: The supplied parameters to Zend_Auth_Adapter_DbTable failed to produce a valid sql statement, please check table and column names for validity.
Stack trace:

#0 C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Auth\Adapter\DbTable.php(306): Zend_Auth_Adapter_DbTable->_authenticateQuerySelect(Object(Zend_Db_Select))
#1 C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Auth.php(117): Zend_Auth_Adapter_DbTable->authenticate()
#2 C:\Program Files\Zend\Apache2\htdocs\Auth\application\models\User.php(42): Zend_Auth->authenticate(Object(Zend_Auth_Adapter_DbTable))
#3 C:\Program Files\Zend\Apache2\htdocs\Auth\application\controllers\UserController.php(22): Auth_MODEL_User->login('XXXX', 'XXXX')
#4 C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Action.php(513): UserController->loginAction()
#5 C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Dispatcher\Standard.php(289): Zend_Controller_Action->dispatch('loginAction')
#6 C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#7 C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch()
#8 C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#9 C:\Program Files\Zend\Apache2\htdocs\Auth\public\index.php(26): Zend_Application->run()
#10 {main} 

Request Parameters:

array(5) {
  ["controller"]=>
  string(4) "user"
  ["action"]=>
  string(5) "login"
  ["module"]=>
  string(7) "default"
  ["login"]=>
  string(4) "XXXX"
  ["pass"]=>
  string(4) "XXXX"
}

Ce message d'erreur dit que la requêtte générer par "Zend_Auth_Adapter_DbTable" ne pas valide et j ne sais pas comment j doit corriger mon code et le rendre fonctionnel, j fait beaucoup de recherche sur l'internet mais j pas trouver aucune solution concernant mon problème.

Remarque :
J bien vérifier le nom de champs dans la base de données.

J'espère que j trouve une solution dans ce forum. J attend votre aide.

Merci d'avance.

Dernière modification par 0866 (15-04-2010 10:55:59)

Hors ligne

 

#2 14-04-2010 13:17:01

throrin19
Membre
Date d'inscription: 01-03-2009
Messages: 318
Site web

Re: [Résolu][zend_auth][1.9]authentification_DbTable

as tu initialisé la connexion à mysql dans les config de ton site (bootstrap ou app.ini)

Sinon va voir sur cet article: http://www.throrinstudio.com/blog/index … article/47

Hors ligne

 

#3 14-04-2010 13:37:28

0866
Membre
Date d'inscription: 02-04-2010
Messages: 27

Re: [Résolu][zend_auth][1.9]authentification_DbTable

les paramètres de la connexion à la base de données Oracle 10g se trouve dans le controleur (action : loginAction) ==> 

Code:

   // Connect to the database and receive the adapter
            $db_adapter = Zend_Db::factory('Oracle',
                    array('host'     => 'XXXXXX',
                          'username' => 'XXXXX',
                          'password' => 'XXXX',
                          'dbname'   => 'XXXXXX'
                    )
            );

et voici le contenu de fichier bootstrap :

<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
    protected function _initAutoload() {
        $autoLoader = Zend_Loader_Autoloader::getInstance ();
        $resourceLoader = new Zend_Loader_Autoloader_Resource ( array (
        'basePath' => APPLICATION_PATH,
        'namespace' => 'Auth_' ) );
        $resourceLoader->addResourceType ( 'model', 'models/', 'MODEL_' );
       
        return $autoLoader;
    }

}

Hors ligne

 

#4 14-04-2010 23:09:45

throrin19
Membre
Date d'inscription: 01-03-2009
Messages: 318
Site web

Re: [Résolu][zend_auth][1.9]authentification_DbTable

Ah, j'avais pas vu que c'était oracle. Es-tu sûr que l'extension oci8 de php est installée sur ta machine?

Fais attention aussi aux casses dans le nom des tables, oracle les veut en majuscule. Moi il m'a souvent amené des problèmes.

Dernière modification par throrin19 (14-04-2010 23:10:38)

Hors ligne

 

#5 15-04-2010 10:09:33

0866
Membre
Date d'inscription: 02-04-2010
Messages: 27

Re: [Résolu][zend_auth][1.9]authentification_DbTable

bonjour,
Merci throrin19,
j changer le nom du table et le nom des attributs en majuscule==> l'erreur est disparait.Mais il reste une petite problème : lors j fait entrer le login et le mot de passe; le programme affiche toujours le message d'erreur : c-à-d même si le mot de passe et le login (en majuscules et/ou minuscules) sont correctes il affiche toujours l'erreur d'identification.

Merci d'avance.

Hors ligne

 

#6 15-04-2010 10:39:24

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Résolu][zend_auth][1.9]authentification_DbTable

Hello,

Avec oracle, j'utilise toujours l'option autoQuoteIdentifier à false.

@+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#7 15-04-2010 10:47:35

0866
Membre
Date d'inscription: 02-04-2010
Messages: 27

Re: [Résolu][zend_auth][1.9]authentification_DbTable

hi,
autoQuoteIdentifier à false == ????? j pas compris

Hors ligne

 

#8 15-04-2010 10:51:42

0866
Membre
Date d'inscription: 02-04-2010
Messages: 27

Re: [Résolu][zend_auth][1.9]authentification_DbTable

Merci pour throrin19;

le code a été bien fonctionner, ma faute dans l'exécution j utiliser le login et password en majuscule; et quand j le tester en minuscules j fait une erreur (j tapper un login/password fausse).

Maintenant mon code fonctionne bien et j suis très heureuse.

Merci beaucoup, tu ma bien aider.
bonne journée.

Hors ligne

 

#9 15-04-2010 11:55:22

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Résolu][zend_auth][1.9]authentification_DbTable

'autoQuoteIdentifiers' = Zend_Db::AUTO_QUOTE_IDENTIFIERS => http://framework.zend.com/manual/en/zen … parameters


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages