Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z wykresem
Forum PHP.pl > Forum > Przedszkole
gabcio
Cześć,

Mam taki problem jak na zdjęciu zakreślony czerwoną otoczką pokazuje mi jakąś lipę..
Chciałbym, żeby mi pokazywał np: dniami (1,2,3,4,5,6,7) albo (pon, wto itd)
Poniżej pokazuje wam kod..
Gdzie tkwi błąd?

  1. <?php
  2. if(!$_GET['popup']==1)
  3. {
  4. header("Content-type: image/png");
  5. TrafficGraph($_GET['nodeid'],$_GET['bar']);
  6. }
  7.  
  8. ?>
  9. <HTML>
  10. <HEAD>
  11. <script TYPE="text/javascript" LANGUAGE="JavaScript" SRC="img/autoiframe.js"></SCRIPT>
  12. </HEAD>
  13. <BODY>
  14. <TABLE HEIGHT=150 WIDTH=510 VALIGN=TOP HALIGN=RIGHT BORDER=0 id="table">
  15. <TR HEIGHT=150 WIDTH=510 >
  16. <TD HEIGHT=150 WIDTH=510 >
  17. <?
  18. print("<img src=?m=trafficgraph&nodeid=".$_GET['nodeid']."&bar=".$_GET['bar'].">");
  19. ?>
  20. </TD></TR>
  21. </TABLE>
  22. <script TYPE="text/javascript" LANGUAGE="JavaScript">
  23. <!--
  24. parent.document.getElementById('autoiframe').width = document.getElementById('table').offsetWidth;
  25. //-->
  26. </SCRIPT>
  27.  
  28. </BODY>
  29. </HTML>
  30. <?
  31. function TrafficGraph ($nodeid,$quantum)
  32. {
  33.    global    $DB, $LMS;
  34. //brak obsługi przedzialu, std. co przedzial
  35.    $godzina=60*60;
  36.    $dzien=$godzina*24;
  37.    $miesiac=$dzien*30;
  38.    $rok=$miesiac*12;
  39.    $movx=80;
  40.    $movy=25;
  41.    
  42.    $quantum=$godzina*34;
  43.    $currenttime=time();
  44.    $ymax=150;
  45.    $xmax=500;
  46.  
  47.    if($stats = $DB->GetRow('SELECT SUM(download) AS download, SUM(upload) AS upload
  48.                FROM stats WHERE nodeid=? AND dt>?',
  49.                array($nodeid, $currenttime-$quantum)))
  50.    {
  51.        $result['downavg'] = $stats['download']/$quantum;
  52.        $result['upavg'] = $stats['upload']/$quantum;
  53.    }
  54.  
  55.  
  56.    $sql_query="SELECT customers.lastname,customers.name FROM customers LEFT JOIN nodes ON (customers.id = nodes.ownerid) WHERE nodes.id=?";
  57.  
  58.    $user=$DB->GetRow($sql_query,array($nodeid));
  59.    $node=$DB->GetRow('SELECT nodes.name,inet_ntoa(nodes.ipaddr) AS adres FROM nodes WHERE id=?',array($nodeid));
  60.  
  61.    $traffimage=imagecreate($xmax,$ymax);
  62.    imagesetthickness($traffimage,2);
  63.    $background=imagecolorallocate($traffimage,240,240,240);
  64.    $textcolor=imagecolorallocate($traffimage,0,0,0);
  65.    $downloadcolor=imagecolorallocate($traffimage,0,180,0);
  66.    $uploadcolor=imagecolorallocate($traffimage,0,0,255);
  67.    $redcolor=imagecolorallocatealpha($traffimage,255,0,0,70);
  68.    imageline($traffimage,0,0,$xmax,0,$textcolor);
  69.    imageline($traffimage,0,$ymax-1,$xmax,$ymax-1,$textcolor);
  70.    imageline($traffimage,0,0,0,$ymax,$textcolor);
  71.    imageline($traffimage,$xmax-1,0,$xmax-1,$ymax,$textcolor);
  72.    
  73.  
  74.        $trans_maks = $DB->GetRow('SELECT MAX(upload) AS upload,MAX(download) AS download, MAX(dt) as lastdt FROM stats WHERE nodeid=? AND dt>?', array($nodeid, $currenttime-$quantum));        
  75.        $lastcount = $DB->GetRow('SELECT upload, download FROM stats where nodeid=? AND dt=?',array($nodeid,$trans_maks['lastdt']));
  76.        $upl_maks = (int)($trans_maks['upload']/300);
  77.        $dwl_maks = (int)($trans_maks['download']/300);
  78.        if($upl_maks>$dwl_maks)
  79.        $stats_maks=$upl_maks;
  80.        else
  81.        $stats_maks=$dwl_maks;
  82.        $stats_maks=$stats_maks*8;
  83.        $podst=$stats_maks;
  84.            $dana=$stats_maks;
  85.        $nkrotnosc=0;
  86.  
  87.        while ($dana>1)
  88.        {
  89.        $dana=$dana/2;
  90.        $nkrotnosc++;
  91.        }
  92.  
  93.        $stats_maks=pow(2,$nkrotnosc);
  94.        $dziel=$stats_maks/4;
  95.  
  96.        do
  97.        {
  98.        while ($stats_maks-$dziel>$podst)
  99.        {
  100.            $stats_maks=$stats_maks-$dziel;
  101.        }
  102.            $dziel=$dziel/2;
  103.        }
  104.        while ($dziel>1024*1024);
  105.        $stats_maks=$stats_maks/8;
  106.        $posx=0;
  107.        
  108.        $lastfirst=1;
  109.        $sredniadwl=0;
  110.        $sredniaupl=0;
  111.        $sredniadzielnik=0;
  112.        $styleline=array($textcolor,IMG_COLOR_TRANSPARENT,IMG_COLOR_TRANSPARENT);    
  113.        imagesetstyle($traffimage,$styleline);
  114.  
  115.        $sql_query="SELECT AVG(upload) AS upload, AVG(download) AS download, CEIL(dt/?)*? AS dts, COUNT(*) as wierszy FROM stats WHERE nodeid=? AND dt>? GROUP BY CEIL(dt/?) ORDER BY dts ASC";
  116.        
  117.        $stats1=$DB->GetAll($sql_query,array($quantum/400,$quantum/400,$nodeid, $currenttime-$quantum,$quantum/400));
  118.  
  119.        $posx=1;
  120.        reset($stats1);
  121.        if (!($fp = fopen('/tmp/danetest.txt', 'w'))) {
  122.            return;
  123.            }
  124.        fprintf($fp,"%f:%f\n",$podst,$stats_maks);    
  125.        $lastdts=0;
  126.        foreach($stats1 as $statsline)
  127.        {
  128.        $download=$statsline['download']/300;
  129.        $upload=$statsline['upload']/300;
  130.        fprintf($fp,"%f:%f:%d\n",$download,$upload,$dts);        
  131.        $download=($download/$stats_maks);
  132.        $upload=($upload/$stats_maks);
  133.        $download=$download*99;
  134.        $upload=$upload*99;
  135.        $dts=$statsline['dts'];
  136.        if($lastdts==0)
  137.        {
  138.        $lastdts=$dts;
  139.        }
  140.        $zerowanie=1;        
  141.        $n=1;
  142.  
  143.        $currentdts=$lastdts;
  144.        while(($dts-$lastdts)>(($quantum/400)*$n))
  145.        {
  146.        $currentdts=(int)($currentdts+$quantum/400);
  147.        fprintf($fp,"dts %d: last %d: quantum %f: curr %d\n",$dts,$lastdts,($quantum/400)*$n,$currentdts);        
  148.  
  149.        $zerowanie=0;
  150.        $upload=0;
  151.        $download=0;
  152.            imagesetthickness($traffimage,0);
  153.            imageline($traffimage,$movx+$posx,135-25,$movx+$posx,135-25-floor($download),$downloadcolor);
  154.            imageline($traffimage,$movx+$posx-1,135-24-$lastupload,$movx+$posx,135-24-$upload,$uploadcolor);
  155.  
  156.        $timehnow=date("H",$currentdts);
  157.        $timemnow=date("i",$currentdts);
  158.        if($timemnow<="4")
  159.        {
  160.            imageline($traffimage,$movx+$posx,135-25,$movx+$posx,10,IMG_COLOR_STYLED);
  161.            imageline($traffimage,$movx+$posx,135-22,$movx+$posx,135-25,$textcolor);
  162.            if($timehnow=="0")
  163.            imageline($traffimage,$movx+$posx,135-25,$movx+$posx,10,$redcolor);
  164.            if(!(fmod($timehnow,2)))
  165.            imagestring($traffimage,1,$movx+$posx-4,135-20,$timehnow,$textcolor);
  166.        }
  167.        $posx++;        
  168.        $n++;
  169.        }
  170.  
  171.        
  172.  
  173.        if($zerowanie==0)
  174.        {
  175.        $lastupload=0;
  176.        }
  177.            imagesetthickness($traffimage,0);
  178.        imageline($traffimage,$movx+$posx,135-25,$movx+$posx,135-25-floor($download),$downloadcolor);
  179.  
  180.        if ($lastfirst==1)
  181.        {
  182.            $lastfirst=0;
  183.            imagesetpixel($traffimage,$movx+$posx,135-25-$upload,$uploadcolor);
  184.        }
  185.        else
  186.        {
  187.        imageline($traffimage,$movx+$posx-1,135-24-$lastupload,$movx+$posx,135-24-$upload,$uploadcolor);
  188.        }
  189.        $lastupload=$upload;
  190.        $timehnow=date("H",$dts);
  191.        $timemnow=date("i",$dts);
  192.        if($timemnow<="4")
  193.        {
  194.            imageline($traffimage,$movx+$posx,135-25,$movx+$posx,10,IMG_COLOR_STYLED);
  195.            imageline($traffimage,$movx+$posx,135-22,$movx+$posx,135-25,$textcolor);
  196.            if($timehnow=="0")
  197.            imageline($traffimage,$movx+$posx,135-25,$movx+$posx,10,$redcolor);
  198.            if(!(fmod($timehnow,2)))
  199.            imagestring($traffimage,1,$movx+$posx-4,135-20,$timehnow,$textcolor);
  200.        }
  201.  
  202.        $lastdts=$dts;
  203.        $posx++;
  204.        $zerowanie=0;
  205.        
  206.        }
  207.        
  208.  
  209.    imageline($traffimage,$movx,135-24,$movx,10,$textcolor);
  210.    imageline($traffimage,$movx+400,135-24,$movx+400,10,$textcolor);
  211.    imageline($traffimage,$movx-2,135-24,$movx+402,135-24,$textcolor);
  212.    imageline($traffimage,$movx-2,10,$movx+402,10,$textcolor);
  213.    $stats_maks=$stats_maks*8;
  214.    if ($stats_maks/1024>1)
  215.        {
  216.        $przedrostek="kb";
  217.        $stats_maks1=$stats_maks/1024;
  218.        }
  219.    if ($stats_maks/(1024*1024)>1)
  220.        {
  221.        $przedrostek="Mb";
  222.        $stats_maks1=$stats_maks/(1024*1024);
  223.        }
  224.    $n=0;
  225.    for($i=0;$i<=105;$i=$i+(101/4))
  226.    {
  227.    imageline($traffimage,$movx-2,10+$i,$movx+2,10+$i,$textcolor);
  228.    imageline($traffimage,$movx-2+400,10+$i,$movx+2+400,10+$i,$textcolor);
  229.    imageline($traffimage,$movx+4,10+$i,$movx-4+400,10+$i,IMG_COLOR_STYLED);
  230.    imagestring($traffimage,1,$movx-40,6+$i,str_pad(round($stats_maks1-($stats_maks1/4*$n),1)." ".$przedrostek,7," ",STR_PAD_LEFT),$textcolor);
  231.    $n++;
  232.    }
  233.    $red1=imagecolorallocate($traffimage,255,0,0);
  234.    $values=array($movx+401,135-27,$movx+401,135-21,$movx+406,135-24);
  235.    imagefilledpolygon($traffimage, $values, 3, $red1);
  236.    imagestringup($traffimage, 2, 1, $ymax-5, iconv("UTF-8","ISO-8859-2",$user['lastname']." ".$user['name']), $textcolor);
  237.    imagestringup($traffimage, 1, 15, $ymax-5, $node['name']." - ".$node['adres'], $textcolor);
  238.    imagestring($traffimage, 2, 45, $ymax-27, "MAX: ".str_pad(round($dwl_maks/1024,2),7," ",STR_PAD_LEFT)." kB/s",$downloadcolor);
  239.    imagestring($traffimage, 2, 45, $ymax-15, "MAX: ".str_pad(round($upl_maks/1024,2),7," ",STR_PAD_LEFT)." kB/s",$uploadcolor);
  240.    imagestring($traffimage, 2, 165, $ymax-27, iconv("UTF-8","ISO-8859-2","ĹšREDNIA: ").str_pad(round(($result['downavg'])/1024,2),7," ",STR_PAD_LEFT)." kB/s",$downloadcolor);
  241.    imagestring($traffimage, 2, 165, $ymax-15, iconv("UTF-8","ISO-8859-2","ĹšREDNIA: ").str_pad(round(($result['upavg'])/1024,2),7," ",STR_PAD_LEFT)." kB/s",$uploadcolor);
  242.    imagestring($traffimage, 2, 310, $ymax-27, "TERAZ: ".str_pad(round(($lastcount['download'])/(1024*300),2),7," ",STR_PAD_LEFT)." kB/s",$downloadcolor);
  243.    imagestring($traffimage, 2, 310, $ymax-15, "TERAZ: ".str_pad(round(($lastcount['upload'])/(1024*300),2),7," ",STR_PAD_LEFT)." kB/s",$uploadcolor);
  244.    imagestring($traffimage, 2, 440, $ymax-27, "DOWNLOAD",$downloadcolor);
  245.    imagestring($traffimage, 2, 440, $ymax-15, "UPLOAD",$uploadcolor);
  246.  
  247.    imagepng($traffimage);
  248.    imagedestroy($traffimage);  
  249.    fclose($fp);
  250. }


