Php if-else语句首先运行if-only

Php if-else语句首先运行if-only,php,mysql,Php,Mysql,我试图创建一个简单的搜索页面,从表单中获取值。在这种形式中,我有一个特定日期的字段,两个字段选择两个日期在两个选定日期之间搜索,以及一个ID字段按ID搜索。运行代码时,仅执行第一个if语句并按预期运行,但是,如果我在该字段中保留该日期值为空,并在其后的字段中设置一个值,则代码不会执行任何操作,并向我提供已处理的错误消息,您的搜索将没有结果 if (isset($_POST['date_search_on'])) { $search_on = $_POST['date_search_

我试图创建一个简单的搜索页面,从表单中获取值。在这种形式中,我有一个特定日期的字段,两个字段选择两个日期在两个选定日期之间搜索,以及一个ID字段按ID搜索。运行代码时,仅执行第一个if语句并按预期运行,但是,如果我在该字段中保留该日期值为空,并在其后的字段中设置一个值,则代码不会执行任何操作,并向我提供已处理的错误消息,您的搜索将没有结果

    if (isset($_POST['date_search_on']))
{    $search_on = $_POST['date_search_on'];
      $qry = " SELECT * FROM table WHERE date = '$search_on' "; 
      $result = mysqli_query ($con, $qry);
      if (mysqli_num_rows($result) <=0) {
                           echo 'There are no results for your search'; }
                           } // end first if

      else if (isset($_POST['date_search_after'],$_POST['date_search_before']  )) {

        $search_after = $_POST['date_search_after'];
        $search_before = $_POST ['date_search_before'];
        $qry = " SELECT * FROM table WHERE date BETWEEN '$search_after' AND '$search_before'";
        $result = mysqli_query ($con, $qry);
        if (mysqli_num_rows($result) <=0) {
                           echo 'There are no results for your search'; }
      } // end 2nd if 

       else if (isset($_POST['id_search'])) {
        $search_id = mysqli_real_escape_string($con,$_POST['id_search']);
        $qry = " SELECT * FROM table WHERE id = '$search_id'";
        $result = mysqli_query ($con, $qry);
        if (mysqli_num_rows($result) <=0) {
                           echo 'There are no results for your search'; }
       } //end 3rd if
尝试:

if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {}
检查脚本是否已发布

如果传递了其他数据,$\u POST将不会为空,否则将为空

您可以使用empty方法检查它是否包含数据

if ( !empty($_POST) ) {}
使用empty代替isset

如果未设置字段,或者如果该字段包含null、false或空字符串,则empty函数将返回true

请注意,这将测试not empty,因为如果该值不为空,则需要使用该值


数据可能正在发送,但是如果您将输入留空,则会将其设置为空。

出现此错误的原因是,当“搜索日期”为空时,db query会比较lead\u date的值,然后因为它找不到行,如果计算结果为true,则首先会出现此错误

您应该首先更改if的条件检查,以便在date_search_on为空时让它测试其他if。因此,更改$qry分配如下:

$search_on = trim($_POST['date_search_on']);
if (empty($qry)){
  $qry = " SELECT * FROM leads"; 
}else{
  $qry = " SELECT * FROM leads WHERE lead_date = '$search_on' "; 
}
$result = mysqli_query ($con, $qry);
if (mysqli_num_rows($result) <=0) {
  echo 'There are no results for your search'; 
}

您的表单输入是什么?尝试var_dump$variable;这将为您提供一个变量的输出:$\u POST['date\u search\u on'],您可以查看是否传递了任何内容。在mysqli_查询$con,$qry;添加mysqli_查询$con,$qryor dierror:.mysqli_错误$con;这将为您提供导致错误的任何错误querys@Fred-ii--这行也是错误的$search\u id=mysqli\u real\u escape\u string$\u POST['lead\u id\u search'];需要有$con:我也会使用if!设置了空的$\u POST['date\u search\u on'],而不是。即使表单中没有输入任何内容,$\u POST也会看到它。不知道那是谁,我也希望有一面旗帜来报告否决投票。修剪可能会有所帮助,但我使用了!空函数,它工作了。谢谢你的回答。
if (!empty($_POST['date_search_on']))
$search_on = trim($_POST['date_search_on']);
if (empty($qry)){
  $qry = " SELECT * FROM leads"; 
}else{
  $qry = " SELECT * FROM leads WHERE lead_date = '$search_on' "; 
}
$result = mysqli_query ($con, $qry);
if (mysqli_num_rows($result) <=0) {
  echo 'There are no results for your search'; 
}