Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Anketa + Dijagram

[es] :: PHP :: PHP za početnike :: Anketa + Dijagram

[ Pregleda: 1533 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

alfa-pro
Pancevo

Član broj: 241818
Poruke: 476
*.dynamic.isp.telekom.rs.



+7 Profil

icon Anketa + Dijagram17.08.2010. u 16:54 - pre 166 meseci
Cao imam problem sa anketom.
Sustina je u sledecem: kada korisnik pritisne dugme (Submit, Vote) njegov glas se upisuje u bazu podataka, a zatim ucitavam iz baze tekuce rezultate glasanja i prikazujem ih u obliku trakastog dijagrama.

Gresku koju dobijam je sledeca kada pokrenem skriptu.

Code:

[b]
The image “http://localhost/slike/rezultati_glasanja.php” cannot be displayed, because it contains errors.
[/b]

Slika ne moze biti prikazana jer sadrzi gresku.
Gledao sam ceo dan i nikako da pronadjem gde sam napravio gresku???

Ajde ako neko od vas uspe i ako ga ne mrzi nek mi javi ako primeti gresku negde.

Evo i koda.

Code:

<?php
/*******************************************
  Ucitavanje rezultata glasanja
*******************************************/

// Ucitavamo glas sa obrasca

$glas=$_REQUEST['glas'];

// Prijavljujemo se u bazu podataka
if (!$db_conn = mysql_connect('localhost', 'root', 'anketa'))
{
  echo 'Ne moze da se uspostavi veza sa bazom podataka<br />';
  exit;
};
@mysql_select_db('anketa');

if (!empty($glas))  // Ako je korisnik glasao, dodajemo njegov glas
                   //  u bazu podataka
{
  $glas = addslashes($glas); 
  $query = "update rezultati_ankete
            set broj_glasova = broj_glasova + 1
            where naziv_glasa = '$glas'";
  if(!($result = @mysql_query($query, $db_conn)))
  {
    echo 'Ne moze da se uspostavi veza sa bazom podataka<br />';
    exit;
  }
};

 // Ucitavamo tekuce rezultate glasanja, bez obzira na to da li je
//  korisnik glasao
$query = 'select * from rezultati_ankete';
if(!($result = @mysql_query($query, $db_conn)))
{
  echo 'Ne moze da se uspostavi veza sa bazom podataka<br />';
  exit;
}
$debljina = mysql_num_rows($result); 

// Izracunavamo broj dosadasnjih glasanja
$ukupno_glasova = 0;
while ($row = mysql_fetch_object ($result)) 
{
    $ukupno_glasova +=  $row->broj_glasova;
}
//Pokazivac rezultata postavljamo na nula (0)
mysql_data_seek($result, 0);  

//CRTANJE DIJAGRAMA


/*******************************************
  POCETNI PRORACUN ZA DIJAGRAM
*******************************************/


// Inacijalizujemo konstante
putenv('GDFONTPATH=C:\WINDOWS\Fonts');
$sirina         = 500;   // sirina slike u pikselima - uklapa se u 640x480
$leva_margina   = 50;   // leva margina slike
$desna_margina  = 50;  // desna margina slike 
$bar_visina     = 40;  
$bar_razmak = $bar_visina/2; 
$font = 'arial';
$velicina_naslova     = 16;         // u tackama
$glavna_velicina      = 12;        // u tackama
$mala_velicina        = 12;       // u tackama
$pozicija_natpisa     = 10;      // pozicija natpisa u odnosu na levu ivicu slike


// Tacka od koje pocinjemo crtanje linija

$x = $leva_margina + 60;  // Koordinata osnovne linije dijagrama
$y = 50;                 // Isto
$tacka= ( $sirina -( $x + $desna_margina )) / 100 ;// Jedna tacka na dijagramu

//Izracunavamo visinu dijagrama = debljina trake + razmaci + margine
$visina = $debljina * ($bar_visina + $bar_razmak) + 50;   



/*******************************************
  PRIPREMA POZADINE ZA SLIKU
*******************************************/

// Pravimo crnu pozadinu slike
$slika = ImageCreateTrueColor($sirina,$visina);   
     
// Zadajemo boje slike  
$bela_boja  = ImageColorAllocate ( $slika,255,255,255 );   
$plava_boja = ImageColorAllocate ( $slika,0,64,128 );   
$crna_boja  = ImageColorAllocate ( $slika,0,0,0 );   
$roza_boja  = ImageColorAllocate ( $slika,255,78,243 ); 

$boja_teksta    = $crna_boja;
$boja_procenta  = $crna_boja;
$boja_pozadine  = $bela_boja;
$boja_linije    = $crna_boja;
$boja_bara      = $plava_boja;
$boja_brojeva   = $roza_boja;

// Pravimo platno po kome cemo da crtamo
ImageFilledRectangle($slika,0,0,$sirina,$visina,$boja_pozadine);   

// Crtamo okvir oko pozadine
ImageRectangle($slika,0,0,$sirina-1,$visina-1,$boja_linije);   

// Ispisujemo naslov
$naslov = 'Rezultati glasanja';
$dimenzije_naslova    = ImageTTFBBox($velicina_naslova, 0, $font, $naslov);
$duzina_naslova       = $dimenzije_naslova[2] - $dimenzije_naslova[0];
$visina_naslova       = abs($dimenzije_naslova[7] - $dimenzije_naslova[1]);
$naslov_iznad_linije  = abs($dimenzije_naslova[7]);
$naslov_x = ($sirina-$duzina_naslova)/2;  // naslov centriramo po sirini
$naslov_y = ($y - $visina_naslova)/2 + $naslov_iznad_linije; // po visini
ImageTTFText($slika, $velicina_naslova, 0, $naslov_x, $naslov_y, 
             $boja_teksta, $font, $naslov);  

// Povlacimo osnovnu liniju za trake tako da prolazi malo 
// iznad prve tacke do ispod poslednje trake 
ImageLine($slika, $x, $y-5, $x, $visina-15, $boja_linije);   


/*******************************************
  PRIKAZIVANJE PODATAKA NA DIJAGRAMU
*******************************************/


// Ucitavamo redove s podacima iz baze i crtamo odgovarajuce trake  
while ($row = mysql_fetch_object ($result)) 
{
  if ($ukupno_glasova > 0)
    $procenat = intval(round(($row->broj_glasova/$ukupno_glasova)*100));
  else 
    $procenat = 0;

  // Prikazujemo procenat koji odgovara tekucoj vrednosti
  $dimenzija_procenta = ImageTTFBBox($glavni_velicina, 0, $font, $procenat.'%');
  $duzina_procenta    = $dimenzija_procenta[2] - $dimenzija_procenta[0];
  ImageTTFText($slika, $glavni_velicina, 0, $sirina-$duzina_procenta-$pozicija_natpisa, 
               $y+($bar_visina/2), $boja_procenta, $font, $procenat.'%');  
  
  if ($ukupno_glasova > 0)
    $prava_vrednost = intval(round(($row->broj_glasova/$ukupno_glasova)*100));
  else
    $prava_vrednost = 0;

  // Izracunavamo duzinu trake koja odgovara tekucoj vrednosti 
  $duzina_bara = $x + ($prava_vrednost * $jedinica);   

  // Crtamo traku koja predstavlja tekucu vrednost 
  ImageFilledRectangle($slika, $x, $y-2, $duzina_bara, $y+$bar_visina, $boja_bara);   

  // Ispisujemo naslov 
  ImageTTFText($slika, $glavni_velicina, 0, $pozicija_natpisa, $y+($bar_visina/2), 
               $boja_teksta, $font, "$row->naziv_glasa");  

  // crtamo pravugaonik koji  predstavlja 100% 
  ImageRectangle($slika, $duzina_bara+1, $y-2, 
                ($x+(100*$jedinica)), $y+$bar_visina, $boja_linije);   

  // prikazujemo vrednost   
  ImageTTFText($slika, $mala_velicina, 0, $x+(100*$jedinica)-50, $y+($bar_visina/2),
               $boja_brojeva, $font, $row->broj_glasova.'/'.$ukupno_glasova);

  // prelazimo na sledecu traku
  $y=$y+($bar_visina+$bar_razmak);   
}   

/*******************************************
  Prikazujemo zavrsnu sliku
*******************************************/
Header('Content-type:  image/png');
ImagePNG($slika);   

/*******************************************
  Oslobadjamo resurse
*******************************************/

ImageDestroy($slika);   

?>   



Kada vidjamo uvek ista lica, na kraju ona postaju deo našeg života. A kada postanu
deo našeg života,
onda žele i da nam ga izmene. I ako ne bude po njihovom, nije im pravo. Jer, svaki
čovek ima tačnu predstavu kako bi trebalo da živimo svoj život. A nikad nemaju pojma
kako treba da prožive sopstveni život.
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-3.sezampro.yu.



+33 Profil

icon Re: Anketa + Dijagram17.08.2010. u 23:07 - pre 166 meseci
Probaj da, čisto testiranja radi, ukloniš taj Header('Content-type: image/png');, da bi video o kojoj se grešci zapravo radi. Možda ti npr. uopšte nije uključena GD ekstenzija...
 
Odgovor na temu

alfa-pro
Pancevo

Član broj: 241818
Poruke: 476
*.dynamic.isp.telekom.rs.



+7 Profil

icon Re: Anketa + Dijagram18.08.2010. u 11:04 - pre 166 meseci
Code:
Warning: imagettfbbox() [function.imagettfbbox]: Invalid font filename in C:\wamp\www\*******on line 99

Kada vidjamo uvek ista lica, na kraju ona postaju deo našeg života. A kada postanu
deo našeg života,
onda žele i da nam ga izmene. I ako ne bude po njihovom, nije im pravo. Jer, svaki
čovek ima tačnu predstavu kako bi trebalo da živimo svoj život. A nikad nemaju pojma
kako treba da prožive sopstveni život.
 
Odgovor na temu

kazil
Robert Bašić
Full time PHP dev :)
Bačka Topola - Novi Sad

Član broj: 120044
Poruke: 686
*.static.kdsinter.net.

Jabber: robertbasic@elitesecurity.org
ICQ: 446475288
Sajt: robertbasic.com


+2 Profil

icon Re: Anketa + Dijagram18.08.2010. u 11:25 - pre 166 meseci
Pa onda ocigledno da nevalja font koji prosledjujes :) ispisi pre te linije $font i vidi sta ta promenljiva ima kao vrednost. Moguce je da si je negde usput pregazio sa necim drugim.
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-1.sezampro.yu.



+33 Profil

icon Re: Anketa + Dijagram18.08.2010. u 16:08 - pre 166 meseci
A i ako je to samo warning, možda možeš i da ga zanemariš, tako što ćeš da isključiš prikazivanje grešaka (display_errors direktiva).

btw Ne verujem da taj parametar "font" može da bude samo npr. "arial". To bi trebala da bude putanja do nekog font fajla, npr. 'putanja/do/arial.ttf'.
 
Odgovor na temu

[es] :: PHP :: PHP za početnike :: Anketa + Dijagram

[ Pregleda: 1533 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.