为什么我丢失了$ _POST中的<textarea>数据?</textarea>

时间:2012-08-28 18:51:53

标签: php html forms post

我正在编写一个脚本,它将获取一些表单数据并以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 />

2 个答案:

答案 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。允许多个名字。更重要的是,如果你像我一样添加方括号,那么具有相同名称的字段将作为数组返回,这使得在后端处理它们非常容易。