Page 1 sur 2

Mauvais enregistrement champ date en base de données

Posté : 25 sept. 2014, 10:16
par Jérémie
Bonjour,

j'ai un petit soucis d'enregistrement d'un champ date, relevé à partir d'un formulaire, en base de données (MySQL).
Lorsque je choisi la date 1966/05/04, la date enregistrée est 1966/01/01.
L'année s'enregistre correctement. Le mois et le jour s'enregistre à 1.
je suis sous Symfony2.

Auriez-vous une idée?
En vous remerciant,
Jérémie

Re: Mauvais enregistrement champ date en base de données

Posté : 25 sept. 2014, 10:58
par arnaud69
Il faudrait une description du champ dans ta base de données et le code d'insert (ou d'update).

Re: Mauvais enregistrement champ date en base de données

Posté : 25 sept. 2014, 13:32
par Invité
Il s'agit d'un champ de type "date" en base de données.
En ce qui concerne le code SQL, il n'y en a pas dans le code. Doctrine2 est utilisé.

Re: Mauvais enregistrement champ date en base de données

Posté : 25 sept. 2014, 13:36
par Jérémie
$person = $this->getDoctrine()->getRepository('IfrassMainBundle:Person')->find($form->get('persid')->getData());
$person
->setPersName($form->get('pers_name')->getData())
->setPersFirstName($form->get('pers_firstname')->getData())
->setPersMobil($form->get('pers_mobil')->getData())
->setPersPhone($form->get('pers_phone')->getData())
->setPersEmail($form->get('pers_email')->getData())
->setPersBirth($form->get('pers_birth')->getData());

Re: Mauvais enregistrement champ date en base de données

Posté : 25 sept. 2014, 14:23
par arnaud69
Ah la joie des frameworks... Regarde ma signature et ce qu'a dit Rasmus... C'était pour la culture !

Sinon, fais un

Code : Tout sélectionner

desc 'ma_table_qui_va_bien_qui_a_une_date';
dans ton phpmyadmin

et mets la classe de gestion de setPersBirth($form->get('pers_birth')->getData())

Re: Mauvais enregistrement champ date en base de données

Posté : 25 sept. 2014, 15:06
par Jérémie
OK pour ta signature...
Je n'ai pas d'avis particulier. Je débute en Symfony en reprenant un programme existant.

Par contre excuuse moi mais je ne suis pas sûr de te suivre.
J'ai fais DESC 'person'; (person est le le nom de ma table).

"mets la classe de gestion de setPersBirth($form->get('pers_birth')->getData())" ?

Merci

Re: Mauvais enregistrement champ date en base de données

Posté : 25 sept. 2014, 15:18
par arnaud69
Ok...

Tu fais un desc 'table', tu mets le résultat ici.

Je suis pas de la 3è symphonie, je n'irai pas le télécharger. Merci de mettre ici le code de la gestion de setPersBirth($form->get('pers_birth')->getData())"

Re: Mauvais enregistrement champ date en base de données

Posté : 25 sept. 2014, 15:20
par yann18
une date mysql a le format suivant aaaaa-mm-jj(ex: 1966-05-04) et non 1966/05/04.
au niveau de l'action qui te permet d'enregistrer, fais un dump sur les données provenant du formulaire question de voir quel format de date est entré:

 var_dump( $form->getData());
die("fin");
$person = $this->getDoctrine()->getRepository('IfrassMainBundle:Person')->find($form->get('persid')->getData());
$person
->setPersName($form->get('pers_name')->getData())
->setPersFirstName($form->get('pers_firstname')->getData())
->setPersMobil($form->get('pers_mobil')->getData())
->setPersPhone($form->get('pers_phone')->getData())
->setPersEmail($form->get('pers_email')->getData())
->setPersBirth($form->get('pers_birth')->getData());
peux-tu poster le code de l'entité Personne?

Re: Mauvais enregistrement champ date en base de données

