Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] przerobienie pobierania danych z mysql
Forum PHP.pl > Forum > PHP
mazyl
Witam!
Mam oto taki problem.

Chce utowrzyc wykres przy pomocy skryptu, skrypt pobiera dane do wykresu dzięki:
  1. $LabChartsLine->setData(array(7,15,50,21,15,29,15,21,16,-23,4,18,17,21,17,19,16,25,62,15));

gdzie liczby oznaczaja odpowiednie miejsce w wykresie.
Pisałem już w przedszkolu ale nie otrzymałem odpowiedzi.

jak przerobić to tak, aby pobierane były liczby z bazy danych.

dostałem coś takiego:
  1. <?php
  2. $zapytanie = mysql_query("select * from wykres where serwer = ".$serw['id']." order by data DESC");
  3. $array = array();
  4. while ($data = mysql_fetch_assoc($zapytanie)) {
  5. $array[]=$data['gracze'];
  6. }
  7. $LabChartsLine->setData($array);
  8. ?>


Lecz to niestety nie działa.
ktoś ma może jakiś pomysł ? walcze z tym już pare dni i 0 efektów sad.gif
PiotrekM
Twoje rozwiązanie powinno działać. Spróbuj ewentualnie wymusić integer
Kod
$array[]=(int)$data['gracze'];


edit:
nawet sam dla pewności sprawdziłem. Działa bez rzutowania typu smile.gif

