我的表单中有无线电输入,其动态生成的名称如下所示:
<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 }];
非常感谢任何帮助!
答案 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"];