Posté : 25 sept. 2014, 15:26
par arnaud69
une date mysql a le format suivant aaaaa-mm-jj(ex: 1966-05-04) et non 1966/05/04.
au niveau de l'action qui te permet d'enregistrer, fais un dump sur les données provenant du formulaire question de voir quel format de date est entré:
...
peux-tu poster le code de l'entité Personne?
Merci Yann18

Re: Mauvais enregistrement champ date en base de données

Posté : 25 sept. 2014, 15:39
par Jérémie
Entity "Person.php"
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getInternalTraining()
    {
        return $this->internal_training;
    }

    /**
     * Add workshop
     *
     * @param \Ifrass\MainBundle\Entity\Workshop $workshop
     * @return Person
     */
    public function addWorkshop(\Ifrass\MainBundle\Entity\Workshop $workshop)
    {
        $this->workshop[] = $workshop;

        return $this;
    }

    /**
     * Remove workshop
     *
     * @param \Ifrass\MainBundle\Entity\Workshop $workshop
     */
    public function removeWorkshop(\Ifrass\MainBundle\Entity\Workshop $workshop)
    {
        $this->workshop->removeElement($workshop);
    }

    /**
     * Get workshop
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getWorkshop()
    {
        return $this->workshop;
    }

    public function getDistinctFields()
    {
        $listFields = array();
        foreach( $this -> fieldd as $field )
        {
            foreach( $field -> getFormation() as $formation )
            {
                if( !in_array( $formation -> getForName() , $listFields ))
                {
                    $listFields[] =  $formation -> getForName();
                }
            }
        }

        return $listFields;
    }
}
                                                                                                                                                                                               784,1         Bas


Re: Mauvais enregistrement champ date en base de données

Posté : 25 sept. 2014, 15:44
par Jérémie
mysql> DESC person;
+--------------------+----------------+------+------+----------+--------------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+-----------------+------+------+----------+--------------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| pers_firstname | varchar(100) | NO | | NULL | |
| pers_name | varchar(100) | NO | | NULL | |
| pers_birth | date | NO | | NULL | |
| pers_mobil | int(11) | YES | | NULL | |
| pers_phone | int(11) | YES | | NULL | |
| pers_email | varchar(100) | NO | | NULL | |
| pers_pic | varchar(255) | YES | | NULL | |
| pers_letter | varchar(255) | YES | | NULL | |
| pers_cv | varchar(255) | YES | | NULL | |
| sdate_id | int(11) | YES | MUL | NULL | |
+-------------------+----------------+------+-------+---------+--------------------+
11 rows in set (0.00 sec)

Re: Mauvais enregistrement champ date en base de données

Posté : 25 sept. 2014, 15:51
par arnaud69
Bon, la table est bonne, mais alors le code...

Est-ce que je fais mal de t'orienter vers ça : http://forum.symfony-project.org/index.php ?

Honnêtement, je n'y toucherai pas, désolé. Si quelqu'un veut reprendre...
(PS : tu vois une gestion de date dans ce bout de code ?? #-o #-o )

Re: Mauvais enregistrement champ date en base de données

Posté : 25 sept. 2014, 16:05
par Jérémie
Dans le formulaire, il s'agit de jquery datepiscker qui prend la date au format //mois/jour/année

http://jqueryui.com/datepicker/
Jérémie

Re: Mauvais enregistrement champ date en base de données

Posté : 25 sept. 2014, 16:31
par yann18
dans l'entité Person j'avais besoin de me rassurer que l'attribut persBirth était bien de type date :
/**
 * @var \DateTime
 * @ORM\Column(name="pers_Birth", type="date")
 */
private $persBirth;

Mais d'après la description de la table générée que tu viens de poster, pers_birth est bien de type date.Donc le problème ne se trouve pas au niveau de l'entité mais du côté du formulaire.je suppose que tu ne reçois pas le bon format(aaaa-mm-jj) compatible avec mysql.D'où ma question, est-ce que dans l'action du contrôleur tu as bien le format aaaa-mm-jj?un debug sur les données du formulaire te permettra de voir quel est le format de la date:
  var_dump( $form->getData()); //que retourne le dump