sql:
  1. -- phpMyAdmin SQL Dump
  2. -- version 3.4.5
  3. -- <a href="http://www.phpmyadmin.net" target="_blank">http://www.phpmyadmin.net</a>
  4. --
  5. -- Host: localhost
  6. -- Czas wygenerowania: 22 Sty 2012, 00:07
  7. -- Wersja serwera: 5.5.16
  8. -- Wersja PHP: 5.3.8
  9.  
  10. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  11. SET time_zone = "+00:00";
  12.  
  13.  
  14. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  15. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  16. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  17. /*!40101 SET NAMES utf8 */;
  18.  
  19. --
  20. -- Baza danych: `tp`
  21. --
  22.  
  23. -- --------------------------------------------------------
  24.  
  25. --
  26. -- Struktura tabeli dla `wykres`
  27. --
  28.  
  29. CREATE TABLE IF NOT EXISTS `wykres` (
  30. `id` int(11) NOT NULL AUTO_INCREMENT,
  31. `num` int(11) NOT NULL,
  32. PRIMARY KEY (`id`)
  33. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;
  34.  
  35. --
  36. -- Zrzut danych tabeli `wykres`
  37. --
  38.  
  39. INSERT INTO `wykres` (`id`, `num`) VALUES
  40. (1, 18),
  41. (2, 26),
  42. (3, 29),
  43. (4, 19),
  44. (5, 37),
  45. (6, 34),
  46. (7, 34),
  47. (8, 31),
  48. (9, 39),
  49. (10, 49),
  50. (11, 64),
  51. (12, 32),
  52. (13, 36),
  53. (14, 25),
  54. (15, 19),
  55. (16, 17),
  56. (17, 20),
  57. (18, 20),
  58. (19, 17),
  59. (20, 26);
  60.  
  61. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
  62. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
  63. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


php:
  1. <?php
  2. mysql_connect('localhost', 'root', '');
  3.  
  4. $q = mysql_query("SELECT * FROM wykres");
  5.  
  6. $array = array();
  7.  
  8. while($row = mysql_fetch_assoc($q))
  9. {
  10. $array[] = $row['num'];
  11. }
  12.  
  13. include_once('./LabChartsLine.php');
  14. $LabChartsLine = new LabChartsLine();
  15. $LabChartsLine->setData($array);
  16. echo '<img src="'.$LabChartsLine->getChart().'" />';
  17. ?>
  18.  
mazyl
tak teraz mi też działa wink.gif

już mam smile.gif

teraz tylko sie pojawił inny problem.

gdy uzyje :

  1. $LabChartsLine->setAxis (16);


to i tak pokazuje mi co dziesiec na osi oy

a mimo ze najwieksza liczba w tabeli to np 13, pokazuje ja jako 100 na wykresie.
wie ktos może dlaczego ?



wie ktos dlaczego tak jest?
Uriziel01
Nie mam pojęcia do kryje się w `LabChartsLine.php` ale skoro 13 jest wartością największą i widzisz ją jako 100, to zapewne jest to reprezentacja procentowa wyników.
mazyl
  1. <?php
  2. /*
  3.  * LabCharts version 1.2
  4.  * <a href="http://www.code-laboratory.com/" target="_blank">http://www.code-laboratory.com/</a>
  5.  *
  6.  * Copyright (c) 2009 <a href="http://code-laboratory.com" target="_blank">http://code-laboratory.com</a>
  7.  * Dual licensed under the MIT and GPL licenses.
  8.  *
  9.  * 2009-12-04 19:00
  10.  * 2010-01-30 13:25 edited to v 1.1
  11.  * 2010-05-22 22:47 edited to v 1.2
  12.  */
  13.  
  14. include_once(dirname(__FILE__) . '/LabCharts.php');
  15.  
  16. class LabChartsLine extends LabCharts {
  17.  
  18. private $min;
  19. private $max;
  20.  
  21. public function __construct () {
  22. $this->_type = 'lc';
  23. $this->_colors = 'FAAC02';
  24. $this->_size = '300x150';
  25. }
  26. protected function dataToString ($data) {
  27. $str = 't:';
  28. $this->max = max($data);
  29. $this->min = min($data);
  30.  
  31. foreach ($data as $value) {
  32. $newValue = round((1 - ($this->max - $value) / ($this->max - $this->min)) * 100, 3);
  33. $str .= $newValue . ',';
  34. }
  35. return substr($str, 0, -1);
  36. }
  37.  
  38. public function setAxis ($rangeY) {
  39.  
  40. $newRange = round($rangeY / ($this->max - $this->min) * 100, 3);
  41.  
  42. $strLabels = '0:';
  43. $strPosition = '0';
  44. for ($a = $this->getFirstOfRange($rangeY); $a <= $this->max; $a += $rangeY) {
  45. $strLabels .= '|' . $a;
  46. }
  47. for ($a = $this->getFirstGrid($rangeY); $a <= 100; $a += $newRange) {
  48. $strPosition .= ',' . $a;
  49. }
  50. $this->_axis = 'y,x';
  51. $this->_axisRange = $strLabels . '|1:|';
  52. $this->_axisPosition = $strPosition;
  53. }
  54.  
  55. public function setGrids ($rangeY) {
  56. $newRangeY = round($rangeY / ($this->max - $this->min) * 100, 3);
  57. $newRangeX = round(100 / (count($this->baseData) - 1), 2);
  58. $this->_grids = $newRangeX . ',' . $newRangeY . ',3,3,0,' . $this->getFirstGrid($rangeY);
  59. }
  60.  
  61. private function getFirstGrid($rangeY) {
  62. return round((1 - ($this->max - $this->getFirstOfRange($rangeY)) / ($this->max - $this->min)) * 100, 3);
  63. }
  64.  
  65. private function getFirstOfRange($rangeY){
  66. for ($pierwszyPodzielny = $this->min; $pierwszyPodzielny <= $this->max; $pierwszyPodzielny++){
  67. if (abs($pierwszyPodzielny) % $rangeY == 0 || $pierwszyPodzielny == 0)
  68. break;
  69. }
  70. return $pierwszyPodzielny;
  71. }
  72.  
  73. }
  74.  
  75. ?>



jest to caly plik LabChartsLine.php

Uriziel01
To nie jest to zdecydowanie całość kodu bo widzę że jest tu includowany jeszcze jeden plik: `LabCharts` smile.gif

Ale już na pierwszy rzut oka widać że musisz zmienić linię:
Kod
$newValue = round((1 - ($this->max - $value) / ($this->max - $this->min)) * 100, 3);
mazyl
masz pomysł jak to przerobić ?
Uriziel01
Zmienić:
  1. foreach ($data as $value) {
  2. $newValue = round((1 - ($this->max - $value) / ($this->max - $this->min)) * 100, 3);
  3. $str .= $newValue . ',';
  4. }

na:
  1. foreach ($data as $value) {
  2. $str .= $value . ',';
  3. }


Ale pozostanie jeszcze problem skalowania osi, gdyż nadal będą one się skalowały do 100.
mazyl
działa wink.gif teraz własnie jak pozbyć się tego by nie pokazywało do 100 ?

edit:


Pobieram dane do osi oy:
  1. $LabChartsLine->setAxis (16);


moze to w czyms pomoze.
bo po mimo tego os jest dalej do 100

zauważyłem, pewien problem, czasami na osi oY pokazuje np co 20 do 100
tak jak było przy procentowych,

ale zdarza sie, ze na osi oY zaznacza dobrze, np. max 16, ale wyniki na wykresie przedstawiane są daej w takiej postaci jakby maksymajną wartością bylo 100
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.