Я пытаюсь отфильтровать некоторые данные, используя опцию раскрывающегося списка. Когда пользователь выбирает год / деление и нажимает кнопку фильтра, он предполагает прочитать все строки из базы данных, которые содержат значение. Это насколько я могу пойти, и это не сработало. Очень надеюсь, что кто-то может мне помочь.
if (isset($_GET['do']))
{
if($_GET['do'] == 'filter')
{
if( empty($_POST['key_year']))
{
redirect("list.php");
}
else
{
$_SESSION['key_year'] = $_POST['key_year'];
$_SESSION['key_division'] = $_POST['key_division'];
}
}
else if($_GET['do'] == 'clear')
{
unset($_SESSION['key_year']);
redirect("list.php");
}
else
{}
}
$limit = 10;
$page = ( isset($_GET['page']) ) ? $_GET['page'] : 1;
$end = ( isset($_GET['page']) ) ? ($limit * $_GET['page']) : $limit;
$offset = ( isset($_GET['page']) ) ? ($limit * $_GET['page']) - $limit : 0;
$start = $offset +1;
$next = $page + 1;
$prev = $page - 1;
$key_year = ( isset($_SESSION['key_year']) ) ? $_SESSION['key_year'] : '';
$key_year = ( isset($_SESSION['key_division']) ) ? $_SESSION['key_division'] : '';
$sql = "SELECT * FROM tbl_perfomance ";
$sql .= "ORDER BY `p_aid` ASC";
$sql .= " LIMIT $offset, $limit";
$rs = mysql_query($sql);
$sql2="SELECT COUNT(p_aid) AS total FROM tbl_perfomance ";
if(isset($key_year) && isset($key_division))
{
$sql2 .= "WHERE p_year LIKE '%$key_year%' AND p_division LIKE '%$key_division%'";
}
$rs2=mysql_query($sql2);
$getRec = mysql_fetch_assoc($rs2);
//total
$rowCount=$getRec['total'];
$end = ($end > $rowCount) ? $rowCount : $end;
$total_page = ceil($rowCount/$limit);
$for_start = ( $page <= 2 ) ? 1 : $page - 2;
$for_stop_tmp = $page + 2;
$for_stop = ( $for_stop_tmp > $total_page ) ? $total_page : $page + 2;
Это форма.
<form name="filter" action="list.php?do=filter" method="GET">
</label>
<label style="color:darkgreen;float:left;width:11%" align="left">
Division
<select name="key_division">
<option value="All">All</option>
<option value="ITNT">ITNT</option>
<option value="ITP">ITP</option>
</select>
</label> -->
<label style="color:darkgreen;float:left;width:11%" align="left">
Year
<select name="key_year">
<option value="all">All</option>
<option value="2014">2014</option>
<option value="2015">2015</option>
</select>
</label>
<label style="color:darkgreen;float:left;width:11%" align="left">
</label><br>
<input class="button_green" type="submit" value="Filter »" />
</form>
Я чувствую, что вы просто добавляете условия для подкачки SQL, а не для контента SQL
Попробуйте изменить свой код примерно так, чтобы у вас $sql1
а также $sql2
,
$sql = "SELECT * FROM tbl_perfomance ";
$sql2="SELECT COUNT(p_aid) AS total FROM tbl_perfomance ";
if(isset($key_year) && isset($key_division))
{
$sql2 .= "WHERE p_year LIKE '%$key_year%' AND p_division LIKE '%$key_division%'";
$sql1 .= "WHERE p_year LIKE '%$key_year%' AND p_division LIKE '%$key_division%'";
}
$sql .= "ORDER BY `p_aid` ASC";
$sql .= " LIMIT $offset, $limit";
$rs = mysql_query($sql);
$rs2=mysql_query($sql2);
$getRec = mysql_fetch_assoc($rs2);
как только вы это сделаете, откройте оба запроса и запустите их напрямую в php myadmin или любом другом инструменте mysql, чтобы убедиться, что они работают.
Других решений пока нет …