0

我有一个包含一些 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>

这将返回一个类似的表:

截屏

然后我想添加一些东西:

$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>';

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

4

2 回答 2

0

您没有真正提供足够的信息或您尝试过的任何东西。

您将需要一个 HTML 表单,其上的<select>框具有唯一 ID,以便您可以通过 $_POST 获取 PHP 中的值,然后在“WHERE”语句中将这些值输入到 SQL 中。

例如

<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 之类的东西,如果您以前没有使用过它,这将增加另一个级别的复杂性。

于 2012-09-27T16:08:16.077 回答
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()脚本。

于 2012-09-27T16:15:56.417 回答