我正在编写一个脚本,它将获取一些表单数据并以PDF或其他可打印格式显示。表单底部是“新行”按钮。单击此按钮时,将显示表单中的新行,并将上一行中的数据添加到根据其label标签命名的数组中。我的问题是,当提交表单时,在$ desc []数组中结束的唯一数据是在最后一行输入的内容。有人可以查看我的代码,看看我做错了什么?
if (isset($_POST['new_line']) || isset($_POST['submit'])) {
// Grab POST data
$invoice_quote = trim($_POST['invoice_quote']);
$sales_person = trim($_POST['sales_person']);
$job = trim($_POST['job']);
$due_date = trim($_POST['due_date']);
$first_name = trim($_POST['first_name']);
$last_name = trim($_POST['last_name']);
$address = trim($_POST['address']);
$city = trim($_POST['city']);
$state = trim($_POST['state']);
$zip = trim($_POST['zip']);
$phone = trim($_POST['phone']);
$email = trim($_POST['email']);
$qty = array_filter(array_map('trim', $_POST['qty']));
$desc = array_filter(array_map('trim', $_POST['desc']));
$unit_price = array_filter(array_map('trim', $_POST['unit_price']));
$line_total = array_filter(array_map('trim', $_POST['line_total']));
$line = trim($_POST['line']);
if (isset($_POST['submit'])) {
$flag = 'FALSE';
// This is only for test proposes, This is untimately where the
// code will go that will generate the PDF
echo ('<div class= "info">'.$invoice_quote.' '.$sales_person.' '.$job.' '.$due_date.' '.$first_name.' '.$last_name.' '.$address.' '.$city.' '.$state.' '.$zip.' '.$phone.' '.$email.'<br />');
var_dump($qty);
echo '<br />';
var_dump($desc);
echo '<br />';
var_dump($unit_price);
echo '<br />';
var_dump($line_total);
echo('</div>');
exit();
}
}
<form id="invoiceform" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<fieldset class= "description">
<label for= "qty" class= "qty">Qty</label>
<label for= "desc" class= "desc">Description</label>
<label for= "unit_price" class= "unit_price">Unit Price</label>
<label for= "line_total" class= "line_total">Line Total</label>
<br/>
<?php
if ($flag == 'TRUE') {
$n = 0;
do {
?>
<input type= "text" class= "qtyinfo" name= "qty[]" maxlength "10" value= "<?php if (isset($qty[$n])) echo ($qty[$n]); ?>"/>
<textarea class= "descinfo" name= "desc[]" id="<?php echo('desc_'.$n); ?>" value= "<?php if (isset($desc[$n])) echo ($desc[$n]); ?>"></textarea>
<input type= "text" class= "unit_priceinfo" name= "unit_price[]" id="<?php echo('unit_price_'.$n); ?>" maxlength= "10" value= "<?php if (isset($unit_price[$n])) echo ($unit_price[$n]); ?>" />
<input type= "text" class= "line_totalinfo" name= "line_total[]" id= "<?php echo('line_total_'.$n); ?>" maxlength= "10" value= "<?php if (isset($line_total[$n])) echo ($line_total[$n]); ?>" />
<br/>
<?php
$n++;
}
while ($n < $line);
}
?>
<input type= "hidden" id= "line" name= "line" value= "<?php echo $line + 1; ?>"/>
<input type= "submit" id= "new_line" name= "new_line" value= "New Line" />
</fieldset><br />
答案 0 :(得分:1)
试一试:
<textarea id= "desc" name= "<?php echo('desc_'.$n); ?>"><?php if (isset($desc[$n])) echo ($desc[$n]); ?></textarea>
答案 1 :(得分:1)
看起来您正在添加具有相同ID的多个字段。在你的循环内你有这个:
<input type= "text" id= "qty" name= "<?php echo('qty_'.$n); ?>" maxlength "10" value= "<?php if (isset($qty[$n])) echo ($qty[$n]); ?>"/>
<textarea id= "desc" name= "<?php echo('desc_'.$n); ?>" value= "<?php if (isset($desc[$n])) echo ($desc[$n]); ?>"></textarea>
<input type= "text" id= "unit_price" name= "<?php echo('unit_price_'.$n); ?>" maxlength= "10" value= "<?php if (isset($unit_price[$n])) echo ($unit_price[$n]); ?>" />
<input type= "text" id= "line_total" name= "<?php echo('line_total_'.$n); ?>" maxlength= "10" value= "<?php if (isset($line_total[$n])) echo ($line_total[$n]); ?>" />
当循环运行多次时,这会生成多个具有相同id的实例,这是无效的html并且可以解释您遇到的问题。我建议做这样的事情:
<input type="text" name="qty[]" id="<?php echo('qty_'.$n); ?>" maxlength="10" value="<?php if (isset($qty[$n])) echo ($qty[$n]); ?>"/>
<textarea name="desc[]" id="<?php echo('desc_'.$n); ?>" value="<?php if (isset($desc[$n])) echo ($desc[$n]); ?>"></textarea>
<input type="text" name="unit_price[]" id="<?php echo('unit_price_'.$n); ?>" maxlength="10" value="<?php if (isset($unit_price[$n])) echo ($unit_price[$n]); ?>" />
<input type="text" name="line_total[]" id= "<?php echo('line_total_'.$n); ?>" maxlength="10" value="<?php if (isset($line_total[$n])) echo ($line_total[$n]); ?>" />
你会注意到我换了名字和id。允许多个名字。更重要的是,如果你像我一样添加方括号,那么具有相同名称的字段将作为数组返回,这使得在后端处理它们非常容易。