Php 使用&;时日期值的格式更改$在hook\u submit中的form\u数据或$form\u状态

Php 使用&;时日期值的格式更改$在hook\u submit中的form\u数据或$form\u状态,php,ajax,drupal,date,drupal-7,Php,Ajax,Drupal,Date,Drupal 7,我最近更改了表单,使用Ajax提交数据。我的表单以(mm-dd-yyyy)格式接受来自用户的日期,在此更改之前,我的hook\u submit(如下所示)将代表我将其转换为(yyyy-mm-dd)格式,然后再发送给DB。更改后,它跳过该步骤并按原样将日期值发送给DB 我不介意找到或编写自己的函数来进行转换,但我想先了解它的本质,然后再进行转换。也许我以后会学到一些对我有帮助的东西 任何帮助都将不胜感激 我的问题是,为什么我的日期值是用$form_数据转换的,而不是用$form_状态转换的 使用D

我最近更改了表单,使用Ajax提交数据。我的表单以(mm-dd-yyyy)格式接受来自用户的日期,在此更改之前,我的hook\u submit(如下所示)将代表我将其转换为(yyyy-mm-dd)格式,然后再发送给DB。更改后,它跳过该步骤并按原样将日期值发送给DB

我不介意找到或编写自己的函数来进行转换,但我想先了解它的本质,然后再进行转换。也许我以后会学到一些对我有帮助的东西

任何帮助都将不胜感激

我的问题是,为什么我的日期值是用$form_数据转换的,而不是用$form_状态转换的

使用Drupal7

模块:日期API、CTools、

//Original submit handler
//Format sent to DB: yyyy-mm-dd <--This is what I want for the Ajax version
function fsa_roster_form_submit($form_id, &$form_data){
$dcc_table = 'dcc_'.$form_data['values']['sid'];
$insertDaycare = db_insert($dcc_table)
    ->fields(array(
        'entered' => $form_data['values']['date_entered'],
        'exited' => $form_data['values']['date_exited'],
    ))
    ->execute();
}

//Ajaxed submit handler:
//Format sent to DB: mm-dd-yyyy
function fsa_roster_form_ajax_submit($form, $form_state) {
    $dcc_table = 'dcc_'.$form_state['input']['sid'];
    $insertRoster = db_insert($dcc_table)
    ->fields(array(
        'entered' => $form_state['input']['date_entered'],
        'exited' => $form_state['input']['date_exited'],
    ))
    ->execute();
}
$form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save Entry'),
    '#prefix' => '<div id="modalSubmit">',
    '#ajax' => array(//Remove this from your imagination for original submit handler
        'callback' => 'fsa_daycare_roster_form_ajax_submit',
        'wrapper' => 'msgBox',
        'method' => 'replace',
        'effect' => 'fade',
    ),
    '#suffix' => '</div><script>addValidationEvents();</script>'
);
//原始提交处理程序
//发送到数据库的格式:yyyy mm dd字段(数组(
'输入'=>$form_data['values']['date_entered'],
“已退出”=>$form\u data['values']['date\u exited'],
))
->执行();
}
//Ajaxed提交处理程序:
//发送至数据库的格式:mm dd yyyy
函数fsa\u花名册\u表单\u ajax\u提交($form$form\u state){
$dcc_table='dcc_'.$form_state['input']['sid'];
$INSERTLOSTOR=db\U insert($dcc\U表格)
->字段(数组)(
'输入'=>$form_state['input']['date_entered'],
“退出”=>$form\u state['input']['date\u exited'],
))
->执行();
}
$form['submit']=数组(
“#键入”=>“提交”,
“#值”=>t(‘保存条目’),
“#前缀”=>”,
“#ajax”=>array(//将其从原始提交处理程序的想象中移除
“回调”=>“fsa\U日托机构\U名册\U表格\U ajax\U提交”,
“包装器”=>“msgBox”,
'方法'=>'替换',
“效果”=>“褪色”,
),
“#后缀”=>“addValidationEvents();”
);

原因是您在AJAX提交回调中使用了
$form\u state['input']
,在常规提交回调中使用了
$form\u state['values']
输入
数组始终包含处理和验证前的表单数据,而
数组包含应用处理和验证后的值

因此,要在AJAX提交回调中实现相同的效果,请使用以下方法,就像在常规提交回调中一样:

function fsa_roster_form_ajax_submit($form, $form_state) {
  $dcc_table = 'dcc_'.$form_state['values']['sid'];
  $insertRoster = db_insert($dcc_table)
  ->fields(array(
    'entered' => $form_state['values']['date_entered'],
    'exited' => $form_state['values']['date_exited'],
  ))
  ->execute();
}

另外,不管怎样,您的常规提交回调和AJAX提交回调都接受相同的参数:
$form
$form\u state
。尽管在这两个函数中使用不同的变量名调用它们,但它们实际上(或多或少)是相同的。

原因是在AJAX提交回调中使用
$form\u state['input']
,在常规提交回调中使用
$form\u state['values']
输入
数组始终包含处理和验证前的表单数据,而
数组包含应用处理和验证后的值

因此,要在AJAX提交回调中实现相同的效果,请使用以下方法,就像在常规提交回调中一样:

function fsa_roster_form_ajax_submit($form, $form_state) {
  $dcc_table = 'dcc_'.$form_state['values']['sid'];
  $insertRoster = db_insert($dcc_table)
  ->fields(array(
    'entered' => $form_state['values']['date_entered'],
    'exited' => $form_state['values']['date_exited'],
  ))
  ->execute();
}

另外,不管怎样,您的常规提交回调和AJAX提交回调都接受相同的参数:
$form
$form\u state
。虽然您在两个函数中使用不同的变量名调用它们,但它们实际上(或多或少)是相同的。

您是否尝试过在drupal配置中更改“日期格式”而不是编码它们?所以所有的日期都是以这种格式输出的。你有没有尝试过在drupal配置中更改“日期格式”而不是编码?所以所有的日期都是以这种格式输出的。谢谢!您的回答非常有帮助,我对$form_state输入和值有了更好的理解。谢谢!您的回答非常有用,我对$form_state输入和值有了更好的理解。