$_POST['']中的动态变量echo


Dynamic variable echo inside $_POST['']

我有一个表单,它有一个动态生成的名称,如下所示:

<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()的输出),从中减去一个整数,最终将结果转换为整数,而不是字符串。您可能最好正确地开始字符串并消除整数算术问题。

我建议使用DateTime对象。以下是您输出输入字段的方式:
<?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"];