Php 用一个表单字段发布两个数据

Php 用一个表单字段发布两个数据,php,forms,Php,Forms,我将十几个三元组{year-month-day}放入一个HTML选择输入中 目前我确实: <select name="period"> <option value="2014-10-23"> 我想知道PHP是否可以将这些值直接输入到不同的变量中 比如: <select name="year;month;day"> <option value="2014;10;23"> $_POST['year'] $_POST['month']

我将十几个三元组
{year-month-day}
放入一个HTML选择输入中

目前我确实:

<select name="period">
    <option value="2014-10-23">
我想知道PHP是否可以将这些值直接输入到不同的变量中

比如:

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

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

$\u邮政['年']
$\邮政['month']
$\邮政['day']
您可以在此处尝试(未测试)


2014-10-23
并将其转换为

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

echo "<pre>";
print_r($myDate);
echo "</pre>";
$myDate=json_decode($_POST['period']);
回声“;
打印(myDate);
回声“;
在这种情况下,您还可以轻松地将数据传递给javascript/ajax,因为您也可以将jsonString转换为数组。

您可以在这里尝试(未经测试)


2014-10-23
并将其转换为

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

echo "<pre>";
print_r($myDate);
echo "</pre>";
$myDate=json_decode($_POST['period']);
回声“;
打印(myDate);
回声“;
在这种情况下,您还可以轻松地将数据传递给javascript/ajax,因为您也可以将jsonString转换为数组。

此处未测试的代码

<input name="year" /><input name="month" />...
将其添加到脚本的入口点,它将自动转换您在此处描述的未测试代码的格式

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

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

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

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

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

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

我建议采用另一种方法:将日期存储在对象中。基本上,您有一个变量(
$date
),它包含一个对象(PHP的
DateTime
类的实例),您可以使用它的方法(在本例中是
format()
方法)来检索年、月、日和/或其他属性(如星期几等)

您可以使用现有的HTML:

$date = new DateTime($_POST['period']);
通过初始化一个新的
DateTime
对象并将日期(以
Y-m-d
格式)传递给它,
DateTime
对象将自动保存正确的日期值

现在,您可以使用该对象上的方法检索年、月和日:

注意:
DateTime::format()
接受的格式与接受的格式相同


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

我建议使用另一种方法:将日期存储在对象中。基本上,您有一个变量(
$date
),它包含一个对象(PHP的
DateTime
类的实例),您可以使用它的方法(在本例中是
format()
方法)来检索年、月、日和/或其他属性(如星期几等)

您可以使用现有的HTML:

$date = new DateTime($_POST['period']);
通过初始化一个新的
DateTime
对象并将日期(以
Y-m-d
格式)传递给它,
DateTime
对象将自动保存正确的日期值

现在,您可以使用该对象上的方法检索年、月和日:

注意:
DateTime::format()
接受的格式与接受的格式相同



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

更好的方法是分别为年、月、日创建三个选择。@RohitKumarChoudhary为什么这样更好?你不知道OP想要什么。@RohitKumarChoudhary为相同的结果创建一个更大的源代码有什么好处?如果你只想使用一个选择,那么
分解
是唯一的方法go@RohitKumarChoudhary这是现有的表单字段方式,但它对用户不够友好。实际上,它不是一个组合框,允许选择每年、每月、然后是每天。它是一个组合框,允许选择非常具体的日期(只有12个)。最好是分别为年、月、日期创建三个选项。@RohitKumarChoudhary为什么这样更好?你不知道OP想要什么。@RohitKumarChoudhary为相同的结果创建一个更大的源代码有什么好处?如果你只想使用一个选择,那么
分解
是唯一的方法go@RohitKumarChoudhary这是现有的表单字段方式,但它对用户不够友好。实际上,它不是一个组合框,允许选择每年、每月、然后是每天。这是一个组合框,允许选择非常具体的日期(只有12个)。一次约会他有3个变量?!?!?隐马尔可夫模型。。。应该使用
$date['year']
等等…比他一次约会有3个变量?!?!?隐马尔可夫模型。。。应该使用
$date['year']
等等…相互测试方法!相互询问的方法!这是有道理的。如果我只有年份和月份,你知道如何使它工作吗?这实际上是一个新问题。。。然而,我认为这不应该是一个问题<代码>$date=new\DateTime('2014-05')由PHP内部存储为
2014-05-01 00:00:00
(就像您通过了
2014-05-01
),因此您仍然可以使用
format()
方法,而不会出现任何问题,只要您了解
format('d')
将简单地返回
01
。这是有意义的。如果我只有年份和月份,你知道如何使它工作吗?这实际上是一个新问题。。。然而,我认为这不应该是一个问题<代码>$date=new\DateTime('2014-05')由PHP内部存储为echo $date->format('Y'); //2014 echo $date->format('m'); //05 echo $date->format('d'); //22