while循环使用复选框php mysql仅插入最后一行

时间:2013-12-03 11:46:40

标签: php mysql loops

这是我的代码。

<?php
if(isset($_POST['submit']) {
    $currency  =  $_POST['currency'];
    $amount    =  $_POST['amount'];
    $integer   =  0;
    //Loop using while, check the count
    while(count($currency) > $integer) {

        $currencyArray         = array(
                                        'currency'      =>  $currency[$integer],
                                        'amount'            =>  $amount[$integer]
                                        );

        //Insert statement constructed to array
        //..... insert into        
        //Stop loop when reach to the limit
        $integer = $integer + 1;
    }
}
?>

<form action = "" method = "post">
<input type="checkbox" class="currency" name="currency[]" value="USD">USD
<input type="text" name="amount[]" value = "">

<input type="checkbox" class="currency" name="currency[]" value="EUR">EUR
<input type="text" name="amount[]" value = "">

<input type="checkbox" class="currency" name="currency[]" value="JPY">JPY
<input type="text" name="amount[]" value = "">

<input type="checkbox" class="currency" name="currency[]" value="PHP">PHP
<input type="text" name="amount[]" value = "">


<input type = "submit" name = "submit">

</form>

注意:括号()是金额

我有一种情况,如果我按顺序输入货币,就像我选择USD并输入金额( 50 ),接下来是EUR( 2 ),它会保存两条记录,在字段上正确保存金额,但如果我选择EUR( 50 )和JPY( 500 ),则会保存两条记录,但第一条记录会将金额保存到第二条记录可以保存 50 。第一条记录必须 50 ,第二条记录必须 500 。我有什么遗漏的吗?

修改

<?php
if(isset($_POST['submit']) {
    $currency  =  $_POST['currency'];
    $amount    =  array();
    $integer   =  0;

    foreach($_POST['amount'] as $amount_value) {
       if($amount_value != '')    { 
         $amount[]   =  $amount_value;
       }
    }
    //Loop using while, check the count
    while(count($currency) > $integer) {

        $currencyArray         = array(
                                        'currency'      =>  $currency[$integer],
                                        'amount'            =>  $amount[$integer]
                                        );

        //Insert statement constructed to array
        //..... insert into        
        //Stop loop when reach to the limit
        $integer = $integer + 1;
    }
}
?>

编辑阵列结果

金额: 数组([0] =&gt; [1] =&gt; 25 [2] =&gt; [3] =&gt; 50 [4] =&gt; [5] =&gt; 25 [6] =&gt; 50)< / p>

对于货币: 数组([0] =&gt; EUR [1] =&gt; JPY)

2 个答案:

答案 0 :(得分:0)

根据您的代码,如果您打印$amount,您会看到类似的内容:

$amount[0] equals ""
$amount[1] equals "50"
$amount[2] equals "500"
$amount[3] equals ""

当您的$currency[0]等于'EUR'且$currency[1]等于'JPY'时,它与您的想法不一致。

在执行while-loop

之前,您需要从$amount手动删除这些空值

修改:使用解决方案更新,使用array_filter()删除$ amount数组中的空值

$amount = array_filter($amount); 

array_filter():“如果没有提供回调,则将删除所有输入等于FALSE的条目。”

答案 1 :(得分:0)

这就是为什么因为amount []总是设置的,因为没有值也是文本字段中的值! 仅在选中复选框时才设置另一侧的货币。

因此count($amount)始终为4,而count($currency)取决于所选的复选框。

如果现在选择50欧元和100日元并循环播放数组,则会发生以下情况:

$amount[0] = "",因为第一个金额字段为空

$currency[0] = "EUR",因为忽略了美元

$amount[1] = "50",因为50位于下一个字段,即EUR

$currency[1] = "JPY",因为下一个复选框是JPY