<?php /********************************************* Zapytanie bazy danych odczytujące wynik ankiety *********************************************/ include("admin/funkcje.php"); include("admin/baza.php"); // pobranie głosu z formy @$glos=@$_REQUEST['glos']; { $zapytanie="UPDATE sondy_odpowiedzi set liczba_glosow = liczba_glosow + 1 where odpowiedz = '$glos'"; $wynik = mysqli_query($mysql, $zapytanie) or die('zapytanie: '.$zapytanie.'---blad:'.mysqli_error($mysql)); }; // pobranie aktualnych wyników ankiety, niezależnie od faktu głosowania $zapytanie='select * from sondy_odpowiedzi WHERE id_sonda = ".$id_sonda."'; $wynik = mysqli_query($mysql, $zapytanie) or die('zapytanie: '.$zapytanie.'---blad:'.mysqli_error($mysql)); $ilosc_kandydatow=$wynik->num_rows; // obliczenie całkowitej liczby głosów $ilosc_glosow=0; while ($rzad=$wynik->fetch_object()) { $ilosc_glosow+=$rzad->ilosc_glosow; } $wynik->data_seek(0); // wyzerowanie wskaźnika wyniku /********************************************* Początkowe obliczenia wykresu *********************************************/ // ustawienie stałych $szerokosc=500; //szerokosc obrazka w pikselach - ta zmieści się w rozdzielczości 640x480 $lewy_margines=50; // miejsce pozostawiane po lewej stronie obrazka $prawy_margines=50; // to samo dla strony prawej $wysokosc_slupka=40; $odleglosc_slupkow=$wysokosc_slupka/2; $czcionka='arial'; $rozmiar_tytulu=16; // w stopniach $rozmiar_podstawowy=12; // w stopniach $rozmiar_maly=12; // w stopniach $wciecie_tekstu=10; //odległość lewych etykiet tekstowych od lewej krawędzi obrazka // ustawienie początkowego punktu rysowania $x=$lewy_margines+70; //miejsce narysowania bazy wykresu $y=50; //to samo $jednostka_slupka=($szerokosc-($x+$prawy_margines))/100; //jeden "stopień" wykresu // obliczenie wysokości wykresu - słupki plus przerwy plus pewien margines $wysokosc=$ilosc_kandydatow*($wysokosc_slupka+$odleglosc_slupkow)+50; /********************************************* Konfiguracja podstawowego obrazka *********************************************/ // stworzenie pustego kadru $ob=imagecreateTrueColor($szerokosc, $wysokosc); // Przydzielenie kolorów $bialy=ImageColorAllocate($ob,255,255,255); $niebieski=ImageColorAllocate($ob,0,64,128); $czarny=ImageColorAllocate($ob,0,0,0); $rozowy=ImageColorAllocate($ob,255,78,243); $kolor_tekstu=$czarny; $kolor_procentow=$czarny; $kolor_tla=$bialy; $kolor_linii=$czarny; $kolor_slupka=$niebieski; $kolor_liczb=$rozowy; // stworzenie "kadru" do rysowania ImageFilledRectangle($ob,0,0,$szerokosc-1,$wysokosc-1,$kolor_tla); // narysowanie konturów wokół kadru ImageRectangle($ob,0,0,$szerokosc-1,$wysokosc-1,$kolor_linii); // dodanie tytułu $tytul='Wyniki ankiety'; $wymiary_tytulu=ImageTTFBBox($rozmiar_tytulu, 0, $czcionka, $tytul); $dlugosc_tytulu=$wymiary_tytulu[2]-$wymiary_tytulu[0]; $tytul_x=($szerokosc-$dlugosc_tytulu)/2; // wyśrodkowanie w x $tytul_y=($y-$wysokosc_tytulu)/2+$tytul_nad_linia; // wyśrodkowanie w y ImageTTFText($ob, $rozmiar_tytulu, 0, $tytul_x, $tytul_y, $kolor_tekstu, $czcionka, $tytul); // narysowanie bazy od nieco ponad pozycją pierwszego słupka do nieco // poniżej pozycji ostatniego ImageLine($ob, $x, $y-5, $x, $wysokosc-15, $kolor_linii); /********************************************* Umieszczenie danych na wykresie *********************************************/ // Pobranie każdej linii bazy danych i narysowanie odpowiadających słupków while ($rzad=$wynik->fetch_object()) { if($ilosc_glosow>0) else $procent=0; // wyświetlenie procentów dla tej wartości $wymiary_procentow=ImageTTFBbox($rozmiar_podstawowy, 0, $czcionka, $procent.'%'); $dlugosc_procentow=$wymiary_procentow[2]-$wymiaryprocentow[0]; ImageTTFText($ob,$rozmiar_podstawowy, 0, $szerokosc-$dlugosc_procentow-$wciecie_tekstu, $y+($wysokosc_slupka/2), $kolor_procentow, $czcionka, $procent.'%'); // długość słupka dla tej wartości $dlugosc_slupka=$x+($procent*$jednostka_slupka); // narysowanie słupka dla tej wartości ImageFilledRectangle($ob, $x, $y-2, $dlugosc_slupka, $y+$wysokosc_slupka, $kolor_slupka); // narysowanie tytułu dla tej wartości ImageTTFText($ob, $rozmiar_podstawowy, 0, $wciecie_tekstu, $y+($wysokosc_slupka/2), $kolor_tekstu, $czcionka, "$rzad->kandydat"); // narysowanie konturu pokazującego 100% ImageRectangle($ob, $dlugosc_slupka+1, $y-2, ($x+(100*$jednostka_slupka)), $y+$wysokosc_slupka, $kolor_linii); // wyświetlenie liczb ImageTTFText($ob, $rozmiar_maly, 0, $x+(100*$jednostka_slupka)-50, $y+($wysokosc_slupka/2), $kolor_liczb, $czcionka, $rzad->ilosc_glosow.'/'.$ilosc_glosow); // przesunięcie do następnego słupka $y=$y+($wysokosc_slupka+$odleglosc_slupkow); } /********************************************* Wyświetlenie obrazka *********************************************/ ImagePNG($ob); /********************************************* Zwalnianie zasobów *********************************************/ ImageDestroy($ob); ?>
Mam skrypt, który ma mi tworzyć wykres na podstawie danych z sondy.
Wyskakuje mi taki problem:
Fatal error: Call to undefined function imagecreateTrueColor() in C:\Program Files\Apache Group\Apache2\htdocs\stronka\pokaz_wyniki.php on line 61
Fatal error: Call to undefined function ImageColorAllocate() in C:\Program Files\Apache Group\Apache2\htdocs\stronka\pokaz_wyniki.php on line 64
Fatal error: Call to undefined function ImageColorAllocate() in C:\Program Files\Apache Group\Apache2\htdocs\stronka\pokaz_wyniki.php on line 65
Fatal error: Call to undefined function ImageColorAllocate() in C:\Program Files\Apache Group\Apache2\htdocs\stronka\pokaz_wyniki.php on line 66
Fatal error: Call to undefined function ImageColorAllocate() in C:\Program Files\Apache Group\Apache2\htdocs\stronka\pokaz_wyniki.php on line 67
Fatal error: Call to undefined function ImageFilledRectangle() in C:\Program Files\Apache Group\Apache2\htdocs\stronka\pokaz_wyniki.php on line 77
Fatal error: Call to undefined function ImageRectangle() in C:\Program Files\Apache Group\Apache2\htdocs\stronka\pokaz_wyniki.php on line 80
Fatal error: Call to undefined function ImageTTFBBox() in C:\Program Files\Apache Group\Apache2\htdocs\stronka\pokaz_wyniki.php on line 84