Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Ankieta + wykres
amatour
post 26.10.2009, 10:19:30
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 26.10.2009

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


Witam, mam taki oto problem:

Ankieta (5 możliwości wyboru w formularzu) ma pobierać z pliku informację o ilości oddanych głosów na poszczególne opcję, zwiększać ją o 1 i zapisać do pliku "glosy.txt". Po tym ma się uruchomić plik "wykres.php" który narysuje wykres na podstawie informacji z wyżej wymienionego pliku txt. Na początek ilość głosów ma odpowiadać długości słupka wykresu. I do tego miejsca myślę, że raczej sobie poradzę. Problem zaczyna się przy modyfikacji tego wykresu - wykres ma rysować słupki w proporcjach (tzn. żeby nie było opcji, że słupek rośnie tak mocno, że poszerza okno itp.), procentowo. Pomożecie? ;d
Go to the top of the page
+Quote Post
Sky_walker
post 26.10.2009, 10:43:14
Post #2





Grupa: Zarejestrowani
Postów: 214
Pomógł: 23
Dołączył: 26.09.2005

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


Jeśli wykres ma wyglądać ta:
Kod
[----------------- 25%
[---------------------------------- 50%

(czyli ma być poziomy)
To:
  1. $suma_glosow = $glosyA+$glosyB;
  2.  
  3. $dlugoscA=round($glosyA/$suma_glosow *100);
  4. $dlugoscB=round($glosyB/$suma_glosow *100);
  5.  
  6. $szerokosc_wykresu = 300;
  7. $dlugoscA = $dlugoscA/100 * $szerokosc_wykresu;
  8. $dlugoscB = $dlugoscB/100 * $szerokosc_wykresu;


I masz długość (czy tam szerokość) słupków wykresów - dopinasz do tego GD żeby wygenerować wykres i gotowe smile.gif
Całość opiera się na operowaniu na procentach do wyznaczenia długości słupków smile.gif


ps. nawet jeśli zrobiłem jakiegoś buraka to to i tak powinno poddać Ci pomysł jak to zrealizować smile.gif


--------------------
Pomogłem? Kliknij poniżej.
Dzięki! :D
Go to the top of the page
+Quote Post
thek
post 26.10.2009, 11:32:53
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Ogólne założenia - patrz post wyżej. To jak będzie proporcja wyglądać zależy od tego co potraktujesz jako "cała szerokość dostępna".
Jeśli będzie to 100% to:
słupek = (ilość_głosów_oddanych/ilość_wszystkich)*szerokość_dostępna

Ale może też to być widoczne jako:
szerokość_dostępna = największy procent oddanych.
Wtedy musisz znaleźć opcję na którą oddano najwięcej głosów i o na otrzyma całą dostępną szerokość. Reszta proporcjonalnie, czyli:
słupek = (ilość_głosów_oddanych/ilość_głosów_najpopularniejszej_opcji)*szerokość dostępna
Jak widzisz... Wszystko jest proste gdy pomyśleć.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
zordon
post 26.10.2009, 11:32:54
Post #4





Grupa: Zarejestrowani
Postów: 358
Pomógł: 78
Dołączył: 4.11.2008
Skąd: Kraków

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


do wykresów jest całkiem fajna biblioteka - libchart. do wyboru, do koloru. polecam
Go to the top of the page
+Quote Post
amatour
post 28.10.2009, 10:17:27
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 26.10.2009

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


hmmm owszem pomogło mi to w określeniu proporcji itd. Tyle, że teraz niestety mam problem z samym narysowaniem wykresu... co bym nie robił to zawsze pojawia się tylko jeden słupek. Oto co udało mi się wypocić na ten temat (dodam tylko, że muszę to zrobić za pomocą właśnie takich komend jakie widnieją na dole, nie mam dołączać żadnych bibliotek wykresów itp.):

  1. <?php
  2.  
  3. $plik = file("glosy.txt");
  4. $tab = explode(":",$plik[0]);
  5.  
  6. for ($i=1; $i<=3; $i++) {
  7. $glos[$i] = $tab[$i-1];
  8. }
  9.  
  10.  
  11. $suma_glosow = 0;
  12. for ($i=1; $i<=3; $i++) {
  13. $suma_glosow = $suma_glosow + $glos[$i];
  14. }
  15.  
  16.  
  17. for ($i=1; $i<=3; $i++) {
  18. $dlugosc[$i] = round($glos[$i]/$suma_glosow*100);
  19. }
  20.  
  21.  
  22. $szerokosc_wykresu = 300;
  23. for ($i=1; $i<=3; $i++) {
  24. $dlugosc[$i] = $dlugosc[$i]/100*$szerokosc_wykresu;
  25. }
  26.  
  27. $wysokosc = 10;
  28.  
  29. for ($i=1; $i<=3; $i++) {
  30. $graph = ImageCreate($dlugosc[$i], $wysokosc);
  31. $czarny = ImageColorAllocate($graph,0,0,0);
  32. $bialy = ImageColorAllocate($graph,255,255,255);
  33. ImageFill($graph,0,0,$czarny);
  34. Header("Content-type: image/png");
  35. ImagePng($graph);
  36. ImageDestroy($graph);
  37. }
  38.  
  39. ?>
  40.  
Go to the top of the page
+Quote Post
thek
post 28.10.2009, 10:53:24
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Zadaj sobie pytanie co robić chcesz. Jeden obrazek png na którym są wszystkie wyniki czy może coś innego? Bo jeśli to pierwsze, to czy aby nie powinno być tak, że każdy z pasków prostokątnych (obrazujących głosy w ankiecie) umieszczasz w określonych współrzędnych całego obrazu? winksmiley.jpg


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
askone
post 28.10.2009, 11:05:33
Post #7





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

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


Hej

Zawsze możesz skorzystać z gotowych rozwiązań, ewentualnie ucząc się lub modyfikując je do własnych potrzeb winksmiley.jpg

Linki (php):
link1
link2
link3

Linki (jquery):
link1

Pozdrawiam


--------------------
Kliknij jeśli moja odpowiedź Ci pomogła.
askone.pl
Go to the top of the page
+Quote Post

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: 14.07.2025 - 15:50