第二种情况不在PHP switch语句中触发

时间:2014-04-03 02:35:00

标签: php mysql

我正在创建一个查询mysql的简单表。我有调整查询的文本字段。例如,如果我在{,1}中放入item ID,然后按提交,它将只选择ID,但如果我在空白文本字段上点击提交,那么它应该为我提供所有数据。< / p>

这在我的第一个案例中运作良好,但是我无法解决第二个问题。如果我switch放在案件上,那么现在首先出现的新案件将被解雇,但第二个案件将胜诉。我不确定我在这里做错了什么。

switch (isset($_POST)) {

case (isset($_POST['ProdNo'])):  // should only fire if the ProdNo field is filled and submit is hit
      if (empty($_POST['ProdNo'])) { break; }  // should return us to a full listing
      $i=$_POST['ProdNo'];
      $sql = "SELECT * from fg_inventory WHERE ProdNo LIKE '$i%'"; 
      $result = $conn->query($sql) or die(mysqli_error());
break;  


case (isset($_POST['fg_inventory_id2'])):   // should only fire if the fg_inventory field is filled and submit is hit
      if (empty($_POST['fg_inventory_id2'])) { break; }  // should return us to a full listing
      $i=$_POST['fg_inventory_id2'];
      $sql = "SELECT * from fg_inventory WHERE fg_inventory_id2=$i"; 
      $result = $conn->query($sql) or die(mysqli_error());
break;

default: 

$sql = "SELECT * from fg_inventory"; 
    $result = $conn->query($sql) or die(mysqli_error());
    }

2 个答案:

答案 0 :(得分:0)

因此,switch语句可能无法正常工作......

switch($var)会将$var与各种case块进行比较。例如,

$var = 1;
switch($var) {
    case (1): // Is $var equal to 1?
        echo("ONE");
        break;
    case (2): // Is $var equal to 2?
        echo("TWO");
        break;
}

此案例将输出ONE

由于您将switchisset一起使用,因此您总是会传递truefalse。您的以下case项检查也会检查truefalse。因此,最后您将truesfalses进行检查。在这种情况下,您可能只是使用嵌套的if语句。 : - )

这是PHP的switch reference page

另请注意,如果您希望一个案例落入另一个案例,只需省略break;

答案 1 :(得分:0)

这是开关的错误用法。 Switch接受一个变量,然后比较它可能的每种情况。一个例子是

switch ($variable) {
case "hello":
//do something
break;

case "world":
break;

换句话说,案例是变量将等于的内容,以触发其中的内容。你只是问$ _POST是否存在,它总是这样,所以switch($ _POST)总是等于true。第一种情况总是等于真,所以......这就是解雇的问题。你想使用if(isset($ _ POST ['something'])){} else {}