Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL] statystyki pokrycia pokoi
Forum PHP.pl > Forum > PHP
ppietras86
witam
Zbudowałem system rezerwacyjny pokoi. Wszystko mi bardzo ładnie działa - wszelkie warunki spelnione jakie mi postawiono oprocz jednego.. sad.gif (Nowego.)
Mam zrobić na mojej stronie statystyki pokrycia pokoi według, dni tygodnia, miesiecy, który pokoj najczesciej jest wybierany i takie tam. NIGDY TEGO NIE ROBILEM i nie chce zaczac zle to robic (ciekawi mnie czy ma ktoś jakąś koncepcje)
Rezerwacje zapisuje mi w tabeli:

rezerwacje
- id_rezerwacji
- id_pokoju
- id_klienta
- data_od
- data_do
- ilosc_osob
- kwota
- zaliczka
- uwagi

Jak naprzyklad zrobić aby mi zliczało ile było rezerwacji w poprzednim tygodniu? Zastanawiam sie i nie bardzo wiem jak rozwiazac problem np z datami poniewaz daty sa zapisywane w formacje 2010-03-29, po drugie jak zapytanie do bazy o ilosc ma wyglądać. A może trzeba zrobic kolejną tabele w MySQL gdzie bedzie zapisywac poszczegolne informacje o rezerwacjach - jesli tak to chociaz jak ma baza taka wygladać?

Co myslicie? Jak zacząc? aby pozniej nie robic na nowo i inaczej i tracic czasu
blooregard
Zainteresuj się DATEDIFF

http://dev.mysql.com/doc/refman/5.1/en/dat...-functions.html
blawat
sql posiada funkcje count zliczajaca ilosc rekordow

np: select count(*) from tabela_testowa

zapaytanie zwroci w wyniku liczbe rekordow

cala zabawa tkwi z stworzeniu dobrych zapytan czyli jakis skyrpcik ktory bedzie zonglowal datami i jak ktos wybierze tydzien temu to automatycznie obliczy odpowiednie daty i wstawi je do warunku where w zapytaniu
ppietras86
witam
Coś tam stworzylem juz wiem jak nawet. Narazie zrobiłem generowanie wykresu zarezerwowanych pokoi na podstawie dni miesiaca.
Statystyka wyświetlana jest na jednej stronie ststystyki.php - na niej znajduje sie pływająca ramka do ktorej ladowany jest sktypt stat_miesiac.php
Podaje kod:
  1. <?php
  2. $miesiac = $_GET['miesiac'];
  3.  
  4. function gen_wykres($dane, $width = 800, $height = 250, $dist = 10, $tlo = 'grad.jpg', $font = 'verdana.ttf')
  5. {
  6. $wykres = imagecreatetruecolor($width, $height);
  7. $bcg_image = imagecreatefromjpeg($tlo);
  8. $background = imagecolorat($bcg_image, 0, imagesy($bcg_image) - 1);
  9.  
  10. imagefill($wykres, 0, 0, $background);
  11. imagecopyresampled($wykres, $bcg_image, 0, 0, 0, 0, $width, imagesy($bcg_image), imagesx($bcg_image), imagesy($bcg_image));
  12.  
  13. $count_all = array_sum($dane);
  14. $max = max($dane);
  15. $el_width = round(($width - $dist) / count($dane));
  16. $mnoznik = ($height - ($dist * 2)) / $max;
  17.  
  18. foreach ($dane as $key => $value)
  19. {
  20. $col = round(255 - (150 / count($dane)) * $i);
  21. $colors[$key] = imagecolorallocate($wykres, $col, 200, 0);
  22. $text_color[$key] = imagecolorallocate($wykres, 0, 0, 0);
  23.  
  24. $top = $height - ($dist) - $value * $mnoznik;
  25. $left = $i * $el_width + $dist;
  26.  
  27. imagefilledrectangle($wykres, $left, $top, $left + $el_width - $dist, $height - $dist, $colors[$key]);
  28. imagettftext($wykres, 10, 90, $left + $el_width / 2, $height - $dist - 2, $text_color[$key], $font, $key.' - '.round($value * 100 / $count_all, 2).' % Ilosc: '.$value);
  29.  
  30. $i++;
  31. }
  32.  
  33. return $wykres;
  34. }
  35.  
  36. include_once('db.php');
  37. $rok = date('Y');
  38. $miesiac =date('m');
  39.  
  40. for ($i=1; $i<=31; $i++)
  41. {
  42.  
  43. $stmt = "SELECT COUNT(id_rezerwacji) from rezerwacje
  44. where (data_od = '".$rok."-".$miesiac."-".$i."')";
  45. $result = $db_handle->query($stmt);
  46. $row = $result->fetch_array();
  47. $dane[$i] = $row[0];
  48.  
  49. }
  50.  
  51. header('Content-Type: image/png');
  52. $wykres = gen_wykres($dane);
  53. imagepng($wykres);
  54. echo $rok;
  55.  
  56. ?>


