我有一个表单,它有一个动态生成的名称,如下所示:
<input type="number" name="<?php echo date("Y")-4 ?>brand%gross" placeholder="Gross Sales % for <?php echo date("Y")-4 ?>">
<input type="number" name="<?php echo date("Y")-3 ?>brand%gross" placeholder="Gross Sales % for <?php echo date("Y")-3 ?>">
<input type="number" name="<?php echo date("Y")-2 ?>brand%gross" placeholder="Gross Sales % for <?php echo date("Y")-2 ?>">
<input type="number" name="<?php echo date("Y")-1 ?>brand%gross" placeholder="Gross Sales % for <?php echo date("Y")-1 ?>">
然后处理表单并创建一个动态表,其中包含用户输入的所有值,然后通过电子邮件发送给我。我的问题是如何获得动态生成的无线电输出到发送的表?我知道下面是不正确的,但只是为了让你更好地了解我在做什么:
if( isset($_POST) ){
${ echo date("Y")-4 } = $_POST['{ echo date("Y")-4 }];
任何帮助都非常感谢!
如果你想在$_POST中设置一个变量内容,那么…使用一个变量
$foo = date("Y")-4;
$_POST['str'] = $foo;
所以…问题是,你想使用一个变量变量名可能像这样:
$foo = date("Y")-4;
$$foo = $_POST[$foo];
明白了吗?
编辑1:这样变量就不会以数字开头了:
$bar = "dt_";
$foo = date("Y")-4;
${$bar.$foo} = $_POST[$foo];
有一个字符串(date()
的输出),从中减去一个整数,最终将结果转换为整数,而不是字符串。您可能最好正确地开始字符串并消除整数算术问题。
<?php
$current_date = new DateTime();
while($i = 1; $i <= 4; $i++) {
$date_int = new DateInterval('P' . (string)$i . 'Y');
$temp_date = $current_date->sub($date_int);
$date_string = $temp_date->format('Y');
?>
<input type="number" name="<?php echo $date_string; ?>brand%gross" placeholder="Gross Sales % for <?php echo $date_string; ?>" />
<?php
} // end while
?>
在处理$_POST
时,您可以做类似的操作:
<?php
$current_date = new DateTime();
$year_array = array();
while($i = 1; $i <= 4; $i++) {
$date_int = new DateInterval('P' . (string)$i . 'Y');
$temp_date = $current_date->sub($date_int);
$date_string = $temp_date->format('Y');
if (!empty($_POST[$date_string. 'brand%gross'])) {
$year_array[$date_string] = $_POST[$date_string . 'brand%gross'];
}
} // end while
?>
请注意,我使用一个数组来存储你的数据索引年字符串,因为你不能有一个以数字开头的变量名(即$2013nrand%gross
是无效的)。
我还强烈建议在输入中使用数组访问符号来简化事情。
如果你像这样输入:
<input type="number" name="year_brand_gross[<?php echo $date_string; ?>]" placeholder="Gross Sales % for <?php echo $date_string; ?>" />
然后year_brand_gross[2013]
等的名称将自动作为数组填充到$_POST['year_brand_gross']
中,从而消除了通过POST输入进行循环的需要。
你可以把它设置为一个变量,像这样
if(!empty($_POST['year_brand_gross']) {
$year_array = $_POST['year_brand_gross'];
}
For PHP <5.3.0你可以使用另一种方法来生成年份字符串:
$current_date = new DateTime();
for ($i = 1; $i <=4; $i++) {
$current_date->modify('-1 year');
$date_string = $current_date->format('Y');
// other code here
}
注意,如图所示,这将在每次迭代中改变$current_date
的值,这与第一个解决方案不同。
首先你要更新你的html,使字段的名称
<input type="number" name="year[<?= date("Y")-4 ?>brand%gross]" placeholder="Gross Sales % for <?= date("Y")-4 ?>">
<input type="number" name="year[<?= date("Y")-3 ?>brand%gross]" placeholder="Gross Sales % for <?= date("Y")-3 ?>">
<input type="number" name="year[<?= date("Y")-2 ?>brand%gross]" placeholder="Gross Sales % for <?= date("Y")-2 ?>">
<input type="number" name="year[<?= date("Y")-1 ?>brand%gross]" placeholder="Gross Sales % for <?= date("Y")-1 ?>">
在你的PHP中,你可以通过键
来访问元素$val2010 = $_POST["year"]["2010brand%gross"];