2016-03-22 2 views
1

У меня есть веб-сайт с использованием 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, когда Показать все опции используется, он вообще не получает все записи, и я не уверен, что лучший способ написать это

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

ответ

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;"; 
+0

я закодированы это похоже на то, что вы предположили, что это в какой-то момент, но чувствовал, что этот вопрос может должно быть обычным делом среди разработчиков, и поэтому я думал, что упускаю из виду функцию или трюк, чтобы облегчить ситуацию – smally

1

Я думаю, Проще всего было бы что-то вроде

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

Кстати, вы действительно должны делать это как подготовленное заявление, которое означает, что вы должны использовать либо mysqli или PDO (которые вы должны делать в любом случае.)

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

надеюсь, что это помогает :)

Смежные вопросы