CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
17.05.2004, 02:18:08
|
Anfänger
|
|
Registriert seit: May 2004
Beiträge: 11
|
|
pie chart mittels der Funktion imagefilledarc erstellen
Hallo zusammen,
Kuzer Überblick zu meinem Problem:
Ich bin gerad dabei für einen Online-Fragebogen eine grafische Auswertung zu erstellen u.a. möchte ich die Ergebnisse durch pie-charts visualisieren.
Auf meinem lokalen Rechner habe ich es auch wunderbar hinbekommen. Doch auf dem Webspace bei Schlund&Partner wird das pie chart aus irgendwelchen Gründen nicht gezeichnet.
GD-Bibliothek ist einwandfrei installiert und die Funktion ist laut function_exists() auch vorhanden. Doch trotzdem wird die Funktion imagefilledarc() nicht ausgeführt.
Vielleicht hat einer von euch schon einmal ein ähnlicher Problem gehabt oder hat eine Idee womit es zusammen hängt.
Vielen Dank im voraus.
Gruss, pumuckl
|
17.05.2004, 03:32:41
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
|
|
Re: pie chart mittels der Funktion imagefilledarc erstellen
Zitat:
Original geschrieben von pumuckl
Vielleicht hat einer von euch schon einmal ein ähnlicher Problem gehabt oder hat eine Idee womit es zusammen hängt.
|
Weder noch. Gibt es irgend einen triftigen Grund, das Script incl. Link auf ein phpinfo des Webservers, auf dem das Script nicht zufriedenstellend arbeitet, nicht zu posten?
|
17.05.2004, 11:05:22
|
Anfänger
|
|
Registriert seit: May 2004
Beiträge: 11
|
|
Sorry meikel, feuervogel das ich das Script nicht beim ersten Mal direkt mitgeschickt habe.
Die wichtigsten Stellen sind im Script durch ******** gekennzeichnet.
Das Script sieht wie folgt aus:
PHP-Code:
<?php
header("content-type:image/png");
include("../config.inc.php");
include("../verbindung/zugriff.inc.php");
?>
<?php
$anfrage=mysql_select_db($dbname);
mysql_query($anfrage);
//Anzahl der abgegebenen Stimmen auslesen
$sql1="SELECT COUNT(*) as gesamt FROM $tbname";
$ergebnis1=mysql_query($sql1);
//echo $ergebnis1;
$array1=@mysql_fetch_array($ergebnis1);
$gesamtanzahl=$array1['gesamt'];
//Nur weiter, wenn bereits abgestimmt wurde
if(empty($gesamtanzahl)){
echo("<p>Es hat noch niemand abgestimmt!</p></br>");
exit;
}
echo("</br></br>");
$auswahlfeld=array("not use"=>"Nicht
beantwortet", "0"=>"sehr gut", "1"=>"gut", "2"=>"befriedigend",
"3"=>"ausreichend", "4"=>"mangelhaft");
$sql2="SELECT antwort3, COUNT(*) as gesamt FROM $tbname GROUP BY antwort3 ORDER BY
antwort3 asc";
$ergebnis2=mysql_query($sql2);//liefert die Ergebniskennung
?>
<?php
//hier wird die aeusserset Tabelle definiert Tabelle
echo("<table align=$direction $frame frame=$rahmen cellpadding=0 cellspacing=0 width=$breite bgcolor=#181747>");
echo("<tr>");
echo("<td>");
//hier wird die Tabelle 1 definiert
echo("<table border=$border cellspacing=0 cellpadding=0 width=100% bgcolor=#181747>");
echo("<tr>");
echo("<td>");
echo("<b><font color=#FFFFFF>3. Bewerten Sie unsere Zimmer auf einer Skala von 1 bis 5.</font></b>");
echo("</td>");
echo("</tr>");
echo("</table>");//die Tabelle 1 wird geschlossen
//oberste Zeile fuer die Frage hergestellt
echo("<tr>");
echo("<td>");
// hier wird Tabelle 2 definiert
echo("<table border=$border cellpadding=0 cellspacing=0 width=100% $hintergrundfarbe>");
echo("<tr>");
echo("<td>");
//hier wird Tabelle 3 definiert
echo("<table border=$border cellpadding=0 cellspacing=0 width=100% $hintergrundfarbe>");
echo("<tr>");
echo("<td colspan=5>");
echo("<strong><font color=#000000>Die Antworten verteilen sich wie folgt:</font></strong>");
echo("</td>");
echo("</tr>");
$i=0;
while($array2=mysql_fetch_array($ergebnis2)){
//enthaelt den Wert aus der entsprechenden Zeile aus der Spalte gesamt
$anzahl=$array2['gesamt'];
//enthaelt den gespeicherten Wert von spalte antwort_1 aus der entsprechenden Zeile
$antwort=$array2['antwort3'];
//prozentwerte werden berrechnet
$ratio=$anzahl/$gesamtanzahl;
$anteil=($anzahl/$gesamtanzahl)*100;
$prozent=number_format($anteil,1,',','.');
echo("<tr>");
echo("<td align=center>");
//**********an dieser Stelle werden Legendensymbole erzeugt, der Bereich funktioniert, d.h. die Symbole werden gezeichnet
$image_rect=imagecreate(20,20);
$white=imagecolorallocate($image_rect, 0xFF, 0xFF, 0xFF);
$red=imagecolorallocate($image_rect, 0xFF, 0x00, 0x00);
$blue=imagecolorallocate($image_rect, 000, 000, 255);
$green=imagecolorallocate($image_rect, 000, 255, 000);
$yellow=imagecolorallocate($image_rect, 255, 255, 000);
$brown=imagecolorallocate($image_rect,0x80, 0x80, 0x40);
$black=imagecolorallocate($image_rect, 000, 000, 000);
//Farben werden in ein Array geschrieben
$farbe=array($red, $blue, $green, $yellow, $brown, $black);
imagefilledrectangle($image_rect, 2.5, 2.5, 17.5, 17.5, $farbe[$i]);
$filename="frage3[$i].png";
imagepng($image_rect, $filename);
echo("<img src=$filename />");
echo("</td>");
echo("<td><font color=#000000>");
echo($prozent ." %");
echo("</td></font>");
echo("<td><font color=#000000>");
echo($auswahlfeld[$antwort]);
echo("</font></td>");
echo("<td><font color=#000000>");
echo($anzahl);
echo("</td></font>");
echo("<td><font color=#000000>");
echo("answer(s)");
echo("</td></font>");
echo("</tr>");
$joerg[$i]=$ratio;
$nick[$i]=$auswahlfeld[$frage];
$prozent_array[$i]=$prozent;
$i++;
$counter++;
}
//****************************
echo("</table>");//hier wird Tabelle 3 geschlossen
echo("<td>");
//hier wird Tabelle 4 definiert
echo("<table border=$border cellpadding=0 cellspacing=0 width=100% $hintergrundfarbe>");
echo("<tr>");
echo("<td align=center>");
//**********************hier fängt der Bereich an indem das pie chart gezeichnet wird
//**********************funktioniert nicht, d.h. keine Ausgabe am Browser
//Counter Variable deklariert und auf definierten Anfangswert gesetzt
$a=0;
$winkel=0;
$alpha=0;
$beta=0;
$menge=count($joerg);
//erzeugt die canvas & die colors
$image = imagecreate(300, 300);
//Farben werden definiert
$hintergrund=imagecolorallocate($image, 0xAA, 0xAA, 0xAA);
$dorint_blau=imagecolorallocate($image,0x18, 0x17, 0x47);
$white = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
$red = imagecolorallocate($image, 0xFF, 0x00, 0x00);
$blue = imagecolorallocate($image, 000, 000, 255);
$green = imagecolorallocate($image, 000, 255, 000);
$yellow = imagecolorallocate($image, 255, 255, 000);
$brown = imagecolorallocate($image,0x80, 0x80, 0x40);
$black = imagecolorallocate($image, 000, 000, 000);
//Farben werden in ein Array geschrieben
$color=array($red, $blue, $green, $yellow, $brown, $black);
for ($a=0; $a<$menge; $a++) {
$winkel=$joerg[$a]*360;
$winkel=round($winkel,3);
$beta=$winkel+$alpha;
//Berechnung den Winkel der Winkelhalbierende, dient zur Ausgabe der Prozentwerte am pie
$center_angle=$beta-(($beta-$alpha)/2);
//******diese Funktion wird aus irgendeinem Grund nicht ausgeführt
imagefilledarc($image, $offset, $offset, $radius*2, $radius*2, $alpha, $beta,
$color[$a], IMG_ARC_PIE);
//********************
//Umrechnung von Grad in Rad
$bogenmass_alpha=($alpha*$pi)/180;
$bogenmass_beta=($beta*$pi)/180;
$x2=cos($bogenmass_alpha+($bogenmass_beta-$bogenmass_alpha)/2);
$y2=sin($bogenmass_alpha+($bogenmass_beta-$bogenmass_alpha)/2);
//*********an dieser Stelle steht normalerweise sourcecode der die Startpunkte
//*********für die Prozentwerte am pie festlegt
//*********und zeichnet sie, dieser Bereich funktioniert auch
$alpha=$beta;
//$a++;
}
//********************Ausgabe des Bildes in eine Datei und anschließend im Browser
// flush image
imagepng($image, 'frage3.png');
echo("<img src='frage3.png' />");
//imagedestroy($image);
//*************************
//*********an dieser STelle steht eigentlich noch eine Ausgabe der Gesamten Wahlbeteiligung
echo("</td>");
echo("</tr>");
echo("</table>");//hier wird die Tabelle geschlossen
?>
Die vorhandenen Versionen sind:
php-Version:4.2.3
GD-Version:1.6.2 or higher
Die Angaben habe ich über phpinfo() entnommen.
Vielen Dank für eure Mühe, Gruss pumuckl
Geändert von pumuckl (17.05.2004 um 20:01:29 Uhr)
|
17.05.2004, 11:55:57
|
SELFPHP Guru
|
|
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
|
|
wie sollen wir wissen, warum das script nicht geht, wenn wir
a) den code nicht kennen?
b) nicht wissen unter was für einer php-konfiguration das alles abläuft?
meikel will nun wissen, aus welchem grund du uns oben stehende angaben nicht schon in deinem ersten post gemacht hast.
|
17.05.2004, 16:04:01
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
|
|
Zitat:
Original geschrieben von pumuckl
Sorry meikel, feuervogel das ich das Script nicht beim ersten Mal direkt mitgeschickt habe.
|
OK. Nur noch eine zusätzliche Bitte: editiere den Beitrag noch mal und füge vor dem Script
[ php ]
und nach Script
[ /php ] ein (natürlich ohne die Leerzeichen). Dann stellt das Forum Deinen Scripttext besser lesbar (dunkelgrau auf hellgrau is nich schön) dar.
Wenn mich nicht alles täuscht, erstellst Du in diesem Script ein Image, speicherst es ab und rufst es eine Zeile später im img Tag auf. Das könnte verdammt knapp sein.
Vorschlag: lagere alle Scriptbestandteile, die die Grafik erzeugen, in ein separates Script aus, welches Du auf die herkömmliche Art und Weise aufrufst:
PHP-Code:
printf ('<img src="grafik.php?%s" alt="%s"',
'frage=3', #
'Grafik Frage 3')
>
Falls keine Session:
- alle relevanten Daten per GET übergeben (stehen dann als $_GET['varname'] zur Verfügung).
Falls Session: [php]
PHP-Code:
printf ('<img src="grafik.php?%s&%s" alt="frage3"',
'frage=3', #
SID # SID ist eine Konstante, die je nach Client und Config sessionname und sessionid enthält
>
Beachte im Grafikscript folgendes:
- sende vorher einen korrekten Header:
header("Content-Type: image/png");
- das Grafikscript darf keinerlei Text ausgeben
- bei der Ausgabe kannst Du den Dateinamen weglassen imagepng($image);
- danach imagedestroy($image) fertig.
Zitat:
php-Version:4.2.3
GD-Version:1.6.2 or higher
|
Beides ist etwas ältlich, aber
"imagefilledarc (PHP 4 >= 4.0.6, PHP 5)"
Ich weiß allerdings nicht genau, ob GD 1.6 schon PNG kennt.
|
17.05.2004, 20:14:51
|
Anfänger
|
|
Registriert seit: May 2004
Beiträge: 11
|
|
Hallo meikel,
vielen Dank erst einmal für deine Hilfe. Ich werde versuchen deinem Rat nachzugehen. Wenn Fragen auftauchen melde ich mich einfach wieder.
Außerdem habe ich in Erfahrung gebracht, dass die GD-Lib von Schlund eine noch ältere Version als die Version 2.0.1 handelt und somit die Funktion nicht brauchbar ist. Ein neues Update ist aber in nächster Zeit geplant.
Was meinst du eigentlich damit, dass es knapp werden könnte?
Und da fällt mir noch eine Sache ein. Ich habe es einmal ausprobiert die Grafik nicht in eine Datei zu speichern, sondern habe versucht sie direkt an den Browser auszugeben. Doch leider kam keine Grafik sondern nur ein Haufen Hyroglyphen. Hast du eine Ahnung was es damit auf sich hat.
Gruss, pumuckl
Geändert von pumuckl (17.05.2004 um 20:25:07 Uhr)
|
17.05.2004, 20:25:45
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
|
|
Zitat:
Original geschrieben von pumuckl
Was meinst du eigentlich damit, dass es knapp werden könnte.
|
Auf die Zeit bezogen. Es ist nicht ausgeschlossen, daß Linux noch das File schreibt, wenn der Client es schon haben will.
Zitat:
Ich habe es einmal ausprobiert die Grafik nicht in eine Datei zu speichern, sondern habe versucht sie direkt an den Browser auszugeben. Doch leider kam keine Grafik sondern nur ein Haufen Hyroglyphen. Hast du eine Ahnung was es damit auf sich hat.
|
Hatte ich doch geschrieben:
PHP-Code:
# vor dem Ausgabebefehl:
header("Content-Type: image/png");
Dann weiß der Browser: "Jetzt kommt ein Bild und kein HTML Text"
|
18.05.2004, 00:52:59
|
Anfänger
|
|
Registriert seit: May 2004
Beiträge: 11
|
|
Hallo meikel,
das mit dem header habe ich jetzt geschnallt. Bin gerade dabei deine Tipps umzusetzen und bin dabei über etwas gestossen was ich auch noch nicht weiß.
Wie kann ich eigentlich ein komplettes Array an das aufgerufende Script mittels der GET-Methode übergeben und schließlich wie kann ich dieses übergebende Array mittels _GET['var'] wieder auslesen?
Gruss, pumuckl
|
18.05.2004, 01:27:18
|
SELFPHP Guru
|
|
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
|
|
das ist nicht so leicht, aber schau dir mal die funktionen serialize() und unserialize() an.
warum speicherst du sowas nicht in einer session?
|
18.05.2004, 01:34:17
|
Anfänger
|
|
Registriert seit: May 2004
Beiträge: 11
|
|
hallo feuervogel,
weil ich mit session leider noch nichts gemacht habe. habe mich bis jetzt immer davor gedrückt.
ich werde mir erst einmal deinen tipp mit den funktionen anschauen. vielleicht komme ich auf die sessions noch einmal zurück.
vielen dank für den hinweis.
gruss, pumuckl
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 20:10:01 Uhr.
|