Porblème formulaire authentification avec zend

Résolu
bencoandco Messages postés 165 Date d'inscription samedi 8 mai 2010 Statut Membre Dernière intervention 3 janvier 2015 - 10 janv. 2012 à 11:43
bencoandco Messages postés 165 Date d'inscription samedi 8 mai 2010 Statut Membre Dernière intervention 3 janvier 2015 - 13 janv. 2012 à 17:32
Bonjour !


J'ai un problème avec zend j'essaye de faire un formulaire d’authentification avec le script ci-dessous mais lorsque je le lance en locale avec xampp le serveur apache locale plante et se stoppe voici le script :


class IndexController extends Zend_Controller_Action
{
.
.
.

.
.

public function loginAction()
{
require_once 'application\forms\auth\login.php';

$db = $this->_getParam('db');

$loginForm = new Default_Form_Auth_Login();

if ($loginForm->isValid($_POST))
{

$adapter = new Zend_Auth_Adapter_DbTable(
$db,
'users',
'username',
'password'
);

$adapter->setTableName('users');
$adapter->setIdentity($loginForm->getValue('username'));
$adapter->setCredential($loginForm->getValue('password'));





$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($adapter);

if ($result->isValid())
{
$this->_helper->FlashMessenger('Successful Login');
$this->_redirect('/');
return;
}
else
{
echo $loginForm->render($this->view);
}



}
else
{

echo $loginForm->render($this->view);

}

$this->view->loginForm = $loginForm;

}



après observation il semblerait que ce soit cette ligne qui fasse tout planter :

$result = $auth->authenticate($adapter);

et plus précisément dans le fichier /zend/auth/adapter/dbtable.php la ligne 483 en gras ci-dessous :


protected function _authenticateQuerySelect(Zend_Db_Select $dbSelect)
{
try {
if ($this->_zendDb->getFetchMode() != Zend_DB::FETCH_ASSOC) {
$origDbFetchMode = $this->_zendDb->getFetchMode();
$this->_zendDb->setFetchMode(Zend_DB::FETCH_ASSOC);
}
$resultIdentities = $this->_zendDb->fetchAll($dbSelect);
if (isset($origDbFetchMode)) {
$this->_zendDb->setFetchMode($origDbFetchMode);
unset($origDbFetchMode);
}
} catch (Exception $e) {
/**
* @see Zend_Auth_Adapter_Exception
*/
require_once 'Zend/Auth/Adapter/Exception.php';
throw new Zend_Auth_Adapter_Exception('The supplied parameters to Zend_Auth_Adapter_DbTable failed to '
. 'produce a valid sql statement, please check table and column names '
. 'for validity.', 0, $e);
}
return $resultIdentities;
}




ma version de zend est la 1.11.8. et la table dans la bdd est correcte, j'ai testé la requete passée en argument de _authenticateQuerySelect(...) dans mon sgbd et elle fonctionne ... (la requete testée est : " SELECT `users`.*, (CASE WHEN `password` 'aaaaaaaa' THEN 1 ELSE 0 END) AS `zend_auth_credential_match` FROM `users` WHERE (`username` 'admin') " ).


avez vous rencontré ce problème ? avez vous des solutions ?


Merci !

@+!

5 réponses

bencoandco Messages postés 165 Date d'inscription samedi 8 mai 2010 Statut Membre Dernière intervention 3 janvier 2015
13 janv. 2012 à 17:32
Apparemment les autres fonctions de bases de données créent le même problème, je clos ce poste et poursuis sur celui-ci : http://www.phpcs.com/forum/sujet-PROBLEME-ZEND_DB-NE-FONCTIONNE-PAS-AVEC-MYSQL-XAMPP_1566156.aspx
3
cs_47 Messages postés 197 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 20 février 2013 1
10 janv. 2012 à 12:18
Bonjour,

tente de remplacer:
$auth   = Zend_Auth::getInstance();
$result = $auth->authenticate($adapter);


par:
$result = $adapter->authenticate();


bonne journée
0
bencoandco Messages postés 165 Date d'inscription samedi 8 mai 2010 Statut Membre Dernière intervention 3 janvier 2015
10 janv. 2012 à 12:48
Déjà essayé ça ne marche pas ce qui est normal je penses j'ai le msg d'erreur suivant :


[b]Notice: Undefined variable: auth in C:\xampp\htdocs\Site_UJLV\application\controllers\IndexController.php on line 90

Fatal error: Call to a member function authenticate() on a non-object in C:\xampp\htdocs\Site_UJLV\application\controllers\IndexController.php on line 90/b
0
bencoandco Messages postés 165 Date d'inscription samedi 8 mai 2010 Statut Membre Dernière intervention 3 janvier 2015
11 janv. 2012 à 00:35
J'ai avancé sur mon problème, il semblerait qu'il y ait une fonction qui s'appelle elle même, d'après ce que j'ai déduit & testé :


mon script fait appel à la fonction authenticate qui se trouve dans /zend/auth/adapter/dbtable.php l 365

cette fonction fait appel à _authenticateQuerySelect dans le même fichier qui fait appel à fetchAll l 485 qui se trouve dans le fichier /zend/db/adapter/abstract.php et qui fait appel à query() ligne 741 dans le meme fichier

dans cette fonction il y a un appel à la fonction execute() d'un objet statement cette fonction se trouve dans le fichier /zend/db/statement.php l 294 cette fonction fait appel à _execute qui se trouve dans le fichier /zend/db/statement/pdo.php et elle est définie comme ceci :

  public function _execute(array $params = null)
    {
       
   
   try {
            if ($params !== null) {
                return $this->_stmt->execute($params);
            } else {
                return $this->_stmt->execute();
            }
        } catch (PDOException $e) {
            require_once 'Zend/Db/Statement/Exception.php';
            throw new Zend_Db_Statement_Exception($e->getMessage(), (int) $e->getCode(), $e);
        }

    }




théoriquement cette ligne :

return $this->_stmt->execute($params);


fait appele à execute dans execute si je ne me trompe pas ?


quelqu'un a t il une réponse ou solution ? Peut-être dois je tester la version au-dessus ? Ou faut réécrire la fonction _execute ?

Merci !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bencoandco Messages postés 165 Date d'inscription samedi 8 mai 2010 Statut Membre Dernière intervention 3 janvier 2015
11 janv. 2012 à 00:38
Du coup il y a appel de la fonction execute dans la même fonction execute ... c'est peut être ce qui fait planté xampp en local ?
0
Rejoignez-nous