【问题标题】:PHP - form $_POST data array doesn't return the needed informationPHP - 表单 $_POST 数据数组不返回所需的信息
【发布时间】:2015-02-11 16:00:49
【问题描述】:

我希望能成功解释是什么问题。我有这个表格:

<form class="p_form" name="form1" method="POST" action="./index.php?product=3&amp;pn=1">    
<div class="poptionholder">    
<div class="poption"><input type="checkbox" value="34" id="o34" name="options[]">
<label for="o34">Red</label></div>    
<input type="text" value="" id="p34" name="opt_price[]"></div>

<div class="poptionholder">    
<div class="poption"><input type="checkbox" value="35" id="o35" name="options[]">
<label for="o35">Green</label></div>    
<input type="text" value="" id="p35" name="opt_price[]"></div>

<div class="poptionholder">    
<div class="poption"><input type="checkbox" value="36" id="o36" name="options[]">
<label for="o36">Yellow</label></div>
<input type="text" value="" id="p36" name="opt_price[]"></div>

<div class="poptionholder">    
<div class="poption"><input type="checkbox" value="37" id="o37" name="options[]">
<label for="o37">Orange</label></div>
<input type="text" value="12" id="p37" name="opt_price[]"></div>

<div class="poptionholder">    
<div class="poption"><input type="checkbox" value="38" id="o38" name="options[]">
<label for="o38">Blue</label></div>
<input type="text" value="" id="p38" name="opt_price[]"></div>

<div class="poptionholder">    
<div class="poption"><input type="checkbox" value="39" id="o39" name="options[]">
<label for="o39">Pink</label></div>
<input type="text" value="" id="p39" name="opt_price[]"></div>

    <input type="submit" value="Send"/>
</form>    

和下面的php代码:

if(isset($_POST['options'])){
$options = $_POST['options'];
$opt_price = $_POST['opt_price'];
foreach( $options as $key => $n ) {
$optid=$n;
$price=$opt_price[$key];
}    
}    

这个表单基本上代表带有颜色标签和输入文本的复选框,用户可以在其中添加价格。 问题是,当我提交表单时,复选框仅在选中后发布数据,但在所有情况下输入文本发布数据 - 输入中有或没有价格。当我打印发布的数据时,我可以看到:

array(3) { [0]=> string(2) "37" [1]=> string(2) "38" [2]=> string(2) "39" } - only 3 checkboxes are checked 
array(6) { [0]=> string(0) "" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(0) "" [4]=> string(2) "12" [5]=> string(0) "" } - all 6 input texts..

我只想获取选中复选框的数据及其价格,例如组 - 复选框 + 它的价格 ..如何做到这一点?提前致谢

【问题讨论】:

    标签: php html arrays forms


    【解决方案1】:

    不要使用opt_price[]作为名称,只需使用id作为名称,然后使用$price = $_POST['p'.$key];,如下所示:

    <div class="poptionholder">    
    <div class="poption"><input type="checkbox" value="35" id="o35" name="options[]">
    <label for="o35">Green</label></div>    
    <input type="text" value="" id="p35" name="p35"></div>
    
    if(isset($_POST['options'])){
        $options = $_POST['options'];    
        foreach( $options as $key => $n ) {
           $optid=$n;
           $price=$_POST['p'.$n];
        }    
    }    
    

    【讨论】:

    • 谢谢,拉格纳。看起来它会起作用,但 $_POST['p'.$key] 有问题 - 当我打印 $_POST['p37'] 时,我可以看到价格,但使用 $_POST['p'.$key]当键是 37 - 它是空的,这是为什么呢?
    • 可能文本框没有正确的名称“p37”
    • Ragnar 也许你的意思是 $_POST['p'.$n];而不是 $_POST['p'.$key];因为这种方式有效,我接受你的回答,谢谢!
    【解决方案2】:

    您的字段似乎有 id (34 - 39),因此您可以使用这些来确保字段始终匹配:

    <div class="poptionholder">    
    <div class="poption"><input type="checkbox" value="34" id="o34" name="options[34]">
                                                                                  ^^ here
    <label for="o34">Red</label></div>    
    <input type="text" value="" id="p34" name="opt_price[34]"></div>
                                                         ^^ here
    

    等等

    现在您可以遍历设置的复选框并使用该键访问正确的文本字段:

    foreach( $options as $key => $n ) {
      $price=$opt_price[$key];
    }
    

    您当然也可以循环 array_keys($options),因为您不使用值 $n

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 2015-04-11
      • 1970-01-01
      • 2016-02-21
      • 2015-11-24
      • 2016-01-25
      相关资源
      最近更新 更多