Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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 :
Code PHP :
/ ******* 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;
}
/ ******* fin script *************************************/
après observation il semblerait que ce soit cette ligne qui fasse tout planter :
Code PHP :
$result = $auth->authenticate($adapter);
et plus précisément dans le fichier /zend/auth/adapter/dbtable.php la ligne 483 en gras ci-dessous :
Code PHP :
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);
Code PHP :
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(MYSQL) 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 !
@+!
Hors ligne
J'ai déjà tenté de remplacer:
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($adapter);
par:
$result = $adapter->authenticate();
mais ça ne marche pas ce qui est normal je penses et j'ai le msg d'erreur suivant :
Notice: Undefined variable: auth in C:\xampp\htdocs\Site\application\controllers\IndexController.php on line 90
Fatal error: Call to a member function authenticate() on a non-object in C:\xampp\htdocs\Site\application\controllers\IndexController.php on line 90
Dernière modification par bencoandco (12-01-2012 10:45:08)
Hors ligne
Après enquête, 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 :
Code PHP :
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 ? Ce qui est une erreur !
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 !
Hors ligne
Pages: 1