Mauvais enregistrement champ date en base de données

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Mauvais enregistrement champ date en base de données

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

par arnaud69 » 26 sept. 2014, 09:11

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

par yann18 » 25 sept. 2014, 18:08

tu reçois bien la date malheureusement cette date est de type string, or doctrine attends un objet de type DateTime :
$person = $this->getDoctrine()->getRepository('IfrassMainBundle:Person')->find($form->get('persid')->getData());
$date = new \DateTime($form->get('pers_birth')->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( $date );

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

par arnaud69 » 25 sept. 2014, 17:33

A la limite faire un
 
var_dump( $form->getData()); 
$person->setPersBirth(new DateTime("2014-09-25"));
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());
 

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

par Jérémie » 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

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

par yann18 » 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

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

par Jérémie » 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

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

par arnaud69 » 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 )

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

par Jérémie » 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)

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

par Jérémie » 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

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

par arnaud69 » 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

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

par yann18 » 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?

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

par arnaud69 » 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())"

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

par Jérémie » 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

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

par arnaud69 » 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())

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

par Jérémie » 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());