Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Rysowanie wykresu czasu w PHP i HTML
Bejkrools
post 4.10.2013, 12:20:33
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 15.11.2012

Ostrzeżenie: (0%)
-----


Witam, podsuńcie mi proszę jakiś pomysł na zaznaczenie czegoś na osi czasu. Rysujemy pionową oś czasu, od 9 do 21, z podziałką np. co pół godziny. W bazie mam teraz w rekordach pola [od] i [do]. I teraz jak przedstawić dane w sposób jak na ilustracji? Niebieskie fragmenty przerywanej linii oznaczają właśnie okresy od - do.

Go to the top of the page
+Quote Post
buliq
post 4.10.2013, 12:24:36
Post #2





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


ale w czym? PHP i generowany obrazek czy JS?


--------------------
KTOŚ TU PACZY???

Kompedium wiedzy
Go to the top of the page
+Quote Post
SmokAnalog
post 4.10.2013, 12:35:46
Post #3





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Jeśli z animacją, to canvas. Jeśli bez, to PHP GD.
Go to the top of the page
+Quote Post
Kshyhoo
post 4.10.2013, 17:25:45
Post #4





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Cytat(Bejkrools @ 4.10.2013, 13:20:33 ) *
W bazie mam teraz w rekordach pola [od] i [do].

Pokaż te dane.


--------------------
Go to the top of the page
+Quote Post
Bejkrools
post 4.10.2013, 21:28:25
Post #5





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 15.11.2012

Ostrzeżenie: (0%)
-----


Już prawie prawie, ale...

w docelowym miejscy wyświetlam:

  1. <img src="wykres_obsluga.php" />


czyli...

  1. <?php
  2. $image=imagecreatetruecolor(780,5);
  3. $white=imagecolorallocate($image,255,255,255);
  4. $red = imagecolorallocate($image, 255, 0, 0);
  5. imagefill($image,0,0,$white);
  6.  
  7. $zapytanie = mysql_query("SELECT * FROM tabela");
  8. if(mysql_num_rows($zapytanie) > 0)
  9. {
  10. while($u = mysql_fetch_assoc($zapytanie))
  11. {
  12. $x1 = ile_minut_minelo_od_9($u["czas_start"]);
  13. $x2 = ile_minut_minelo_od_9($u["czas_stop"]);
  14. imagefilledrectangle($image, $x1, 0, $x2, 3, $red);
  15. }
  16. }
  17.  
  18. header("Content-type: image/png");
  19. imagepng($image);
  20. ?>


Niestety, przeglądarka pokazuje pęknięty obrazek, więc coś jest nie tak. Sama pętla wydaje się prawidłowo dawać dane bo np:

  1. echo ile_minut_minelo_od_9($u["czas_start"])."-";
  2. echo ile_minut_minelo_od_9($u["czas_stop"])."<br>";


daje wyniki:

287-294
296-395
399-433
436-465
471-476
476-482

czyli jak najbardziej takie, jakie są potrzebne do określenia współrządnych.

Ten post edytował Bejkrools 4.10.2013, 21:28:56
Go to the top of the page
+Quote Post
nospor
post 4.10.2013, 21:37:37
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Pekniety obrazek?? Moze bys tak wyrazal sie bardziej precyzyjniej?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Bejkrools
post 4.10.2013, 21:43:42
Post #7





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 15.11.2012

Ostrzeżenie: (0%)
-----


hmm...


Jak zakomentuje linie 7-16 to prawidłowo wyświetla się białe pole w odpowiednich rozmiarach.

Ten post edytował Bejkrools 4.10.2013, 21:46:25
Go to the top of the page
+Quote Post
SmokAnalog
post 4.10.2013, 21:54:07
Post #8





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Żeby wyłapać jaki to błąd, zakomentuj tę linię:
  1. //header("Content-type: image/png");

a następnie otwórz wykres_obsluga.php w przeglądarce. Wyświetli Ci się błąd. Popraw go i odśwież znowu. Jak zobaczysz same dziwne krzaczki to będzie znaczyło, że błąd został naprawiony. Wtedy możesz znowu odkomentować:
  1. header("Content-type: image/png");

I powinno śmigać smile.gif
Go to the top of the page
+Quote Post
Bejkrools
post 4.10.2013, 22:46:46
Post #9





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 15.11.2012

Ostrzeżenie: (0%)
-----


faktycznie, nie miałem include. Poprawiłem, ale dalej grafika jest uszkodzona i się nie wyświetla.

  1. <?php
  2. $image=imagecreatetruecolor(780,5);
  3. $white=imagecolorallocate($image,255,255,255);
  4. $red = imagecolorallocate($image, 255, 0, 0);
  5. imagefill($image,0,0,$white);
  6.  
  7. include "connection.php";
  8. include "functions.php";
  9. connection_local();
  10.  
  11. $zapytanie = mysql_query("SELECT * FROM tabela");
  12. if(mysql_num_rows($zapytanie) > 0)
  13. {
  14. while($u = mysql_fetch_assoc($zapytanie))
  15. {
  16. $x1 = ile_minut_minelo_od_9($u["czas_start"]);
  17. $x2 = ile_minut_minelo_od_9($u["czas_stop"]);
  18. imagefilledrectangle($image, $x1, 0, $x2, 3, $red);
  19. }
  20. }
  21.  
  22. header("Content-type: image/png");
  23. imagepng($image);
  24. ?>


jak dodam echo przez $x1 i $x2 wyświetla się prawidłowy ciąg znaków, co oznacza, że współrzędne są prawidłowo obliczane i przekazywane przez funkcje w postaci zwykłych liczb całkowitych, mniejszych niż szerokość $image.

