Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Ankieta + wykres
Forum PHP.pl > Forum > Przedszkole
amatour
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
Sky_walker
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
thek
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ć.
zordon
do wykresów jest całkiem fajna biblioteka - libchart. do wyboru, do koloru. polecam
amatour
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.  
thek
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
askone
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
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.