Mam stronę z jakimś PHP, która wygląda tak:

<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>

Zwraca tabelę taką jak:

Screenshot

Chcę wtedy coś dodać:

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

Stworzyć jakiś filtr ograniczający wynik do konkretnego roku. Jak to zrobić bez opuszczania strony?

0
angus 27 wrzesień 2012, 20:04

2 odpowiedzi

Najlepsza odpowiedź

Najpierw definiujesz menu rozwijane w html i przesyłasz je, gdy zmieni się wybrana wartość:

<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>

I modyfikujesz zapytanie w php, aby filtrować według wybranej wartości:

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

Nie testowałem kodu, ale powinieneś zacząć od tego pomysłu. I założyłem, że używasz jquery dla skryptu $('#myForm').submit().

0
27 wrzesień 2012, 23:31

Tak naprawdę nie podałeś wystarczającej ilości informacji lub czegokolwiek, czego próbowałeś.

Będziesz potrzebował formularza HTML z polami <select>, które mają unikalny identyfikator, dzięki czemu możesz pobrać wartości w PHP przez $_POST, a następnie wprowadzić je do SQL w instrukcji „WHERE” .

Na przykład.

<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>

W script.php:

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

Uwaga, to bardzo krótki przykład z mojej głowy. Będzie się bardzo różnić w zależności od tego, co dokładnie chcesz zrobić. Dodatkowo nie uwzględnia to żadnych problemów bezpieczeństwa związanych z przyjmowaniem danych wejściowych użytkownika z formularzy i przekazywaniem ich do SQL.

Jeśli bieżąca strona to script.php, naciśnięcie przycisku przesyłania spowoduje po prostu odświeżenie strony z zainstalowanym filtrem. Trochę więcej kodu będzie potrzebne do takich rzeczy, jak upewnienie się, że pole wyboru ma nadal aktywne poprzednie zaznaczenie. Jeśli nie chcesz odświeżać strony, wymagane będzie coś takiego jak jQuery, które doda kolejny poziom złożoności, jeśli wcześniej go nie używałeś.

0
MatthewMcGovern 27 wrzesień 2012, 20:14