Diagramm mit PHP

Sasser

Erfahrenes Mitglied
Hallo alle zusammen!

Hab ne Frage, und zwar: Ich erstelle ein Diagramm ueber eine Funktion. An diese gebe ich die folgenden Arrays:

PHP:
<?
	include('phpchart.php');

	$aGraphData = Array
		(array('.de', 25, ''),
		 array('.com', 50, ''),
		);

	echo phpchart($aGraphData, 'H', 'Statistik aller Domainbewertungen', 'Anzahl der Domainbewertungen', '8pt', 400, 'px', 15, 'px');
?>

Jetzt meine Frage: Ich moechte nun nicht mehr die Sachen per Hand eingeben und das Diagramm automatisch auf dem neuesten Stand haben! Ich habe eine Datenbank mit einer Tabelle "endungen" : Feldname "end" und ich moechte nun, dass alle Eintraege in den Array kommen. Bsp: .de, .com, .net usw.

Anschliessend sollen die Eintraege in der Tabelle "abfrage" : Feldname "endung" gruppiert werden, damit man sieht wieviele Eintraege mit .de, .com, .net usw.

Wie kann man das dann in den folgenden Code integrieren:

PHP:
<?
	include('phpchart.php');

	$aGraphData = Array
		(array('.de', ###Eintraege###, ''),
		 array('.com', ###Eintraege###, ''),
                 .........
		);

	echo phpchart($aGraphData, 'H', 'Statistik aller Domainbewertungen', 'Anzahl der Domainbewertungen', '8pt', 400, 'px', 15, 'px');
?>
 
Hi!

Ich sehe nicht so genau das Problem.
Du liest die Daten aus der Datenbank aus und gibtst die Werte in deine Funktion.
Das könnte z.B. (!) so aussehen:
PHP:
<?php
//... 
$sql = "SELECT end FROM endungen"; // Alle Endungen auslesen
$resultEndungen = mysql_fetch_array($sql);

foreach($resultEndungen as $endung) {
   $sql = "SELECT COUNT(*) AS count FROM abfrage WHERE endungen LIKE ".$endung["end"]; // Anzahl Datensätze pro Endung auslesen
   $result = mysql_fetch_row($sql);
   $aGraphData [] = array($endung["end"], $result[0], ''); // Das Chart array
}

include('phpchart.php');

    echo phpchart($aGraphData, 'H', 'Statistik aller Domainbewertungen', 'Anzahl der Domainbewertungen', '8pt', 400, 'px', 15, 'px');
?>

Es handelt sich hier um ein Beispiel, ich kenne deine genaue DB-Struktur ja nicht. Außerdem bin ich hier mal von MySQL ausgegangen.

Viele Grüße,
Jacka
 
Hmm komisch, der zeigt mir gar nichts an und es kommt auch keine Fehlermeldung

PHP:
<?

         $dbname = "";
         $dbhost = "";
         $dbuser = "";
         $dbpwd = "";
         $db = @mysql_connect($dbhost, $dbuser, $dbpwd);
         @mysql_select_db($dbname, $db) or die ("Keine Verbindung zur MySQL Datenbank");

	$sql = "SELECT end FROM endungen"; // Alle Endungen auslesen
$resultEndungen = mysql_fetch_array($sql);

foreach($resultEndungen as $endung) {
   $sql = "SELECT COUNT(*) AS count FROM abfrage WHERE endungen LIKE ".$endung["end"]; // Anzahl Datensätze pro Endung auslesen
   $result = mysql_fetch_row($sql);
   $aGraphData [] = array($endung["end"], $result[0], ''); // Das Chart array
}

include('phpchart.php');

    echo phpchart($aGraphData, 'H', 'Statistik aller Domainbewertungen', 'Anzahl der Domainbewertungen', '8pt', 400, 'px', 15, 'px');
?>

Habe ich irgendwas uebersehen? :confused:

EDIT: Hab mir mal $resultEndungen ausgeben lassen, aber da is nix drin

Also nochmal zum Verstehen:

In der Tabelle "endungen" sind alle endungen in der Spalte "end" vorhanden, die es gibt. Und diese solle nun alle einzeln in der Tabelle "abfrage" in der Spalte "endung" gezaehlt werden!

Was ist an dem oben geposteten Code noch falsch, dass mir nichts angezeigt wird?

Danke fuer eure Hilfe :)
 
Eventuell ein Fehler in den Queries?

Nichtsdestotrotz lässt es sich wahrscheinlich effektiver lösen. Sofern ich die DB-Struktur richtig erfasst habe, ginge zB Folgendes:
PHP:
<?php

// Datenbankerbindung aufsetzen
$dbname	= "";
$dbhost	= "";
$dbuser	= "";
$dbpwd	= "";
if ( !$db = mysql_connect( $dbhost, $dbuser, $dbpwd ) ) {
	die( "Datenbankverbindung nicht möglich." );
} else if ( !mysql_select_db( $dbname, $db ) {
	die ( "Keine Verbindung zur MySQL Datenbank" );
}

// Query vorbereiten
$queryString = "
		SELECT
			`e`.`end`		AS `tld`,
			COUNT( * )		AS `abfragePerEndung`
		FROM
			`endungen` AS `e`
		LEFT JOIN
			`abfrage` AS `a` ON
			`e`.`end` LIKE `a`.`endung`
		GROUP BY
			`e`.`end`
		ORDER BY
			NULL
		;";

// Query an Datenbank absetzen und Ergebnis einholen
if ( !$result = mysql_query( $queryString, $db ) ) {
	die( "Query schlug fehl" );
}

// Ergebnisse durchlaufen und an Datenarray anhängen
$aGraphData = array();
while ( $row = mysql_fetch_row( $result ) ) {
	$aGraphData[] = array(
			$row[ 0 ],	// Endung
			$row[ 1 ],	// Anzahl
			""			// ?
		);
	// evtl würde es auch $aGraphData[] = $row tun
}

// der Rest...
include "phpchart.php";
echo phpchart( $aGraphData, 'H', 'Statistik aller Domainbewertungen', 'Anzahl der Domainbewertungen', '8pt', 400, 'px', 15, 'px' );

Das Query nochmal etwas erklärt:
SQL:
SELECT
	`e`.`end`		AS `tld`,				-- Endung
	COUNT( * )		AS `abfragePerEndung`	-- Anzahl der Einträge aus "abfrage" mit entsprechender Endung
FROM
	`endungen` AS `e`						-- Hole alle Endungen aus "endungen"
LEFT JOIN
	`abfrage` AS `a` ON						-- Verknüpfe von links mit Einträgen aus "abfrage"
	`e`.`end` LIKE `a`.`endung`				-- Für die gilt: `e`.`end` ist `a`.`endung`
GROUP BY
	`e`.`end`								-- Gruppiere nach Endung
ORDER BY
	NULL
;
 
Hallo,

Mich interessiert der Inhalt der »phpchart.php«.
Könntet ihr vielleicht den Inhalt posten.
Ich finde diese Idee die hierhinter steckt gut:)!
Ich programmiere gerade ein Forum und eine Bildergallerie, für ich diese Funktion gebrauchen könnte. Ich plante eine kleine Statistik über Dateitypen, Dateigrößen u.v.m.



 
Hier ist der Inhalt der phpchart.php! Hoffe es hilft dir! :)

