所以我是php新手并尝试练习用户可以选择他们想要的服务类型。他们可以选择多个服务,这就是我使用复选框而不是单选按钮的原因。如果他们只选择一项服务(服务A,服务B或服务C),我可以在文本框中获得正确的回报。当我试图查看用户是否已选中2个方框(服务A和服务B)时,返回就像用户只选择了服务B一样。
这是我的所有代码:
<form action="" method="post">
<table>
<tr>
<td>
<input type="checkbox" name="service" value="a" />Service A</td>
</tr>
<tr>
<td>
<input type="checkbox" name="service" value="b" />Service B</td>
</tr>
<tr>
<td>
<input type="checkbox" name="service" value="c" />Service C</td>
</tr>
</table>
<input type="submit" name="submit" value="submit">
<?php
if(isset($_POST['submit']))
{
$a = $_POST['service'];
if($a == "a")
{
echo "<input type='text' name='txt' value='$1,000'/>";
}
if($a == "b")
{
echo "<input type='text' name='txt' value='$20,000'/>";
}
if($a == "c")
{
echo "<input type='text' name='txt' value='$300,000'/>";
}
if(($a == "a" and $a == "b"))
{
echo "<input type='text' name='txt' value='$21,000'/>";
}
}
?>
我也试过&amp;&amp;而不是和仍然得到相同的结果。
我事先感谢您的帮助。
编辑以显示整个代码。
答案 0 :(得分:2)
您的复选框应如此定义:
<input type="checkbox" name="service[]" value="a" />
请注意那里的[]
。
现在,在你的PHP方面,你可以这样做:
$a = array_flip($_POST['service']);
if( isset($a['a'])) { /* a was checked */ }
if( isset($a['b'])) { /* b was checked */ }
if( isset($a['a'],$a['b'])) { /* a and b were checked */ }
或者,更可靠的是,您可能希望这样做:
$total = 0;
if( isset($a['a'])) $total += 1000;
if( isset($a['b'])) $total += 20000;
if( isset($a['c'])) $total += 300000;
echo '<input type="text" name="txt" value="$'.number_format($total).'" />';
答案 1 :(得分:0)
你有两个主要问题,第一个是你的输入需要是一个复选框数组,如下所示:
<input type="checkbox" name="service[]" value="a">
<input type="checkbox" name="service[]" value="b">
<input type="checkbox" name="service[]" value="c">
然后我们可以改变PHP以使用复选框数组:
if(isset($_POST['submit'])) {
$services = $_POST['service']; // a should now be an array if you're using checkboxes.
$value = 0; // keep track of all the service values
$service_list = array(); // keep track of the services ordered
if(in_array('a', $services)) { // see if a is in the array
$value += 1000;
$service_list[] = 'a';
}
if(in_array('b', $services)) { // see if b is in the array
$value += 20000;
$service_list[] = 'b';
}
if(in_array('c', $services)) { // see if c is in the array
$value += 300000;
$service_list[] = 'c';
}
}
echo "You chose the service(s) " . implode(', ', $service_list) . " for a total of $" . number_format($value);
echo "<input type=\"text\" name=\"txt\" value=\"$". number_format($value) ."\" />";
答案 2 :(得分:0)
只有单选按钮可以具有相同的名称。复选框必须具有唯一值。当发布键值对时,浏览器接收的最后一对将覆盖先前的其他对。
<input type="checkbox" name="A" value="1" />Service A
<input type="checkbox" name="B" value="2" />Service B
<input type="checkbox" name="C" value="3" />Service C
$a = intval($_POST['A']) // if checkbox was not checked
$b = intval($_POST['B']) // intval will make it zero.
$c = intval($_POST['C'])
$values = array(0,1000,20000,30000);
$descriptions = array('','Service A ','Service B ','Service C ');
$value = number_format($values[$a] + $values[$b] + $values[$c]);
$description = $descriptions[$a] . $descriptions[$b]. $descriptions[$c] . '$' . number_format($value);
echo "<input type=\"text\" name=\"txt\" value=\"$value\" />$description<br/>";