使用下拉菜单查询数据库并返回同一页面或另一页面上的结果

时间:2012-09-27 16:04:42

标签: php mysql html

我有一个包含一些PHP的页面,如下所示:

<table>
    <thead>
        <tr>
            <th class="wheniwant">Date</th>
            <th class="wheniwant">Income Amount</th>
            <th class="wheniwant">Expense Amount</th>
        </tr>
    </thead>

    <?php
    //DB CONNECTION

    $varDatePaid = ""; $varIncomePaid =""; $varExpensePaid = "";

    $sql = mysql_query( 
        "
            SELECT DATE_FORMAT(`date_paid`, '%Y-%m') `date_paid`,
            SUM(CASE WHEN `categoryType` = 'Income' THEN `amount_paid` END) `IncomeAmount`,
            SUM(CASE WHEN `categoryType` = 'Expense' THEN `amount_paid` END) `ExpenseAmount`
            FROM `accounting`
            GROUP BY DATE_FORMAT(`date_paid`, '%Y-%m')
        "
     );


    while($row = mysql_fetch_array($sql))
        {
            $varDatePaid = $row['date_paid'];
            $varIncomePaid = $row['IncomeAmount'];
            $varExpensePaid = $row['ExpenseAmount'];                        
    ?>


    <tr>
        <td><?php echo $varDatePaid; ?></td>
        <td><?php echo $varIncomePaid; ?></td>
        <td><?php echo $varExpensePaid; ?></td>
        </tr>

    <?php   

        }
    ?>
</table>

返回如下表格:

Screenshot

我想添加一些内容:

$sql_query = "SELECT id, DATE_FORMAT(`date_paid`, '%Y') AS year FROM accounting GROUP BY year ORDER BY year DESC";


$result = mysql_query($sql_query) or die(mysql_error());
while ($row = mysql_fetch_array($result)){
echo '<option value='. $row['year'] . '>'. $row['year'] . '</option>';

创建某种过滤器以将结果限制为特定年份。如何在不离开页面的情况下执行此操作?

2 个答案:

答案 0 :(得分:0)

您还没有真正提供足够的信息或您尝试过的任何内容。

你需要一个HTML表单,其上有<select>个框,它们有一个唯一的ID,所以你可以通过$ _POST获取PHP中的值,然后将它们输入到SQL中的“在哪里“陈述。

E.g。

<form action="script.php" method="post">
    <select id="filter">
        <option value="value1">Value 1</option>
        <option value="value2">Value 2</option>
        <option value="value3">Value 3</option>
   </select>
   <input type="submit" value="Filter">
</form>

在script.php中:

<?php
 // DB connect
 $filter = $_POST['filter'];
 $query = "
                  SELECT *
                  FROM TableName
          WHERE field_to_filter = '$filter'
          ORDER BY something ASC
                  "
 //etc
 ?>

请注意,这是一个非常简短的例子。根据您的具体操作,它会有很大差异。此外,这不会考虑从表单接受用户输入并将其传递给SQL的任何安全问题。

如果script.php是当前页面,按下提交按钮只会刷新页面,并且过滤器已就位。还需要更多代码,例如确保选择框的前一个选择仍处于活动状态。如果你不想刷新页面,那么就需要像jQuery这样的东西,如果你之前没有使用它会增加另一层次的复杂性。

答案 1 :(得分:0)

首先在html中定义下拉列表,并在所选值更改时提交:

<form id="myForm" action="samePage.php" method="post">
<select id="mySelection" name="mySelection" onChange="$('#myForm').submit();">
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
</select>
</form>

并修改php中的查询以按所选值过滤:

$sql = mysql_query(  
                      "
                      SELECT *
                      FROM TableName
                      where ColumnName like '%" . mysql_real_escape_string($_POST['mySelection']) . "%'
              ORDER BY something ASC
                      "
                     );

我没有测试代码,但你应该从这里得到这个想法。我假设您使用jquery作为 $('#myForm')。submit()脚本。