Wygląda to tak, jakby biblioteka miała problem z instrukcjami w pętli. Może ktoś przetestować to dla podanych wartości?

OD DO
287 294
296 395
399 433
436 465
471 476
476 482

Ewentualnie jeszcze to jest funkcja. Prawidłowe dane wejściowe to dowolna data z godziną pomiędzy 9:00 a 21:00.

  1. function ile_minut_minelo_od_9($czas)
  2. {
  3. $czas = date("H:i:s",strtotime($czas));
  4. $czas_rozbicie = explode(":", $czas);
  5. $minuty = (($czas_rozbicie[0]*60)+$czas_rozbicie[1])-540;
  6. return $minuty;


Ten post edytował Bejkrools 4.10.2013, 22:48:11
Go to the top of the page
+Quote Post
SmokAnalog
post 4.10.2013, 22:48:38
Post #10





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Przeczytaj jeszcze raz mój poprzedni post i zastosuj się do niego.
Go to the top of the page
+Quote Post
Bejkrools
post 4.10.2013, 22:53:34
Post #11





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 15.11.2012

Ostrzeżenie: (0%)
-----


Cytat
�PNG  IHDR g��ySIDATh���1� @���y-L,�Ll���%��$0CU�<^1�:��O;���Z�M����H���GF@�Hh��ܙ IEND�B`�


tak aktualnie serwer php interpretuje plik z kodem php, z komentarzem przy header. Po usunięciu komentarza problem nie ustąpił. Zrobiłem to zanim napisałem poprzedni post.

Go to the top of the page
+Quote Post
SmokAnalog
post 4.10.2013, 22:56:16
Post #12





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


To upewnij się czy nie masz żadnych znaków po zamknięciu <?php ... ?>. A dla takich skryptów jak obrazki, najlepiej wcale nie zamykaj bloku PHP (i oczywiście otwieraj go zaraz na początku pliku.
Go to the top of the page
+Quote Post
Bejkrools
post 4.10.2013, 23:10:37
Post #13





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 15.11.2012

Ostrzeżenie: (0%)
-----


Nie mam na początku żądnych pustych znaków, plik zaczyna się otwarciem bloku php, usunąłem też zamknięcie bloku. Nie pomogło :-(



Jeżeli w pętli zablokuje tylko wywołanie imagefilledrectangle to też nic nie pomaga. Dopiero blokada wywołania całej pętli wznawia poprawne wyświetlanie (białego, pustego pola). Jestem pewien, że biblioteka działa prawidłowo, bo wywołanie imagefilledrectangle ze stałymi parametrami (poza pętlą mysql) ale z warunkiem, że zastosuje komentarz blokowy na całej pętli, począwszy od zapytania mysql..

Ten post edytował Bejkrools 4.10.2013, 23:12:05
Go to the top of the page
+Quote Post
SmokAnalog
post 4.10.2013, 23:15:35
Post #14





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Te krzaczki które przesłałeś wskazują na to, że w obrazku nie ma błędu jako takiego. Czyli już się pogubiłem - co teraz otrzymujesz? Zepsuty obrazek czy niepełny obrazek? Przypuszczam, że to drugie. Sprawdź dokładnie zapytanie, przetestuj wartość:

A tak naprawdę to tę instrukcję z mysql_num_rows możesz usunąć, bo i tak w środku jest tylko pętla, która przy braku wyników tak czy inaczej wykona 0 iteracji.
Go to the top of the page
+Quote Post
Bejkrools
post 4.10.2013, 23:27:15
Post #15





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 15.11.2012

Ostrzeżenie: (0%)
-----


  1. var_dump(mysql_num_rows($zapytanie));
  2. //wynik: 287294296395399433436465471476476482int(6)

  1. //wynik: 287294296395399433436465471476476482bool(false)

  1. var_dump($zapytanie);
  2. //wynik: 287294296395399433436465471476476482resource(7) of type (mysql result)


Zapytaie jest prawidłowe, wyniki są oczekiwane. Tylko działanie nie takiej, jakbym chciał...

Grafika się nie wyświetla

Ten post edytował Bejkrools 4.10.2013, 23:29:01
Go to the top of the page
+Quote Post
SmokAnalog
post 4.10.2013, 23:33:37
Post #16





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


To ja już nie wiem - z zakomentowanym image/png są krzaczki (czyli treść binarna) bez żadnych tekstowych wstawek (błędów), a z odkomentowanym obrazek i tak się nie wyświetla? Jakaś magia.

P.S. Błąd nie polega na tym, ale daj ten header jako pierwszą instrukcję, a nie tuż przed imagepng.
Go to the top of the page
+Quote Post
Kshyhoo
post 5.10.2013, 09:17:05
Post #17





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Pokaż, co trzyma zmienna $czas.


--------------------
Go to the top of the page
+Quote Post
Bejkrools
post 5.10.2013, 10:51:19
Post #18





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 15.11.2012

Ostrzeżenie: (0%)
-----


Zauważyłem, że problem bezpośrednio leży w występowaniu include. Wszystkie funkcje i łączenie z bazą zrobiłem w jednym bloku PHP i jest OK...
Go to the top of the page
+Quote Post
nospor
post 5.10.2013, 10:53:16
Post #19





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Widac jeden z plikow ktory includujesz albo ma BOM albo pluje jakims innym nieporządanym znakiem


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Bejkrools
post 5.10.2013, 11:24:04
Post #20





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 15.11.2012

Ostrzeżenie: (0%)
-----


Zgadza się, plik functions.php był formatowany "nie bez BOM" :-)
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.06.2025 - 13:01