ďťż

[GD]rysowanie wykresu - częściowo nie działa

       

Podstrony


telcocafe

Napisałem kod pobierający ilość głosów z bazy mysql i rysujący wykres słupkowy jednak nie działa skrypt w przeglądarce pokazuje tylko tytuł "Wyniki głosowania" i koniec a powinien jeszcze narysować wykres. Na początku miałem jeszcze pełno błędów ale poprawiłem je i nic.

Kod:
<?php /*********************************************** Zapytanie bazy danych odczytujace wyniki ankiety ***********************************************/ // pobranie glosu z formy $glos = $_REQUEST['glos']; if(!empty($glos)) // jezeli formularz zostal wypelniony, dodanie glosu { $glos = addslashes($glos); $zapytanie = "update nauczyciel set = glos + 1 where nauczyciel = '$glos'"; $query = mysql_query($wynik); } // pobranie aktualnych wyników anikiety,niezaleznie od faktu glosania $zapytanie = 'select * from nauczyciel'; $wynik = mysql_query($zapytanie) or die ("Blad"); $glos = mysql_num_rows($wynik) or die("Blad w lini 31"); //obliczanie calkowitej ilosci glosów $glos = 0; while ($rzad = mysql_fetch_object($wynik)) { $glos += $rzad->glos; } mysql_data_seek($wynik, 0); // wyzerowanie wskaznika wyniku /***************************** Poczatkowe obliczanie wykresu *****************************/ //ustawienia stalych putenv('GDFONTPATH=Fonty/'); $szerokosc = 500; //szerokosc obrazka w pikselach - ta zmiesci sie w przdzielczkosci $lewy_margines = 50; //miejsce pozostawione po lewej stronie obrazka $prawy_margines = 50; // to stamo dla 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; //odleglosc lewych etykiet tekstowych od lewej krawedzi obrazka //ustawienie poczatkowego punktu rysowania $x = $lewy_margines+70; //miejsce rysowania bazy wykresu $y = 50; //to samo $jednostka_slupka = ($szerokosc-($x+$prawy_margines))/100; //jeden "stopien" wykresu //obliczanie wysokosci wykresu - slupki plus przerwy plus pewien margines $wysokosc = $ilosc_kandydatow*($wyskokosc_slupka+$odleglosc_slupkow)+50; /**************************************** Konfiguracja podstawowego obrazka ****************************************/ //stworzenie pustgo kadru $ob = imagecreateTrueColor($szerokosc, $wysokosc); //przydzielenie kolorów $bialy = ImageColorAllocate($ob,255,255,255); $niebieski = ImageColorAllocate($ob,0,64,128); $czerwony = 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 kontuwrów wokól kadru ImageRectangle($ob,0,0,$szerokosc-1,$wysokosc-1,$kolor_linii); //dodanie tytulu $tytul = 'Wyniki glosania'; $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); /******************************* Umieszczanie danych na wykresrie ********************************/ //KOD NIE DZIAŁA OD TEGO MOMENTU // pobranie kazdej lini bazy danych i naryowanie odpowiednich slupków while ($rzad = mysql_fetch_object($wynik)) { if($glos > 0) $procent = intval(round(($rzad->glos/$glos)*100)); else $procent = 0; // wyswietlanie procentów dla tej wartosci $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. '%'); //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 $dana = $rzad->blefer; ImageTTFText($ob, $rozmiar_podstawowy, 0, $wciecie_tekstu, $y+($wysokosc_slupka/2), $kolor_tekstu, $czcionka, $dana); //narysowanie konturu pokazujacego 100% ImageRectangle($ob, $dlugosc_slupka+1, $y-2, ($x+(100*$jednostka_slupka)), $y+$wysokosc_slupka, $kolor_linii); //wyswietlanie liczb ImageTTFText($ob, $rozmiar_maly, 0, $x+(100*$jednostka_slupka)-50, $y+($wysokosc_slupka/2), $kolor_liczb, $czcionka, $rzad->glos. '/'.$glos); // przesuniecie nastepnego slupka $y = $y+($wysokosc_slupka+$odleglosc_slupkow); } /****************************************** Wyswitlanie obrazka! ******************************************/ Header('Content-type: image/png'); ImagePNG($ob); /****************************************** Zwalnianie zasobów ******************************************/ imagedestroy($ob); ?>
Użytkownik Lejto edytował ten post 07 grudzień 2007, 17:38


Czekaj, czekaj, ty ten post już tu pisałeś. I widzę że nie zastosowałeś się do rad jakie zamieściłem.
Umieść sobie na początku error_reporting(E_ALL); i popraw wszystkie Notice :P

wielkie dzięki poprawiłem wszystkie błędy i działa!!! mam jeszcze tylko problem z polską czcionką

Znając życie kodowanie... Wyślij poprawny nagłówek i znaki diakrytyczne ;) Albo po prostu zapisz plik w odpowiednym kodowaniu :)

@down:
chodzi o to, że po pobraniu danych, musisz je jeszcze przefiltrować, by skrypt poprawnie je zinterpretował :P
Bo robisz to, np. przy wyświetlaniu strony - ustawiając nagłówki META (content-type...).
Zrób to także w PHP, poprzez funkcję header() :) Powinno pomóc.

@down: kutar
A skąd wiesz, że używa UTF-8 ?
Użytkownik DJ_ProG edytował ten post 08 grudzień 2007, 21:48


nie rozumiem
tabele mam w kodowaniu utf8_polish_ci

Bezpośrednio po połączeniu z serwerem MySQL i wybraniu bazy daj:
mysql_query('set names utf8');

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.