如果只有

时间:2017-03-18 02:20:01

标签: php mysql

我试图创建一个简单的搜索页面,从表单中获取值。在该表格中,我有特定日期的字段,两个字段用于选择两个日期以在两个选定日期之间进行搜索,以及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(isset())替换if ($_POST['variable']) !==NULL并得到相同的结果。谢谢!

按要求添加表单代码

<form action="#" method="POST">
    <div class="form-group">
    <label for="date_search_on">Show results sent on</label>
     <input type="date" id="date_search_on" class="form-control" name="date_search_on">
     </div>

     <div class="form-group">
        <h3>Show sent</h3>
       <label for="date_search_after">After</label>
       <input type="date" id="date_search_after" class="form-control" name="date_search_after" >
     </div>

     <div class="form-group">
       <label for="date_search_before">and before</label>
       <input type="date" id="date_search_before" class="form-control" name="date_search_before">
     </div>

     <div class="form-group">
     <label for="id"> ID</label>
       <input type="text" id="id" class="form-control" name="id_search">
     </div>

     <br>
     <input type="submit" value="Search" class="btn btn-primary" name="submit"></input> 
  </form>

3 个答案:

答案 0 :(得分:-1)

尝试:

if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {}

检查您的脚本是否已发布。

如果传递了其他数据,$ _POST将不为空,否则为空。

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

if ( !empty($_POST) ) {}

答案 1 :(得分:-1)

使用

,而不是 isset
if (!empty($_POST['date_search_on']))

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

请注意,此测试为空,因为如果该值不为空,则要使用该值。

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

答案 2 :(得分:-1)

错误引发,因为当date_search_on为空时,db查询将lead_date的值与''进行比较,然后因为它找不到行,所以首先计算为true。

您应该先更改if的条件检查,以便在if为空时让其测试其他date_search_on。所以改变你的$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'; 
}