$ _POST ['']内的动态变量回显

时间:2013-06-07 19:23:45

标签: php post echo dynamic-variables

我的表单中有无线电输入,其动态生成的名称如下所示:

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

非常感谢任何帮助!

3 个答案:

答案 0 :(得分: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];

答案 1 :(得分: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&lt; 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
}

请注意,如图所示,这将改变每个iteratoin的$current_date值,这与第一个解决方案不同。

答案 2 :(得分: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"];