Mauvais enregistrement champ date en base de données

Petit nouveau ! | 7 Messages

25 sept. 2014, 10:16

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

Eléphant du PHP | 151 Messages

25 sept. 2014, 10:58

Il faudrait une description du champ dans ta base de données et le code d'insert (ou d'update).
Développeur d'applications pour intranets industriels (IHM), DBA Oracle, auto entrepreneur. Je fuis les frameworks car je pense comme Rasmus Lerdorf : "all PHP frameworks suck"...
Je me suis lancé dans la reprise du projet PhpMyNewsletter (GNU GPL), que je vous invite à essayer.

echo ($user=='enregistré?"je t'aide":"je t'aide pas !");

Invité
Invité n'ayant pas de compte PHPfrance

25 sept. 2014, 13:32

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

Petit nouveau ! | 7 Messages

25 sept. 2014, 13:36

$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());

Eléphant du PHP | 151 Messages

25 sept. 2014, 14:23

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())
Développeur d'applications pour intranets industriels (IHM), DBA Oracle, auto entrepreneur. Je fuis les frameworks car je pense comme Rasmus Lerdorf : "all PHP frameworks suck"...
Je me suis lancé dans la reprise du projet PhpMyNewsletter (GNU GPL), que je vous invite à essayer.

echo ($user=='enregistré?"je t'aide":"je t'aide pas !");

Petit nouveau ! | 7 Messages

25 sept. 2014, 15:06

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

Eléphant du PHP | 151 Messages

25 sept. 2014, 15:18

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())"
Développeur d'applications pour intranets industriels (IHM), DBA Oracle, auto entrepreneur. Je fuis les frameworks car je pense comme Rasmus Lerdorf : "all PHP frameworks suck"...
Je me suis lancé dans la reprise du projet PhpMyNewsletter (GNU GPL), que je vous invite à essayer.

echo ($user=='enregistré?"je t'aide":"je t'aide pas !");

Mammouth du PHP | 571 Messages

25 sept. 2014, 15:20

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?

Eléphant du PHP | 151 Messages

25 sept. 2014, 15:26

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
Développeur d'applications pour intranets industriels (IHM), DBA Oracle, auto entrepreneur. Je fuis les frameworks car je pense comme Rasmus Lerdorf : "all PHP frameworks suck"...
Je me suis lancé dans la reprise du projet PhpMyNewsletter (GNU GPL), que je vous invite à essayer.

echo ($user=='enregistré?"je t'aide":"je t'aide pas !");

Petit nouveau ! | 7 Messages

25 sept. 2014, 15:39

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


Petit nouveau ! | 7 Messages

25 sept. 2014, 15:44

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)

Eléphant du PHP | 151 Messages

25 sept. 2014, 15:51

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 )
Développeur d'applications pour intranets industriels (IHM), DBA Oracle, auto entrepreneur. Je fuis les frameworks car je pense comme Rasmus Lerdorf : "all PHP frameworks suck"...
Je me suis lancé dans la reprise du projet PhpMyNewsletter (GNU GPL), que je vous invite à essayer.

echo ($user=='enregistré?"je t'aide":"je t'aide pas !");

Petit nouveau ! | 7 Messages

25 sept. 2014, 16:05

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

Mammouth du PHP | 571 Messages

25 sept. 2014, 16:31

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

Petit nouveau ! | 7 Messages

25 sept. 2014, 17:03

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