我正在尝试创建一个表单,用户可以在其中输入信息,然后搜索与此查询匹配的表。我希望输入的信息是可选的(并非所有字段都需要完成)。如果在查询中添加了'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)
答案 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";
}
这是一个基本的修复,但您应该简化逻辑并构建查询,然后在它们存在的情况下向其附加值。
你有一些额外的括号,你有一些额外的包括:)