PHP:
<?php
	function phpchart($paData, $psOrientation = 'H', $psTitle = '', $psAxisLabel = '', $psFontSize = '8pt',
						  $piMaxSize = 100, $psMaxSizeUnit = 'px', $piBarSize = 15, $psBarUnit = 'px',
						  $paColors = Array('#a0a0a0', '#707070')) {

		$iColors = sizeof($paColors);

		$sHTML = "
			<table style='font-family: Arial; font-size: $psFontSize'><tr><tr><td colspan=2 align='center'><u><b>$psTitle</b></u></td></tr><td align='right'>
		";

		$iMax = 0;
		for($iRow = 0; $iRow < sizeof($paData); $iRow++) {
			if($paData[$iRow][1] > $iMax) $iMax = $paData[$iRow][1];

			$sHTML .= "<div style ='height: $piBarSize$psBarUnit;'>".$paData[$iRow][0]."</div>";
		}

		$iScale = $iMax / $piMaxSize;

		$sHTML .= "
			</td><td>
			<TABLE style='border-bottom: 1px solid black; border-left: 1px solid black;font-family: Arial; font-size: $psFontSize; '>
				<tr><td>
		";
		
		for($iRow = 0; $iRow < sizeof($paData); $iRow++) {
			$sColor = $paColors[$iRow%$iColors];
			$iBarLength = $paData[$iRow][1] / $iScale;
			$sHTML .= "
				<div style='background-color: $sColor; text-align: right; color: white;
							 height: $piBarSize$psBarUnit; 
							 width: $iBarLength$psMaxSizeUnit;'> ".
				$paData[$iRow][1].$paData[$iRow][2]."&nbsp;</div>
			";
		}

		$sHTML .= "
			</td></tr>	
			</table></td></tr>
			<tr><td></td><td>$psAxisLabel</td></tr>
			</table>
		";
		return $sHTML;
	}
?>

So habs getestet!

Aber er zeigt nichts an! Wie kann ich testen was falsch ist?

:confused::confused::confused:

So hats jedenfalls vorher funktioniert, aber ohne Diagramm (war nur eine Auflistung!):

PHP:
<?php

db_connect($db);
$anzahl_frei=mysql_num_rows(mysql_query("SELECT id FROM abfrage WHERE frei=1", $db));

