<?php
/*********************************************
Zapytanie bazy danych odczytujące wynik ankiety
*********************************************/
include("admin/funkcje.php");
include("admin/baza.php");
// pobranie głosu z formy
@$glos=@$_REQUEST['glos'];
if(!empty($glos)) // jeżeli formularz został wypełniony, dodanie głosu {
$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
putenv('GDFONTPATH=C:WINDOWSFonts'); $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];
$wysokosc_tytulu=abs($wymiary_tytulu[7
]-$wymiary_tytulu[1
]); $tytul_nad_linia=abs($wymiary_tytulu[7
]); $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)
$procent=intval(round(($rzad->ilosc_glosow/$ilosc_glosow)*100
)); 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
*********************************************/
Header('Content=type: image/png'); 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
Ten post edytował henio 17.08.2007, 14:58:00