Porblème formulaire authentification avec zend [Résolu]

bencoandco 165 Messages postés samedi 8 mai 2010Date d'inscription 3 janvier 2015 Dernière intervention - 10 janv. 2012 à 11:43 - Dernière réponse : bencoandco 165 Messages postés samedi 8 mai 2010Date d'inscription 3 janvier 2015 Dernière intervention
- 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 !

@+!
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
bencoandco 165 Messages postés samedi 8 mai 2010Date d'inscription 3 janvier 2015 Dernière intervention - 13 janv. 2012 à 17:32
3
Merci
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

Merci bencoandco 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de bencoandco
cs_47 197 Messages postés mardi 20 janvier 2004Date d'inscription 20 février 2013 Dernière intervention - 10 janv. 2012 à 12:18
0
Merci
Bonjour,

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


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


bonne journée
Commenter la réponse de cs_47
bencoandco 165 Messages postés samedi 8 mai 2010Date d'inscription 3 janvier 2015 Dernière intervention - 10 janv. 2012 à 12:48
0
Merci
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
Commenter la réponse de bencoandco
bencoandco 165 Messages postés samedi 8 mai 2010Date d'inscription 3 janvier 2015 Dernière intervention - 11 janv. 2012 à 00:35
0
Merci
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 !
Commenter la réponse de bencoandco
bencoandco 165 Messages postés samedi 8 mai 2010Date d'inscription 3 janvier 2015 Dernière intervention - 11 janv. 2012 à 00:38
0
Merci
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 ?
Commenter la réponse de bencoandco

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.