未选择过滤器选项时显示所有记录

时间:2016-03-22 22:38:42

标签: php html mysql

我有一个使用php和MySQL的网站。在我的一个页面上,我有一个选择查询,其中包含一些表单传递的参数。 在我的表单上有一个<select>框:

<select name="courseCode">
    <option value="" selected>Show All</option>
    <option value="1">Emergency First Aid</option>
    <option value="2">Advanced Burns Training</option>
    <option value="3">Fire Safety</option>
    <option value="4">Environmental Awareness</option>
</select>

还有一些选项可以设置从日期到日期。

当我使用Show All选项时,我面临的问题是在我的php中,它没有获取所有记录,我不确定写它的最佳方式

<?php
    $min = "2016-01-01"; // Default search criteria for 
    $max = "2016-12-31"; // date ranges to search
    $code;

    if (isset($_GET['submit'])) {
        $min = $_GET['min'];
        $max = $_GET['max'];
        $code = $_GET['courseCode'];
    }

    $sql = "SELECT tblcourses.Course_Name, tblclasses.Class_OnDate, tblclasses.Class_TimeStart, tblclasses.Class_TimeFinish, Class_MaxAllowed
            FROM tblcourses INNER JOIN tblclasses ON tblcourses.Course_Code = tblclasses.Course_Code
            WHERE (tblclasses.Class_OnDate Between '$min' and '$max') AND (tblclasses.Course_Code = '$code')
            ORDER BY tblclasses.Class_OnDate ASC;";

3 个答案:

答案 0 :(得分:1)

我认为最简单的方法就是

if ($code == '')
    $sql = "SELECT without WHERE";
else
    $sql = "SELECT with WHERE";

顺便说一下,你真的应该把这作为一个准备好的声明,这意味着你需要使用mysqliPDO(无论如何你都应该这样做。)

答案 1 :(得分:1)

<?php
    $min = "2016-01-01"; // Default search criteria for 
    $max = "2016-12-31"; // date ranges to search
    $code;

    if (isset($_GET['submit'])) {
        $min = $_GET['min'];
        $max = $_GET['max'];
        $code = $_GET['courseCode'];
    }

    if($code){  
      $sql = "SELECT tblcourses.Course_Name, tblclasses.Class_OnDate, tblclasses.Class_TimeStart, tblclasses.Class_TimeFinish, Class_MaxAllowed
            FROM tblcourses INNER JOIN tblclasses ON tblcourses.Course_Code = tblclasses.Course_Code
            WHERE (tblclasses.Class_OnDate Between '$min' and '$max') AND (tblclasses.Course_Code = '$code')
            ORDER BY tblclasses.Class_OnDate ASC;";
    } else{
       $sql = "SELECT tblcourses.Course_Name, tblclasses.Class_OnDate, tblclasses.Class_TimeStart, tblclasses.Class_TimeFinish, Class_MaxAllowed
            FROM tblcourses INNER JOIN tblclasses ON tblcourses.Course_Code = tblclasses.Course_Code
            ORDER BY tblclasses.Class_OnDate ASC;";
    }

希望它有所帮助:)

答案 2 :(得分:1)

试试这个;)

<?php

$min = "2016-01-01"; // Default search criteria for 
$max = "2016-12-31"; // date ranges to search
$code;
$filterWithCode = '';

if(isset($_GET['submit'])){
  $min = $_GET['min'];
  $max = $_GET['max'];
  $code = $_GET['courseCode'];
  if($code){
    $filterWithCode = " AND (tblclasses.Course_Code = '$code') ";
  }
}


$sql = "SELECT tblcourses.Course_Name, tblclasses.Class_OnDate, tblclasses.Class_TimeStart, tblclasses.Class_TimeFinish, Class_MaxAllowed
            FROM tblcourses INNER JOIN tblclasses ON tblcourses.Course_Code = tblclasses.Course_Code
            WHERE (tblclasses.Class_OnDate Between '$min' and '$max') $filterWithCode
            ORDER BY tblclasses.Class_OnDate ASC;";