PHP当2个或更多条件为真时(如果声明)

时间:2014-07-08 22:43:15

标签: php if-statement conditional-statements multiple-conditions

所以我是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;而不是和仍然得到相同的结果。

我事先感谢您的帮助。

编辑以显示整个代码。

3 个答案:

答案 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&#x2003;','Service B&#x2003;','Service C&#x2003;');


$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/>";