Tak stworzony skrypt ładnie wyświetla mi wykres o rezerwacjach z miesiaca.
Jednak chcialbym aby była możliwość wybierania miesiecy z formularza i aby generował sie na nowo wykres z miesiaca który wybraliśmy.
Chciałem ten formularz wstawić do skryptu stat_miesiac.php gdzie znajduje sie całość generowania wykresu. Przypominam iż strona statystyki.php słuzy do oglądania wykresów które znajduja sie w iframe.
Jednak gdy wstawiam formularz do skryptu: podaje kod

  1. <?php
  2. echo "Wybierz miesiąc
  3. <form action=stat_miesiac.php>
  4. <select name=miesiac>
  5. <option value=1>Styczeń</option>
  6. <option value=2>Luty</option>
  7. <option value=3>Marzec</option>
  8. <option value=4>Kwiecień</option>
  9. <option value=5>Maj</option>
  10. <option value=6>Czerwiec</option>
  11. <option value=7>Lipiec</option>
  12. <option value=8>Sierpień</option>
  13. <option value=9>Wrzesień</option>
  14. <option value=10>Październik</option>
  15. <option value=11>Listopad</option>
  16. <option value=12>Grudzień</option>
  17. </select>
  18. <input type="submit" value="Wyślij">
  19. </form>";
  20.  
  21. $miesiac = $_GET['miesiac'];
  22.  
  23. function gen_wykres($dane, $width = 800, $height = 250, $dist = 10, $tlo = 'grad.jpg', $font = 'verdana.ttf')
  24. {
  25. $wykres = imagecreatetruecolor($width, $height);
  26. // cala reszta skryptu w niezmienionej formie - nie wstawilem bo to bedzie zbyt rozlazle


Jesli chce wstawic ów formularz do tego skryptu to wyskakuje mi błąd
Warning: Cannot modify header information - headers already sent by
a ponizej nie ma wykresu który mialby sie wyswietlic a jest za to ciag jakich dziwnych znaków. Jednak sam formularz jest widoczny
Co zrobić aby mi wyswietlalo formularz w html oraz wykres wygenerowany przez biblioteke GD??

A może ma ktoś inny sposób? W sumie mozna by formularz umieścic na stronie statystyki.php ale wtedy musialbym w action wskazac skrypt generujacy wykres i wynikiem bedzie przeniesienie mnie na strone sktyptu z wykresem - jednak ja chcialbym wtedy wykres widziec na stronie głównej. Nie wiem czy sie da wysłać formularz do dwoch skryptów sad.gif Zreszta nie bede tutaj teraz mącił w tym poście.
Prosze o pomoc jesli chodzi o ten nagłowek. Co zrobic aby mi wyświetlalo formularz i wykres z GD??
blawat
w skyrpcie stat_miesiac.php w lini 51 wysylasz naglowek: header('Content-Type: image/png');

wszystkie naglowki musza byc wyslane przed wyswietleniem chocby jednej lini html'a

w twoim wypadku tak nie jest gdyz strona statystyki.php wyswietla wczesniej kod html

  1. echo "Wybierz miesiąc...


musisz tak dopracowac aby wszystko mialo rece i nogi - najlepeije wygenerowany obrazek includuj a nie generuj bezposrednio w kodzie strony czyli:

robisz plik. wykres.php ktory odbiera jakies tam parametry zwiazane z data itp i generujesz htamla gdzie w znaczniku <img src=""/> podajesz namairy na ten skrypt smile.gif i dziala smile.gif
ppietras86
Cytat(blawat @ 1.04.2010, 19:33:20 ) *
w skyrpcie stat_miesiac.php w lini 51 wysylasz naglowek: header('Content-Type: image/png');

wszystkie naglowki musza byc wyslane przed wyswietleniem chocby jednej lini html'a

w twoim wypadku tak nie jest gdyz strona statystyki.php wyswietla wczesniej kod html

  1. echo "Wybierz miesiąc...


musisz tak dopracowac aby wszystko mialo rece i nogi - najlepeije wygenerowany obrazek includuj a nie generuj bezposrednio w kodzie strony czyli:

robisz plik. wykres.php ktory odbiera jakies tam parametry zwiazane z data itp i generujesz htamla gdzie w znaczniku <img src=""/> podajesz namairy na ten skrypt smile.gif i dziala smile.gif



Dzieki ale jak narazie mam ten sam błąd. Mozesz jaśniej? bo nie wiem czy rozumiem.

Moim zamierzeniem było przeładowywać tylko strony umieszczone w pływających ramkach. (moze to cos ci podpowie)
Chciałbym mieć na stronie ststystyki.php kilka pływających ramek w których sa wykresy i formularze z wyborami dat. Poprostu po wybraniu daty i kliknieciu wyslij chcialem aby skrypt stat_miesiac przeładowal sie w pływającej ramce i pokazał poprawny wykres. Dalej sie z tym mecze - najgorsze to ze nie umiem Ajaxa i kombinuje jak koń pod góre z tym PHP:(

Niestety jesli wstawie przed formularzem w html linijke
header('Content-Type: image/png');
to nie wyświetli mi formularza a jak znowu wstawie na odwrót że najpierw formularz pozniej nagłówek to znowu pokazuje formularz a obrazka juz nie sad.gif(



Juz sobie poradziłem smile.gif))) Całkiem inny i prostyszy sposob niż ty podałes. Ale dzieki za zaangażowanie smile.gif
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.