Foxx
Myślę, że szybciej otrzymasz pomoc jeżeli wykażesz się inicjatywą i wskażesz kod, który jest odpowiedzialny za generowanie opisu osi X. Teraz wymagasz od nas analizy 300 linii kodu dostal.gif
gabcio
od 60 lini w duł smile.gif
Foxx
Ok, jesteśmy coraz bliżej. Określ jaka zmienna jest wyświetlana jako opis osi X.
gabcio
$przedrostek = Góra

$timehnow=date("H",$currentdts);
$timemnow=date("i",$currentdts);
if($timemnow<="4")

Prawo
Foxx
Zauważ, że zmienna rysowana za pomocą imagestring()" title="Zobacz w manualu PHP" target="_manual to $timehnow:
  1. <?php
  2. imagestring($traffimage,1,$movx+$posx-4,135-20,$timehnow,$textcolor)
  3. ?>

Co się zgadza z wartościami na obrazku (nie przekraczają 24).
I teraz się pojawia pytanie: chcesz żeby tam się wyświetlały nazwy dni, ale może ten skrypt jest dostosowany do wyświetlania godzin? Jeżeli tak, to obawiam się, że Twój kod potrzebuje większej obróbki niż tylko zmiana opisu osi X.
Z jakich danych jest generowany wykres?
gabcio
Z iptables do bazy danych
Foxx
Raczej sam sobie miałeś na to odpowiedzieć. Chodzi mi o to, że jeżeli ten skrypt generuje wykres dla dnia to żeby generował dane dla dni tygodnia nie wystarczy zmienić opis osi X. Jeżeli chcesz go przerobić to lepszym działem byłby dział "oferty". Oczywiście jeżeli jesteś w stanie zmodyfikować go sam to zrób to a jak będziesz miał problemy to pytaj.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.