Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 22-11-2012 13:51:22

leubac
Nouveau membre
Date d'inscription: 22-11-2012
Messages: 3

InvalidQueryException lors de l'ajout d'un utilisateur

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:

Code:

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:

Code:

<?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:

Code:

<?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:

Code:

<?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

 

#2 22-11-2012 14:57:09

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: InvalidQueryException lors de l'ajout d'un utilisateur

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. smile


22914720

Hors ligne

 

#3 22-11-2012 14:59:10

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: InvalidQueryException lors de l'ajout d'un utilisateur

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à wink

Hors ligne

 

#4 22-11-2012 15:07:08

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: InvalidQueryException lors de l'ajout d'un utilisateur

@Orkin : Tu es trop gentil. smile


22914720

Hors ligne

 

#5 22-11-2012 15:36:22

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: InvalidQueryException lors de l'ajout d'un utilisateur

Bouks a écrit:

@Orkin : Tu es trop gentil. smile

Faut bien ça arrive à tout le monde de faire des erreurs bêtes ^^

Hors ligne

 

#6 22-11-2012 15:52:54

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: InvalidQueryException lors de l'ajout d'un utilisateur

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.


22914720

Hors ligne

 

#7 22-11-2012 16:12:49

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: InvalidQueryException lors de l'ajout d'un utilisateur

Oui mais bon à 2 messages on peut laisser un doute, si c'est récurent oui il y aura un probleme :p

Hors ligne

 

#8 22-11-2012 16:15:08

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: InvalidQueryException lors de l'ajout d'un utilisateur

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.


22914720

Hors ligne

 

#9 23-11-2012 09:27:11

leubac
Nouveau membre
Date d'inscription: 22-11-2012
Messages: 3

Re: InvalidQueryException lors de l'ajout d'un utilisateur

Bonjour,

Je me suis peut-être mal fait comprendre. smile
J'avais en effet remarqué la ligne

Code:

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

 

#10 23-11-2012 10:13:14

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: InvalidQueryException lors de l'ajout d'un utilisateur

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

 

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