这是我的代码。
<?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)
答案 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