Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je développe en ce moment une application destinée à faire de la conversion de fichiers en ligne. Je me base sur l'application squelette réalisée en suivant le tutorial (http://zf2.readthedocs.org/en/latest/us … ation.html) auquel un module d'authentification a été rajouté.
Lors de l'ajout d'un utilisateur depuis un formulaire, l'exception suivante se produit:
Additional information: Zend\Db\Adapter\Exception\InvalidQueryException File: C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\Db\Adapter\Driver\Pdo\Statement.php:220 Message: Statement could not be executed Stack trace: #0 C:\wamp\www\projetConversionFichiers\vendor\BjyProfiler\src\BjyProfiler\Db\Adapter\Driver\Pdo\ProfilingStatement.php(27): Zend\Db\Adapter\Driver\Pdo\Statement->execute(NULL) #1 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\Db\TableGateway\AbstractTableGateway.php(294): BjyProfiler\Db\Adapter\Driver\Pdo\ProfilingStatement->execute() #2 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\Db\TableGateway\AbstractTableGateway.php(261): Zend\Db\TableGateway\AbstractTableGateway->executeInsert(Object(Zend\Db\Sql\Insert)) #3 C:\wamp\www\projetConversionFichiers\module\Video\src\Video\Model\UserTable.php(86): Zend\Db\TableGateway\AbstractTableGateway->insert(Array) #4 C:\wamp\www\projetConversionFichiers\module\Video\src\Video\Controller\AuthController.php(82): Video\Model\UserTable->saveUser(Object(Video\Model\User)) #5 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\Mvc\Controller\AbstractActionController.php(87): Video\Controller\AuthController->createAction() #6 [internal function]: Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(Zend\Mvc\MvcEvent)) #7 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(468): call_user_func(Array, Object(Zend\Mvc\MvcEvent)) #8 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(208): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) #9 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\Mvc\Controller\AbstractController.php(108): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) #10 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\Mvc\DispatchListener.php(113): Zend\Mvc\Controller\AbstractController->dispatch(Object(Zend\Http\PhpEnvironment\Request), Object(Zend\Http\PhpEnvironment\Response)) #11 [internal function]: Zend\Mvc\DispatchListener->onDispatch(Object(Zend\Mvc\MvcEvent)) #12 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(468): call_user_func(Array, Object(Zend\Mvc\MvcEvent)) #13 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(208): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) #14 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\Mvc\Application.php(297): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) #15 C:\wamp\www\projetConversionFichiers\public\index.php(14): Zend\Mvc\Application->run() #16 {main} Previous exceptions: PDOException File: C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\Db\Adapter\Driver\Pdo\Statement.php:218 Message: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'firstName' cannot be null Stack trace: #0 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\Db\Adapter\Driver\Pdo\Statement.php(218): PDOStatement->execute() #1 C:\wamp\www\projetConversionFichiers\vendor\BjyProfiler\src\BjyProfiler\Db\Adapter\Driver\Pdo\ProfilingStatement.php(27): Zend\Db\Adapter\Driver\Pdo\Statement->execute(NULL) #2 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\Db\TableGateway\AbstractTableGateway.php(294): BjyProfiler\Db\Adapter\Driver\Pdo\ProfilingStatement->execute() #3 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\Db\TableGateway\AbstractTableGateway.php(261): Zend\Db\TableGateway\AbstractTableGateway->executeInsert(Object(Zend\Db\Sql\Insert)) #4 C:\wamp\www\projetConversionFichiers\module\Video\src\Video\Model\UserTable.php(86): Zend\Db\TableGateway\AbstractTableGateway->insert(Array) #5 C:\wamp\www\projetConversionFichiers\module\Video\src\Video\Controller\AuthController.php(82): Video\Model\UserTable->saveUser(Object(Video\Model\User)) #6 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\Mvc\Controller\AbstractActionController.php(87): Video\Controller\AuthController->createAction() #7 [internal function]: Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(Zend\Mvc\MvcEvent)) #8 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(468): call_user_func(Array, Object(Zend\Mvc\MvcEvent)) #9 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(208): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) #10 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\Mvc\Controller\AbstractController.php(108): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) #11 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\Mvc\DispatchListener.php(113): Zend\Mvc\Controller\AbstractController->dispatch(Object(Zend\Http\PhpEnvironment\Request), Object(Zend\Http\PhpEnvironment\Response)) #12 [internal function]: Zend\Mvc\DispatchListener->onDispatch(Object(Zend\Mvc\MvcEvent)) #13 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(468): call_user_func(Array, Object(Zend\Mvc\MvcEvent)) #14 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(208): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) #15 C:\wamp\www\projetConversionFichiers\vendor\zendframework\zendframework\library\Zend\Mvc\Application.php(297): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) #16 C:\wamp\www\projetConversionFichiers\public\index.php(14): Zend\Mvc\Application->run() #17 {main}
Code du formulaire:
<?php $title = 'Create user'; $this->headTitle($title); ?> <h1><?php echo $this->escapeHtml($title); ?></h1> <?php $form = $this->form; $form->setAttribute('action', $this->url('auth', array('action' => 'create'))); $form->prepare(); echo $this->form()->openTag($form); echo $this->formHidden($form->get('id')); echo $this->formRow($form->get('firstName')); echo $this->formRow($form->get('lastName')); echo $this->formRow($form->get('username')); echo $this->formRow($form->get('password')); echo $this->formSubmit($form->get('submit')); echo $this->form()->closeTag();
Code de ma classe user:
<?php // module/Video/src/Video/Model/Video.php: namespace Video\Model; class User implements \Zend\InputFilter\InputFilterAwareInterface { /** * @var int */ public $id; /** * @var string */ public $firstName; /** * @var string */ public $lastName; /** * @var string */ public $username; /** * @var string */ public $password; /** * @var \Zend\InputFilter\InputFilter */ protected $inputFilter; /** * Set object attributes with array * @param Array $data */ public function exchangeArray($data) { $this->id = (isset($data['id'])) ? $data['id'] : null; $this->firstname = (isset($data['firstName'])) ? $data['firstName'] : null; $this->lastName = (isset($data['lastName'])) ? $data['lastName'] : null; $this->userName = (isset($data['username'])) ? $data['username'] : null; $this->password = (isset($data['password'])) ? $data['password'] : null; } /** * Copy this object to array * @return Array */ public function getArrayCopy() { return get_object_vars($this); } /** * Set the input filter (not used) * @param \Zend\InputFilter\InputFilterInterface $inputFilter */ public function setInputFilter(\Zend\InputFilter\InputFilterInterface $inputFilter) { throw new \Exception("Not used"); } /** * Get input filter associate with this object * @return \Zend\InputFilter\InputFilter */ public function getInputFilter() { if (!$this->inputFilter) { $inputFilter = new \Zend\InputFilter\InputFilter(); $factory = new \Zend\InputFilter\Factory(); $inputFilter->add($factory->createInput(array( 'name' => 'id', 'required' => true, 'filters' => array( array('name' => 'Int'), ), ))); $inputFilter->add($factory->createInput(array( 'name' => 'firstName', 'required' => true, 'filters' => array( array('name' => 'StripTags'), array('name' => 'StringTrim'), ), 'validators' => array( array( 'name' => 'StringLength', 'options' => array( 'encoding' => 'UTF-8', 'min' => 1, 'max' => 50, ), ), ), ))); $inputFilter->add($factory->createInput(array( 'name' => 'lastName', 'required' => true, 'filters' => array( array('name' => 'StripTags'), array('name' => 'StringTrim'), ), 'validators' => array( array( 'name' => 'StringLength', 'options' => array( 'encoding' => 'UTF-8', 'min' => 1, 'max' => 50, ), ), ), ))); $inputFilter->add($factory->createInput(array( 'name' => 'username', 'required' => true, 'filters' => array( array('name' => 'StripTags'), array('name' => 'StringTrim'), ), 'validators' => array( array( 'name' => 'StringLength', 'options' => array( 'encoding' => 'UTF-8', 'min' => 1, 'max' => 25, ), ), ), ))); $inputFilter->add($factory->createInput(array( 'name' => 'password', 'required' => true, 'filters' => array( array('name' => 'StripTags'), array('name' => 'StringTrim'), ), 'validators' => array( array( 'name' => 'StringLength', 'options' => array( 'encoding' => 'UTF-8', 'min' => 6, 'max' => 25, ), ), ), ))); $this->inputFilter = $inputFilter; } return $this->inputFilter; } } ?>
Code de UserTable:
<?php // module/Video/src/Video/Model/VideoTable.php: namespace Video\Model; /** * User table interface */ class UserTable extends \Zend\Db\TableGateway\AbstractTableGateway { /** * @var string */ protected $table = 'user'; /** * Create the User table interface * @param Adapter $adapter The adapter to handle */ public function __construct(\Zend\Db\Adapter\Adapter $adapter) { $this->adapter = $adapter; $this->resultSetPrototype = new \Zend\Db\ResultSet\ResultSet(); $this->resultSetPrototype->setArrayObjectPrototype(new Video()); $this->initialize(); } /** * Fetch all the user in database * @return Array */ public function fetchAll() { $resultSet = $this->select(); return $resultSet; } /** * Check if a username already exists in database * @param string $name * @return boolean */ public function nameExists($name) { $result = $this->select("username = '$name'"); return $result->count()>0; } /** * Retrieve a user by id * @param int $id * @return User */ public function getUser($id) { $id = (int) $id; $rowset = $this->select(array('id' => $id)); $row = $rowset->current(); if (!$row) { throw new \Exception("Could not find row $id"); } return $row; } /** * Save a given user to database (create if not exists) * @param User $user */ public function saveUser(User $user) { $data = array( 'firstName' => $user->firstName, 'lastName' => $user->lastName, 'username' => $user->username, 'password' => $user->password, ); $id = (int)$user->id; if ($id == 0) { $this->insert($data); } else { if ($this->getUser($id)) { $this->update($data, array('id' => $id)); } else { throw new \Exception('Form id does not exist'); } } return $this; } /** * Delete a user by id * @param int $id */ public function deleteUser($id) { $this->delete(array('id' => $id)); } } ?>
Après de nombreuses recherches infructueuses sur le net, je n'ai rien trouvé qui pourrait m'aider. Quelqu'un pourrait m'aider à résoudre ce problème ?
Meilleures salutations.
Dernière modification par leubac (22-11-2012 14:30:29)
Hors ligne
Qui cherche trouve. Tu as toutes les infos nécessaires pour cibler le problème, et, éventuellement nous en faire part.
Sinon j'offre des prestations de développement, de conseil et de formation.
Hors ligne
Salut, ne maitrisant pas Zend\Db je ne saurais trop t'aider cependant tu as cette information qui peut être une bonne piste :
error a écrit:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'firstName' cannot be null
Donc à mon avis ça vient de là
Hors ligne
@Orkin : Tu es trop gentil.
Hors ligne
Bouks a écrit:
@Orkin : Tu es trop gentil.
Faut bien ça arrive à tout le monde de faire des erreurs bêtes ^^
Hors ligne
C'est un point de vue.
Le mien est que si la personne n'est pas capable de lire un debug comme celui-là et trouver au moins où ça coince, ce n'est pas d'aide sur zf2 dont elle a besoin.
Hors ligne
Oui mais bon à 2 messages on peut laisser un doute, si c'est récurent oui il y aura un probleme :p
Hors ligne
Tiens justement, j'ai remarqué qu'il y avait un problème sur les nombres de messages des utilisateurs.
Dans ce cas il a 2 messages, mais si tu vas sur la liste de ses messages il n'y en a qu'un.
Hors ligne
Bonjour,
Je me suis peut-être mal fait comprendre.
J'avais en effet remarqué la ligne
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'firstName' cannot be null
et ciblé mes efforts la-dessus pour tenter de résoudre le problème.
Je viens de découvrir ce matin qu'à un moment donné je faisais appel à $data['firstname'] (sans le N majuscule) et donc $data['firstName'] était toujours null (ça doit être la fatigue qui a fait que ça m'a échappé...).
Hors ligne
Bouks a écrit:
Tiens justement, j'ai remarqué qu'il y avait un problème sur les nombres de messages des utilisateurs.
Dans ce cas il a 2 messages, mais si tu vas sur la liste de ses messages il n'y en a qu'un.
Souvent ce genre de problème vient de messages supprimés, en général les forums incrémentent bien mais ont plus de mal à décrémenter pour une raison qui m'échappe...
Da toutes façons ici on touche à rien, la prochaine version est en cours de développement.
Hors ligne