Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: podział rekordów na tabele z wykorzystaniem listy rozwijanej
Forum PHP.pl > Forum > PHP
blusss1
Witam,
Za pomocą dwóch list rozwijanych metodą $_POST pobieram dane z bazy 'temperatura':
pobieranie danych wygląda następująco:

  1. $query='SELECT * FROM temperatura WHERE data_pom BETWEEN "'.$_POST['data'].'" AND "'.$_POST['data1'].'"';
  2. $results=mysql_query($query);


Mogę w ten sposób pobrać wszystkie rekordy pomiędzy 'data' i 'data1' i wyświetlić je za pomocą pętli:

  1. while($wynik = mysql_fetch_array($results))
  2. {
  3. echo '<tr class="t_np">';
  4. echo "<td>" . $wynik['data_pom'] . "</td>";
  5. echo "<td>" . $wynik['godz_pom'] . "</td>";
  6. echo "<td>" . $wynik['temp_wew'] . "<sup>o</sup>C</td>";
  7. echo "<td>" . $wynik['temp_zew'] . "<sup>o</sup>C</td></tr>";
  8. }


np. między data=2010-01-01, a data1=2010-01-02 pętla zwróci w jednej tabeli 48 rekordów(po 24 z każdego dnia).

chciałbym aby rekordy były oddzielone według daty (po 24 rekordy w tabeli). Jeżeli zaznaczymy w liście rozwijanej daty między 3-ma dniami, chciałbym aby utworzyły się 3 tabele po 24 rekordy. Wie ktoś jak stworzyć zapytanie do takiego polecenia?

pozdrawiam
Mchl
Prościej to chyba z poziomu PHP dzielić.
blusss1
Dokładnie, chodzi mi o warunek if else. Tabele domyślnie są już utworzone w moim kodzie. Całość wygląda następująco:

  1. <table width="600px" border="0" bgcolor="#666666" cellspacing="1" align="center">
  2. <tr>
  3. <td align="center" colspan="4">
  4. <?php
  5. echo "POMIAR TEMP " .$_POST['data']. " " .$_POST['data1']. "<br>";
  6. ?>
  7. </td>
  8. </tr>
  9. <tr>
  10. <td align="center">
  11. <p style="margin:0; padding:0;">Data_pomiaru</p>
  12. </td>
  13. <td align="center">
  14. <p style="margin:0; padding:0;">Godzina pomiaru</p>
  15. </td>
  16. <td align="center" width="100px"><p style="margin:0; padding:0;">Wewnątrz</p></td>
  17. <td align="center" width="100px"><p style="margin:0; padding:0;">Na zewnątrz</p></td>
  18. </tr>
  19. [/html]
  20. [php]<?php
  21. while($wynik = mysql_fetch_array($results))
  22. {
  23. if($wynik['temp_id']%2){
  24. echo '<tr>';
  25. }
  26. else{
  27. echo '<tr class="t_np">';
  28. }
  29. echo "<td>" . $wynik['data_pom'] . "</td>";
  30. echo "<td>" . $wynik['godz_pom'] . "</td>";
  31. echo "<td>" . $wynik['temp_wew'] . "<sup>o</sup>C</td>";
  32. echo "<td>" . $wynik['temp_zew'] . "<sup>o</sup>C</td></tr>";
  33. }
  34. ?>
  35. </table>


W pętli while oprócz wyświetlenia rekordów jest warunek który na zmianę wstawia czarno-białe rekordy. Myślę że i tu musiałbym dodać jakiś warunek przed tworzeniem całej tabeli, aby skrypt automatycznie wyłapał rekordy o tej samej dacie. Jednak nie wiem do końca jak to rozwiązaćquestionmark.gif
nospor
1) Zacznij wkoncu uzywac bbcode!
2) przenosze
blusss1
Przepraszam za to, posty oczywiście zostały już poprawione ... nadal czekam na pomysł rozwiązania ...
tehaha
rozumiem, że chcesz aby dla każdej daty była oddzielna tabelka tak?
altruista2
Po pierwsze to co robisz to jest strzał w głowę:
  1. $query='SELECT * FROM temperatura WHERE data_pom BETWEEN "'.$_POST['data'].'" AND "'.$_POST['data1'].'"';
  2. $results=mysql_query($query);
  3.  
  4. echo "POMIAR TEMP " .$_POST['data']. " " .$_POST['data1']. "<br>";

Poczytaj do poduszki smile.gif :
http://pl.wikipedia.org/wiki/Cross-site_scripting
Temat: SQL Injection Insertion
http://segfaultlabs.com/files/pdf/bezpiecz...-zagrozenia.pdf

A jeśli chodzi o sam problem:

to do zapytania dodaj:
  1. ORDER BY data_pom

przed pętlą (niby niepotrzebne, ale lepiej wszystko inicjować):
  1. $ld = -1;

i na początku pętli:
  1. if($wynik['data_pom'] != $ld) {
  2. $ld = $wynik['data_pom'];
  3. echo '</table><table>';
  4. }

Tyle smile.gif
blusss1
Dzięki już sobie poradziłem, jednak nie do końca tak jak pisał kolega wyżej:
1. Do zapytania dodać:
  1. ORDER BY data_pom

Po co dodawać to do zapytania skoro skrypt już wyświetla datę rosnąco? Poza tym jeżeli dodam to do zapytania, to dodatkowo robi się zamieszanie w godzinie pomiaru aktualnej daty i godziny nie są wyświetlane w odpowiedniej kolejności ...

2. Zmienna:
  1. $ld = -1;

oraz warunek:
  1. if($wynik['data_pom'] != $ld) {
  2. $ld = $wynik['data_pom'];
  3. echo '</table><table>';
  4. }


data_pom jest wyświetlana w formie '2010-01-29' zgodnie z powyższym warunkiem zmienna o wartości '$ld=-1' będzie zawsze różna od data_pom questionmark.gif? Czyli po każdorazowym wejściu w pętlę będzie się zamykać tabela i otwierać nowa...

Skrypt już działa, tabele są tworzone na nowo i wszystkie rekordy o tej samej dacie znajdują się razem. Jednak nie tak jak radził kolega wyżej:
  1. $ld =-1;

Gdyż to rozwiązanie nic nie dało. Zamiast tego, zastosowałem:
  1. $ld = $_POST['data'];

Poza tym warunek if jak najbardziej zadziałał. Plus za pomoc, dzięki i pozdrawiam, mam tylko jeszcze małe pytanie odnośnie zabezpieczeń, mógłbyś sprecyzować o co dokładnie chodziło z tym "strzałem w głowę"??
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.