0

我有一个表单,它的无线电输入具有动态生成的名称,如下所示:

<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 }];

任何帮助是极大的赞赏!

4

3 回答 3

2

如果要在 $_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];
于 2013-06-07T19:29:33.570 回答
1

通过有一个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'];
}

对于 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每个迭代的值,这与第一个解决方案不同。

于 2013-06-07T19:43:33.810 回答
0

首先,您要更新 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"];
于 2013-06-07T19:37:13.063 回答