PHP MySQL搜索带有可选字段

时间:2014-04-29 15:23:42

标签: php sql search

我正在尝试创建一个表单,用户可以在其中输入信息,然后搜索与此查询匹配的表。我希望输入的信息是可选的(并非所有字段都需要完成)。如果在查询中添加了'status',我有第一个'if'只能用于floor和flatno但不能获得第二个'。

我知道我的代码中的安全问题,但只想在内部服务器上使用它作为我自己的指南。

<?php


// if there is a value in the floor and flatno field then do this:
    if (!empty($_POST['Floor']) && (!empty($_POST['flatno']))) 
{
    require 'connectdb.php';
    $result = mysqli_query($con,"SELECT * FROM issuelog WHERE floor='$_POST[Floor]' AND flatnumber='$_POST[flatno]'");
}   

while($row = mysqli_fetch_array($result))
  {

include( "searchoutputform.php" );
  }

// second if - if there is something in the floor, flatno and status field then do this:

 elseif (!empty($_POST['Floor']) && (!empty($_POST['flatno'] && (!empty($_POST['status'])))))
{
    require 'connectdb.php';
    $result = mysqli_query($con,"SELECT * FROM issuelog WHERE floor='$_POST[Floor]' AND flatnumber='$_POST[flatno]' AND status='$_POST[status]'");
}   

while($row = mysqli_fetch_array($result))
  {

include( "searchoutputform.php" );
  }
endif;

// CLOSE CONNECTION TO DATABASE 
mysqli_close($con);
?>

更新:我已删除所有连接请求,因此现在只有1个!我收到以下错误:

  

解析错误:语法错误,意外T_BOOLEAN_AND,期待')(这是基于第二个if)

1 个答案:

答案 0 :(得分:2)

<强>提示

如果这两个值都在那里,你的第一个if将永远执行,那么你的elseif将不会执行。如果

,只需将你的elseif改为另一个
if (!empty($_POST['Floor']) && !empty($_POST['flatno'] && !empty($_POST['status']))
{
//...
}   

为什么会这样?这就是

的原因
   if(1==1 && 2==2)
   {
      echo "first if";
   }
   elseif(1==1 && 2==2 && 3==3)
   {
     echo "this one will not execute even though the condition is true, due to elseif";
   }
   if(1==1 && 2==2 && 3==3)
   {
     echo "Now this one will work";
   }

这是一个基本的修复,但您应该简化逻辑并构建查询,然后在它们存在的情况下向其附加值。

你有一些额外的括号,你有一些额外的包括:)