使用单个表单字段POST两个数据

时间:2014-05-20 09:08:44

标签: php forms

我将十几个三元组{year - month - day}添加到HTML选择输入中。

目前我这样做:

<select name="period">
    <option value="2014-10-23">

然后在PHP中:

explode('-', $_POST['period'])

我想知道PHP是否可以直接将这些值转换为不同的变量?

类似的东西:

<select name="year;month;day">
    <option value="2014;10;23">

$_POST['year']
$_POST['month']
$_POST['day']

4 个答案:

答案 0 :(得分:1)

你可以在这里试试(未经测试)

<select name="period">
    <option value='{"year":2014,"month":10,"day":23}'>2014-10-23</option>

并将其转换为

$myDate = json_decode($_POST['period']);

echo "<pre>";
print_r($myDate);
echo "</pre>";

在这种情况下,您也可以轻松地将数据传递给javascript / ajax,因为您也可以将jsonString转换为数组。

答案 1 :(得分:1)

此处未经测试的代码

foreach($_POST as $key => $value){
    $keys = explode(';',$key);
    $values = explode(';',$value);
    if(count($keys) > 1 && count($keys) === count($values)){
       unset($_POST[$key]);
       foreach($keys as $i=>$k){
          $_POST[$k] = $values[$i];
       }
    }
}

将此添加到脚本的入口点,它应自动转换您描述的格式

答案 2 :(得分:1)

如果您想要多个字段,则必须发送多个字段

<input name="year" /><input name="month" />...

完全可以接受。您仍然可以为该字段设置样式,使它们看起来像一个字段。

如果您只想要一个字段,则必须在php中分割数据

list($year, $month, $day) = explode(';', $_POST['date']);

答案 3 :(得分:1)

我建议采用不同的方法:将日期存储在DateTime对象中。基本上,你有一个变量($date),它包含一个对象(一个PHP&#39; s DateTime类的实例),你可以使用它的方法(在这种情况下, format()方法)检索年,月,日和/或其他属性(例如星期几等)。

您可以使用现有的HTML:

<select name="period">
    <option value="2014-05-22">May 22, 2014</option>
</select>

在处理输入的PHP脚本中,创建一个包含DateTime对象的变量$date

$date = new DateTime($_POST['period']);

通过初始化新的DateTime对象并将日期(Y-m-d格式)传递给它,DateTime对象将自动保留正确的日期值。

现在,您可以在该对象上使用format()方法来检索年,月和日:

echo $date->format('Y'); //2014
echo $date->format('m'); //05
echo $date->format('d'); //22

注意:DateTime::format()接受与format parameters相同的date() function

另请注意,即使您只传递了一个日期(也没有时间),$date变量仍然保留一个完整的DateTime对象。它的值在PHP内部存储为2014-05-22 00:00:00,因此$date->format('H:i:s')将返回00:00:00。如果您只在Y参数中使用mdformat,这当然不会产生任何影响。