echo "<table border='0' align='left'>";
echo "<tr>
		<td align='right'> <a href='freie_domains.php'>".$anzahl_frei."</a> Domainbewertungen</td>
		<td align='left'>f&uuml;r freie bzw. gel&ouml;schte Domains</td>
	</tr>";

$result = @mysql_query("SELECT count(*), endung from abfrage GROUP BY endung ORDER BY 'count(*)' DESC", $db);
	while($row=mysql_fetch_array($result))
      	{
      	echo "<tr>
				<td align='right'> <a href='suche.php?endung=".$row[endung]."'>".$row["count(*)"]."</a> Domainbewertungen</td>
				<td align='left'>f&uuml;r die Endung .".$row[endung]."</td>
			<tr>";
      	}
echo "</table>";
?>

Ist das normal, dass wenn man sich:

PHP:
echo $aGraphData;
echo $queryString;
echo $result;
echo $row;

ausgeben laesst nichts drin ist?

Hab die Datei mal auf nem anderen Server getestet, weil ich irgendwie keine Fehlermeldungen bei meinem VServer bekomme.. Keine Ahnung warum..

Da mekert er mir folgendes an: Parse error: syntax error, unexpected '{' in dia.php on line 10

PHP:
if ( !$db = mysql_connect( $dbhost, $dbuser, $dbpwd ) ) {
    die( "Datenbankverbindung nicht möglich." );
} else if ( !mysql_select_db( $dbname, $db ) {
    die ( "Keine Verbindung zur MySQL Datenbank" );
}
 
Entschuldigung, mein Fehler. Korrektur:
PHP:
if ( !$db = mysql_connect( $dbhost, $dbuser, $dbpwd ) ) {
	die( "Datenbankverbindung nicht möglich." );
} else if ( !mysql_select_db( $dbname, $db ) ) {
	die ( "Keine Verbindung zur MySQL Datenbank" );
}

Bezüglich der Ausgabe der Rohdaten solltest du [phpf]var_dump[/phpf] und [phpf]print_r[/phpf] bevorzugen, denn [phpf]echo[/phpf] gibt immer nur den String-Kontext aus.
 
Alles klar, jetzt kommt kein Error mehr, aber er zeigt auch nichts an!

An was kann das liegen? Hast du nen Tipp wie man testen kann an was es liegt?

Hab mir mal
PHP:
print_r ($aGraphData);
ausgeben lassen und da kommt:

Array ( [0] => Array ( [0] => de [1] => 1357 [2] => ) [1] => Array ( [0] => at [1] => 167 [2] => ) [2] => Array ( [0] => ch [1] usw.

Kann es sein das die Formatierung des Arrays
PHP:
$aGraphData = array();
while ( $row = mysql_fetch_row( $result ) ) {
    $aGraphData[] = array(
            $row[ 0 ],
            $row[ 1 ],
            ""
        );
}

nicht mit dem urspruenglichen uebereinstimmt?

PHP:
$aGraphData = Array
		(array('.de', 25, ''),
		 array('.com', 50, ''),
		);

Also so muesste die Formatierung sein!

Muesste es nicht so in etwa aussehen? Leider funktioniert das nicht :mad:

PHP:
$aGraphData = Array
              (
while ( $row = mysql_fetch_row( $result ) ) {
    array('$row[0], $row[1], ''),

}  
);
 
So nochmal anknüpfend an das Thema habe ich noch eine Frage;

Wie kann ich nun noch realisieren, dass nur die 10 höchsten in den String geschrieben werden?

Also beisher liest er ja alle Endungen aus und das soll so bleiben, nur soll er nach dem auslesen der Bewertungen die 10 am meisten bewerteten Domains in den String schreiben, damit nicht alle grafisch ausgewertet werden. Ist einfach zuviel!

PHP:
db_connect($db);

$queryString = "
        SELECT
            `e`.`end` AS `tld`,
            COUNT( * ) AS `abfragePerEndung`
        FROM
            `endungen` AS `e`
        LEFT JOIN
            `abfrage` AS `a` ON
            `e`.`end` LIKE `a`.`endung`
        GROUP BY
            `e`.`end`
        ORDER BY
            NULL
        ;";

if ( !$result = mysql_query( $queryString, $db ) ) {
    die( "Query schlug fehl" );
}

$aGraphData = array();
while ( $row = mysql_fetch_row( $result ) ) {
    $aGraphData[] = array(
            $row[ 0 ],
            $row[ 1 ],
            ""
        );
}

include "files/phpchart.php";

echo phpchart( $aGraphData, 'H', '', 'Anzahl der Domainbewertungen &rArr;', '8pt', 500, 'px', 15, 'px' ); 

?>

Normalerweise müsste ich doch nur die 10 höchsten Werte in das Array spielen oder?

Aber wie realisiere ich das? Habe nichts dazu gefunden!
 
Zurück