die("fin");
$person = $this->getDoctrine()->getRepository('IfrassMainBundle:Person')->find($form->get('persid')->getData());
$person
->setPersName($form->get('pers_name')->getData())
->setPersFirstName($form->get('pers_firstname')->getData())
->setPersMobil($form->get('pers_mobil')->getData())
->setPersPhone($form->get('pers_phone')->getData())
->setPersEmail($form->get('pers_email')->getData())
->setPersBirth($form->get('pers_birth')->getData());
 
que retourne le var_dump (ci-dessus)?

Dans tous les cas l'insertion de la date doit ressembler à ceci:
$person->setPersBirth(new DateTime("2014-09-25"));

Merci Yann18
beh de rien

Re: Mauvais enregistrement champ date en base de données

Posté : 25 sept. 2014, 17:03
par Jérémie
Si je ne me suis pas planté voilà le retour que j'ai...

object(Ifrass\MainBundle\Entity\Person)#1498 (20) { ["id":"Ifrass\MainBundle\Entity\Person":private]=> string(2) "28" ["fos_user_id":"Ifrass\MainBundle\Entity\Person":private]=> NULL ["expertise":"Ifrass\MainBundle\Entity\Person":private]=> object(Doctrine\Common\Collections\ArrayCollection)#1501 (1) { ["_elements":"Doctrine\Common\Collections\ArrayCollection":private]=> array(0) { } } ["modif_history":"Ifrass\MainBundle\Entity\Person":private]=> object(Doctrine\Common\Collections\ArrayCollection)#1503 (1) { ["_elements":"Doctrine\Common\Collections\ArrayCollection":private]=> array(0) { } } ["in_service_training":"Ifrass\MainBundle\Entity\Person":private]=> NULL ["internal_training":"Ifrass\MainBundle\Entity\Person":private]=> NULL ["workshop":"Ifrass\MainBundle\Entity\Person":private]=> NULL ["sdate_id":"Ifrass\MainBundle\Entity\Person":private]=> object(Doctrine\Common\Collections\ArrayCollection)#1502 (1) { ["_elements":"Doctrine\Common\Collections\ArrayCollection":private]=> array(0) { } } ["grade":"Ifrass\MainBundle\Entity\Person":private]=> object(Doctrine\Common\Collections\ArrayCollection)#1496 (1) { ["_elements":"Doctrine\Common\Collections\ArrayCollection":private]=> array(0) { } } ["fieldd":"Ifrass\MainBundle\Entity\Person":private]=> NULL ["pers_firstname":"Ifrass\MainBundle\Entity\Person":private]=> string(6) "le_nom" ["pers_name":"Ifrass\MainBundle\Entity\Person":private]=> string(9) "le_prenom" ["pers_birth":"Ifrass\MainBundle\Entity\Person":private]=> object(DateTime)#1149 (3) { ["date"]=> string(19) "1967-10-17 00:00:00" ["timezone_type"]=> int(3) ["timezone"]=> string(12) "Europe/Paris" } ["pers_mobil":"Ifrass\MainBundle\Entity\Person":private]=> string(9) "611223344" ["pers_phone":"Ifrass\MainBundle\Entity\Person":private]=> NULL ["pers_email":"Ifrass\MainBundle\Entity\Person":private]=> string(17) "[email protected]" ["pers_pic":"Ifrass\MainBundle\Entity\Person":private]=> NULL ["pers_letter":"Ifrass\MainBundle\Entity\Person":private]=> NULL ["pers_cv":"Ifrass\MainBundle\Entity\Person":private]=> NULL ["field"]=> object(Doctrine\Common\Collections\ArrayCollection)#1500 (1) { ["_elements":"Doctrine\Common\Collections\ArrayCollection":private]=> array(0) { } } } fin