Php 未选择筛选选项时显示所有记录

Php 未选择筛选选项时显示所有记录,php,html,mysql,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">

我有一个使用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>

全部展示
紧急急救
高级烧伤训练
消防安全
环境意识
还提供了设置起始日期和截止日期的选项

我面临的问题是在我的php中,当使用ShowAll选项时,它不会获取所有记录,我也不确定编写它的最佳方法

<?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;";

我认为最简单的方法是

if ($code == '')
    $sql = "SELECT without WHERE";
else
    $sql = "SELECT with WHERE";
顺便说一句,您真的应该作为一个准备好的语句来做这件事,这意味着您需要使用
mysqli
PDO
(您无论如何都应该这样做)。

试试看

<?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;";
    }
试试这个;)


我曾经编写过类似于您在某一点上建议的代码,但我觉得这个问题在开发人员中可能很常见,因此我认为我错过了一个使事情更简单的函数或技巧
<?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;";