<?php
/************************
odczytuje wyniki z bazy
******************/
//pobranie glosu z formularza
$glos=$_REQUEST['glos'];
//zalogowanie w bazie danych
if(!$bd_polacz=new mysqli('localhost','ankieta','ankieta','ankieta'))
{
};
if(!empty($glos)) //jezeli formularz zostal wypelniony, dodaje glos {
$zapytanie="update wyniki_ankiety
set ilosc_glosow = ilosc_glosow + 1
where kandydat = '$glos'";
if(!($wynik=@$bd_polacz->query($zapytanie)))
{
}
};
//pobieranie wynikow ankiety niezaleznie od faktu glosowania
$zapytanie='select * from wyniki_ankiety';
if(!($wynik=@$bd_polacz->query($zapytanie)))
{
};
$ilosc_kandydatow=$wynik->num_rows;
//obliczanie calkowitej liczby glosow
$ilosc_glosow=0;
while ($rzad=$wynik->fetch_object())
{
$ilosc_glosow+=$rzad->ilosc_glosow;
}
$wynik->data_seek(0);//wyzerowanie wskaznika wyniku
/*****************
rysowanie wynikow
***************/
//ustawienie stalych
putenv('GDFONTPATH=C:WINDOWSFonts'); $szerokosc=500; //szerokosc obrazka w pikselach
$lewy_margines=50; //miejsce po lewej stronie obrazka
$prawy_margines=50; //prawy margines
$wysokosc_slupka=40;
$odleglosc_slupkow=$wysokosc_slupka/2;
$czcionka='arial';
$rozmiar_tytulu=16; // w stopniach
$rozmiar_podstawowy=12;
$rozmiar_maly=12;
$wciecie_tekstu=10; //odleglosc lewych etykiet od lewej krawedzi obrazka
//ustawienie poczatkowego punktu rysowania
$x=$lewy_margines+70; //miejsce narysowania bazy wykresu
$y=50;
$jednostka_slupka=($szerokosc-($x+$prawy_margines))/100; //jeden stopien wykresu
//obliczenie wysokosci wykresu -slupki + przerwy + 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ól kadru
ImageRectangle($ob,0,0,$szerokosc-1,$wysokosc-1,$kolor_linii);
// dodanie tytulu
$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; // wysrodkowanie w x
$tytul_y=($y-$wysokosc_tytulu)/2+$tytul_nad_linia; // wysrodkowanie w y
ImageTTFText($ob, $rozmiar_tytulu, 0, $tytul_x, $tytul_y,
$kolor_tekstu, $czcionka, $tytul);
// narysowanie bazy od nieco ponad pozycja pierwszego slupka do nieco
// ponizej pozycji ostatniego
ImageLine($ob, $x, $y-5, $x, $wysokosc-15, $kolor_linii);
/*********************************************
Umieszczenie danych na wykresie
*********************************************/
// Pobranie kazdej linii bazy danych i narysowanie odpowiadajacych slupków
while ($rzad=$wynik->fetch_object())
{
if($ilosc_glosow>0)
$procent=intval(round(($rzad->ilosc_glosow/$ilosc_glosow)*100
)); else
$procent=0;
// wyswietlenie procentów dla tej wartosci
$wymiary_procentow=ImageTTFBbox($rozmiar_podstawowy, 0, $czcionka, $procent.'%');
$dlugosc_procentow=$wymiary_procentow[2]-$wymiary_procentow[0];
ImageTTFText($ob,$rozmiar_podstawowy, 0, $szerokosc-$dlugosc_procentow-$wciecie_tekstu,
$y+($wysokosc_slupka/2), $kolor_procentow, $czcionka, $procent.'%');
// dlugosc slupka dla tej wartosci
$dlugosc_slupka=$x+($procent*$jednostka_slupka);
// narysowanie slupka dla tej wartosci
ImageFilledRectangle($ob, $x, $y-2, $dlugosc_slupka, $y+$wysokosc_slupka,
$kolor_slupka);
// narysowanie tytulu dla tej wartosci
ImageTTFText($ob, $rozmiar_podstawowy, 0, $wciecie_tekstu,
$y+($wysokosc_slupka/2), $kolor_tekstu, $czcionka,
"$rzad->kandydat");
// narysowanie konturu pokazujacego 100%
ImageRectangle($ob, $dlugosc_slupka+1, $y-2, ($x+(100*$jednostka_slupka)),
$y+$wysokosc_slupka, $kolor_linii);
// wyswietlenie liczb
ImageTTFText($ob, $rozmiar_maly, 0, $x+(100*$jednostka_slupka)-50,
$y+($wysokosc_slupka/2), $kolor_liczb, $czcionka,
$rzad->ilosc_glosow.'/'.$ilosc_glosow);
// przesuniecie do nastepnego slupka
$y=$y+($wysokosc_slupka+$odleglosc_slupkow);
}
/*********************************************
Wyswietlenie obrazka
*********************************************/
Header('Content=type: image/png'); ImagePNG($ob);
/*********************************************
Zwalnianie zasobów
*********************************************/
ImageDestroy($ob);
?>
Dostaje komunikat : Nie rozumiem dlaczego skrypt nie moze znalesc czcionki probowalem sciezke na wszystkie sposoby i dalej to samo
Warning: imagettfbbox() [
function.imagettfbbox]: Invalid font filename in
C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\php\pokaz_wyniki.php on line
103 + linie w ktorych odnosze sie do zmiennej $czcionka
Ten post edytował infolearn 4.12.2007, 19:29:52