tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
602
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Sasser Sasser ist offline Mitglied Smaragd
    Registriert seit
    Mar 2008
    Beiträge
    1.000
    Hallo alle zusammen!

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

    PHP-Code:
    <?
        
    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-Code:
    <?
        
    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');
    ?>
     

  2. #2
    Avatar von Jacka
    Jacka Jacka ist offline Mitglied Brokat
    Registriert seit
    Sep 2004
    Beiträge
    390
    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-Code:
    <?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
     
    Biologie ist das was lebt, Chemie das was kracht und Physik das, wo nichts funktioniert!

    - - - - - - - - - - - - - - - -

    Open Source JS-Framework für Business Web-Applications: ExtJS

  3. #3
    Sasser Sasser ist offline Mitglied Smaragd
    Registriert seit
    Mar 2008
    Beiträge
    1.000
    Hmm komisch, der zeigt mir gar nichts an und es kommt auch keine Fehlermeldung

    PHP-Code:
    <?

             $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?

    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
     

  4. #4
    Avatar von maeTimmae
    maeTimmae maeTimmae ist offline Mitglied Platin
    Registriert seit
    Aug 2007
    Ort
    Erfurt, Saarbrücken, Leipzig und Fulda
    Beiträge
    515
    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-Code:
    <?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],    // Endung
                
    $row],    // 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:
    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    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
    ;
     
    Zitat Zitat von Steve Wozniak
    Never trust a computer you can't throw out a window.

  5. #5
    ts230 ts230 ist offline Mitglied Brokat
    Registriert seit
    Jul 2007
    Ort
    CA
    Beiträge
    261
    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.



     

  6. #6
    Sasser Sasser ist offline Mitglied Smaragd
    Registriert seit
    Mar 2008
    Beiträge
    1.000
    Hier ist der Inhalt der phpchart.php! Hoffe es hilft dir!

    PHP-Code:
    <?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?



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

    PHP-Code:
    <?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-Code:
    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-Code:
    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" );

     

  7. #7
    Avatar von maeTimmae
    maeTimmae maeTimmae ist offline Mitglied Platin
    Registriert seit
    Aug 2007
    Ort
    Erfurt, Saarbrücken, Leipzig und Fulda
    Beiträge
    515
    Entschuldigung, mein Fehler. Korrektur:
    PHP-Code:
    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 var_dump() und print_r() bevorzugen, denn echo() gibt immer nur den String-Kontext aus.
     
    Zitat Zitat von Steve Wozniak
    Never trust a computer you can't throw out a window.

  8. #8
    Sasser Sasser ist offline Mitglied Smaragd
    Registriert seit
    Mar 2008
    Beiträge
    1.000
    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-Code:
    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-Code:
    $aGraphData = array();
    while ( 
    $row mysql_fetch_row$result ) ) {
        
    $aGraphData[] = array(
                
    $row],
                
    $row],
                
    ""
            
    );

    nicht mit dem urspruenglichen uebereinstimmt?

    PHP-Code:
    $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

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

    }  
    ); 
     

  9. #9
    Sasser Sasser ist offline Mitglied Smaragd
    Registriert seit
    Mar 2008
    Beiträge
    1.000
    Alles klar, nun funktioniert es!

    Dankeschoen an alle!
     

  10. #10
    Sasser Sasser ist offline Mitglied Smaragd
    Registriert seit
    Mar 2008
    Beiträge
    1.000
    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-Code:
    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],
                
    $row],
                
    ""
            
    );
    }

    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!
     

Ähnliche Themen

  1. UML -Diagramm, E-R-Diagramm und relationales Modell
    Von Number5 im Forum Coders Talk
    Antworten: 3
    Letzter Beitrag: 18.06.09, 14:55
  2. Diagramm
    Von headpainter im Forum .NET WPF & Silverlight
    Antworten: 5
    Letzter Beitrag: 04.08.08, 12:46
  3. C# Diagramm
    Von Borzel im Forum .NET Grafik und Sound
    Antworten: 2
    Letzter Beitrag: 26.10.06, 17:10
  4. php Diagramm
    Von M-GT im Forum PHP
    Antworten: 2
    Letzter Beitrag: 10.09.05, 15:51
  5. Diagramm
    Von jma im Forum Java
    Antworten: 2
    Letzter Beitrag: 29.08.05, 10:14