2010-01-03 7 views
2

J'ai un problème avec l'enregistrement d'une date dans ma base de données MySQL. Pour tester tout:date ne pas enregistrer dans la base de données MySQL

J'essaie d'enregistrer 2010-01-01 (par exemple) dans une base de données MySQL. D'abord, j'ai mis mon champ MySQL à jour. Cela n'a pas fonctionné. Mais lorsque je mets le champ à un type de chaîne, il enregistre la date dans la base de données.

Pourquoi cela ne fonctionne-t-il pas si je veux enregistrer une date dans un champ de date?

Bien que je pense que le code n'est pas important ici, je le posterai car il est demandé.

J'utilise zf 1.9.6

class JS_Form_EventForm extends ZendX_JQuery_Form{ 

    public function init($options=null){ 
     //parent::__construct($options); 

     $this->setName("newEvent"); 
     $this->addElementPrefixPath('JS_Validate','JS/Validate/','validate');  
     //naam 
     $evtName = new Zend_Form_Element_Text("evt_name"); 
     $evtName->setLabel("Evenement Naam: ") 
       ->setRequired(true); 
     // omschrijving 
     $evtDescription = new Zend_Form_Element_Textarea("evt_description",array("rows"=>6,"cols"=>25)); 
     $evtDescription->setLabel("Evenement omschrijving: "); 

     // locatie 
     $evtAdr = new Zend_Form_Element_Select("adr_id"); 
     $evtAdr->setLabel("Locatie: "); 
     $locaties = $this->getLocations(); 
     $evtAdr->setMultiOptions($locaties); 

     $newAdr = new Zend_Form_Element_Button("new_adr"); 
     $newAdr->setLabel("+"); 
     // begin datum 
     $evtStartDate = new ZendX_JQuery_Form_Element_DatePicker("evt_startdate",array("label"=> "Begin Datum")); 
     $evtStartDate->setJQueryParam('dateFormat', 'dd-mm-yy'); 
     $evtStartDate->addValidator(new Zend_Validate_Date('dd-mm-YYYY')); 

     // eind datum 
     $evtEndDate = new ZendX_JQuery_Form_Element_DatePicker("evt_enddate",array("label"=> "Eind Datum")); 
     $evtEndDate->setJQueryParam('dateFormat', 'dd-mm-yy'); 
     $evtEndDate->addValidator(new Zend_Validate_Date('dd-mm-YYYY')); 
     $evtEndDate->addValidator('CompareDates',false,array('evt_startdate')); 

     // begin tijd 
     $evtStartTime = new Zend_Form_Element_Text("evt_starttime"); 
     $evtStartTime->setLabel("Begin Tijd"); 
     $evtStartTime->addValidator(new Zend_Validate_Date('hh:mm',new Zend_Locale('auto'))); 

     // eind tijd 
     $evtEndTime = new Zend_Form_Element_Text("evt_endtime"); 
     $evtEndTime->setLabel("Eind tijd"); 
     $evtEndTime->addValidator(new Zend_Validate_Date('hh:mm')); 
     // aantal personen 
     $amountPersons = new Zend_Form_Element_Text("evt_amtpersons"); 
     $amountPersons->setLabel("Aantal personen nodig "); 

     $save = new Zend_Form_Element_Submit("save"); 
     $save->setLabel("Opslaan"); 


     $this->addElements(array($evtName,$evtDescription,$evtAdr,$newAdr,$evtStartDate,$evtEndDate,$evtStartTime,$evtEndTime,$amountPersons,$save)); 
     $this->setMethod('post'); 
     $this->setAction(Zend_Controller_Front::getInstance()->getBaseUrl().'/events/add'); 


    } 

Sauvegarde des données:

public function addAction() 
    { 
     // action body 
       $form = new JS_Form_EventForm(); 
       if(!$this->getRequest()->isPost()){ 
        $this->view->form = $form; 
       }else{ 
        $formdata = $this->_request->getPost(); 
        if(!$form->isValid($formdata)){ 
         $this->view->form = $form; 
        }else{ 

         //http://zendgeek.blogspot.com/2009/07/zend-framework-building-complete.html 
         unset($formdata['save']); 
         $formdata['evt_name'] = ucfirst($formdata['evt_name']); 
         $e = new JS_Model_events(); 
         $e->insert($formdata); 
         if($e ==true){ 

          $this->_redirect('events/list'); 
         }else{ 

          echo 'Iets gaat niet goed'; 
         } 
         /* 
         $formdata['sts_id'] = 1; 
         $eventsTable = new JS_Model_DbTable_events(); 
         $eventsTable->insert($formdata); 
         */ 
         die(); 
         // form valid process data 
        } 
       } 
    } 

class JS_Model_DBTable_Events extends Zend_Db_Table_Abstract{ 

    protected $_name = 'events'; 

    public function remove($id){ 
     if(isset($id)){ 
      $where = $this->getAdapter()->quoteInto('evt_id = ?', $id); 
      return($this->delete($where)); 
     }else{ 
      return false; 
     } 
    } 

    /* 
    * function selectOne 
    * @param int id the id of the event to select 
    * @return resultset. 
    */ 
    public function selectOneRow($id){ 

     //$where = $this->getAdapter()->quoteInto('evt_id = ?', $id); 
     //$query = $this->select($where); 
     //$result= $this->fetchRow($query); 

     $select = $this->select(); 
     $select->where('evt_id = ?', $id); 
     $rows = $this->fetchAll($select); 

     return($rows); 

    } 

} 
+3

où est votre code? –

+2

Postez votre requête - cela peut-être quelque chose à voir avec la façon dont vous citez la date? –

+0

@adam impossible de publier des requêtes car j'utilise zend_db_table_abstract insert ($ where). Et quand je veux faire $ result = $ e-> insérer ($ where) et imprimer le résultat $ je viens d'obtenir l'entier mais il n'imprime pas la requête. – sanders

Répondre

3

Je suppose que c'est la cause de votre problème:

$evtStartDate->addValidator(new Zend_Validate_Date('dd-mm-YYYY')); 

MySQL ne comprendre les littéraux de date au format dd-mm-YYYY. MySQL comprend YYYY-MM-DD ou YY-MM-DD, et quelques autres variantes.

Voir http://dev.mysql.com/doc/refman/5.1/en/datetime.html pour la documentation officielle sur les formats littéraux de date acceptés.


Re commentaire: Vous pouvez convertir la date dans votre code PHP, ou bien vous pouvez insérer une expression en utilisant la fonction STR_TO_DATE() de MySQL. Passez un objet Zend_Db_Expr à la place de la valeur littérale.

$startdate_expr = $this->getAdapter()->quoteInto("STR_TO_DATE(?, '%d-%m-%Y')", 
    $formdata["evt_startdate"]); 
$formdata["evt_startdate"] = new Zend_Db_Expr($startdate_expr); 

$enddate_expr = $this->getAdapter()->quoteInto("STR_TO_DATE(?, '%d-%m-%Y')", 
    $formdata["evt_enddate"]); 
$formdata["evt_enddate"] = new Zend_Db_Expr($enddate_expr); 

$e->insert($formdata); 

Ou vous pouvez modifier votre formulaire d'application Web pour exiger des dates pour être au format YYYY-MM-DD, et vous ne devez pas convertir quoi que ce soit.

+0

voulez-vous dire que je dois faire une conversion de date dans mon code? – sanders

Questions connexes