Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z obliczeniami
Forum PHP.pl > Forum > Przedszkole
Ulysess
witam , napisałem skrypt który wyświetla dane usera oraz oblicza czy wartość jest wyższa od poprzedniej , jeśli tak strzałka w górę jeśli nie w dół . nie wiem czemu ale skrypt źle działa i niestety nie znam przyczyny tego..
skrypt wygląda następująco:
  1. $date = $_GET['data'];
  2.  
  3. if($_SESSION['vip'] == 2)
  4. {
  5. $tr_naglowek = '<td class="itemnazwa">Delete</td>';
  6. }
  7.  
  8. echo '<table class="itemy">
  9. <tr class="c" onMouseOver="this.className=\'d\'" onMouseOut="this.className=\'c\'">
  10. <td class="itemnazwa">L.p</td>
  11. <td class="itemnazwa">Nick</td>
  12. <td class="itemnazwa">Level</td>
  13. <td class="itemnazwa">Punkty</td>
  14. <td class="itemnazwa">Data</td>
  15. '.$tr_naglowek.'
  16. </tr>';
  17. $l = 1;
  18. $p = 0;
  19.  
  20. $zapytanie['logs_players'] = "SELECT a.`name`,b.`level`,b.`points`,b.`time` FROM `list_of_players` a LEFT JOIN `rank_points` b ON a.`id` = b.`id_char` WHERE a.`server` = '".mysql_real_escape_string($world)."' AND a.`name` = '".mysql_real_escape_string($nick)."' AND b.`date` = '".mysql_real_escape_string($date)."' ORDER BY b.`date`,b.`time` DESC LIMIT 1000";
  21. //echo $zapytanie['logs_players'];
  22. $wykonano_zapytanie['logs_players'] = mysql_query($zapytanie['logs_players']) or die(mysql_error());
  23.  
  24.  
  25. $qn = 0;
  26. while($dane = mysql_fetch_assoc($wykonano_zapytanie['logs_players']))
  27. {
  28. $tablica_level[$qn] = $dane['level'];
  29. $tablica_points[$qn] = $dane['points'];
  30. $tablica_points_mieszane[$qn] = $dane['points'];
  31. $tablica_time[$qn] = $dane['time'];
  32. $tablica_nick = $dane['name'];
  33. ++$qn;
  34. }
  35.  
  36. $liczba_rekordow = ($qn-1);
  37.  
  38. $tablica_odwrocona = array_reverse($tablica_points_mieszane);
  39.  
  40. //echo $tablica_odwrocona[0],' / ',$tablica_points[0],'<br>';
  41.  
  42. for($v=0;$v <= $liczba_rekordow;++$v)
  43. {
  44. if($_SESSION['vip'] == 2)
  45. {
  46. $tr_tresc = '<td class="itemy"><a href="index.php?page=profil_punkty&s='.$world.'&nick='.$nick.'&id_del='.$dane_acc['id'].'">X</a></td>';
  47. }
  48.  
  49.  
  50. $obliczenie = number_format($tablica_odwrocona[$v]-$tablica_odwrocona[$v-1],0,0,'');
  51.  
  52. echo $tablica_odwrocona[$v],' / ',$tablica_odwrocona[$v-1],' = ',$obliczenie,' ['.$v.']<br>';
  53.  
  54. if($obliczenie >= 0)
  55. {
  56. $img = '<img src="style/up.jpg" alt="Wzrost" height="8" width="9" />';
  57. }
  58. else
  59. {
  60. $img = '<img src="style/down.jpg" alt="Spadek" height="8" width="9" />';
  61. }
  62.  
  63. ++$p;
  64.  
  65. <tr class="c" onMouseOver="this.className=\'b\'" onMouseOut="this.className=\'c\'">
  66. <td class="itemy"><i><b>'.$l.'</b></i></td>
  67. <td class="itemy">'.$tablica_nick.'</td>
  68. <td class="itemy">'.$tablica_level[$v].'</td>
  69. <td class="itemy">'.number_format($tablica_points[$v],0,0,'.').' ['.$img.']</td>
  70. <td class="itemy">'.$tablica_time[$v].'</td>
  71. '.$tr_tresc.'
  72. </tr>';
  73. ++$l;
  74. }
  75. echo '</table>';
  76.  
  77. $wynik1 = $tablica_points[0] - $tablica_points[$liczba_rekordow];
  78. $wynik2 = ($wynik1*100)/$tablica_points[$liczba_rekordow];
  79. $wynik2 = round($wynik2,5);
  80.  
  81. if($wynik2 < 0)
  82. {
  83. $klasa = 'procent2';
  84. $img = '<img src="style/down.jpg" alt="Spadek" height="8" width="9" />';
  85. }
  86. else
  87. {
  88. $klasa = 'procent';
  89. $img = '<img src="style/up.jpg" alt="Wzrost" height="8" width="9" />';
  90. }
  91.  
  92. <table class="itemy" style="margin-top: 20px;">
  93. <tr class="c" onMouseOver="this.className=\'b\'" onMouseOut="this.className=\'c\'">
  94. <td class="itemy">Przyrost: '.number_format($wynik1,0,0,'.').' Punktów</td>
  95. <td class="itemy">(<span class="'.$klasa.'">'.$wynik2.'</span>%) ['.$img.']</td>
  96. </tr>
  97. </table>';


poniżej zamieszczam link do screena na którym widać błędne działanie skryptu (ze strzałkami)
http://knights.evuzo.com/capture_04112011_190918.jpg
grabos
a nie powinno byc [$v+1]? bo zaczynasz skanowanie od $v = 0 wiec $v - 1 = -1 a takiej pozycji w tablicy nie ma (standardowo wynosi 0)

EDIT:
Własciwie nie wiem czy dobrze Cie zrozumiałem - wcześniejsza w tabeli - czyli ta co jest niżej tak (bo starsza data w tabeli). Jesli tak to obliczając roznice dla N-tego wpisu sprawdzasz co było w N+1 wierszu... i jesli i robisz $w[n] - $w[n+1] - i jesli wynik jest dodatni - to strzałka w góra (czyli wzrost) a jak odwrotnie to w dół
Ulysess
hmm nie wiem może źle myśle ale jeśli
$tablica_odwrocona[0] = 2645754

mam wzrór:
$obliczenie = number_format($tablica_odwrocona[$v]-$tablica_odwrocona[$v-1],0,0,'');

to jeśli $tablica_odwrocona[0] - $tablica_odwrocona[$v-1] (czyli nic) = 2645754 prawda questionmark.gif

wyświetlam w każdej wykonanej pętli wartosc 1 , 2 i wynik w tym przypadku wyszło "2645754 / = -85 [0]" 1 wartosc tablica 0 po slaszu nic czyli tam mialo byc v-1 a w nawiasie kwadratowym v czyli liczba aktualnie wykonywanej pętli.
dodatkowo przy czymś takim : 2644545 / 2644636 = -85 [14] strzałka poszła w górę ale jakim cudem to ja pojęcia nie mam..
grabos
swoją drogą obróciłeś całą tabele 'mieszane'... ale czemu? przez to - sprawdzając dla pierwszego wpisu w tabeli ilosc punktów, sprawdzasz po odwroceniu faktyczna ostatnią wartość, jesli sie nie mylę
Ulysess
odwróciłem ponieważ w normalny sposób nie działało poprawnie z resztą w tym przypadku wystarczy linijke z
$tablica_odwrocona = array_reverse($tablica_points_mieszane);
zamienić na:
$tablica_odwrocona = ($tablica_points_mieszane);
i powinno działać prawda ? ale nie działa..

dalej nie rozumiem czemu źle to działa :/
grabos
a do tego zamieniłes minusik na plusik?
Ulysess
tak próbowałem , teraz wróciłem do starego skryptu czyli bez odwrócenia tablicy z $p+1 w częsci odejmującej i tego się nie da bo nie znam +1 wartości.

może łatwiej było by gdybyś sam zaproponował jak to zrobić bo może po prostu źle myślę i stąd te problemy :[....

hmm
$obliczenie = number_format($tablica_odwrocona[$v]-$tablica_odwrocona[$v+1],0,0,'');
czyli to do czego próbowałeś mnie przekonać działa , przyczyną czemu mi to nie działało bo zmieniłem tylko na $v+1 przy wyświetlaniu a nie we wzorze , jeśli się upernie że działa na 100% sypne plusika i już teraz dziękuje za pomoc smile.gif
grabos
a zobacz to
  1. <?php
  2. $date = $_GET['data'];
  3.  
  4. if($_SESSION['vip'] == 2)
  5. {
  6. $tr_naglowek = '<td class="itemnazwa">Delete</td>';
  7. }
  8.  
  9. echo '<table class="itemy">
  10. <tr class="c" onMouseOver="this.className=\'d\'" onMouseOut="this.className=\'c\'">
  11. <td class="itemnazwa">L.p</td>
  12. <td class="itemnazwa">Nick</td>
  13. <td class="itemnazwa">Level</td>
  14. <td class="itemnazwa">Punkty</td>
  15. <td class="itemnazwa">Data</td>
  16. '.$tr_naglowek.'
  17. </tr>';
  18. $l = 1;
  19. $p = 0;
  20.  
  21. $zapytanie['logs_players'] = "SELECT a.`name`,b.`level`,b.`points`,b.`time` FROM `list_of_players` a LEFT JOIN `rank_points` b ON a.`id` = b.`id_char` WHERE a.`server` = '".mysql_real_escape_string($world)."' AND a.`name` = '".mysql_real_escape_string($nick)."' AND b.`date` = '".mysql_real_escape_string($date)."' ORDER BY b.`date`,b.`time` DESC LIMIT 1000";
  22. //echo $zapytanie['logs_players'];
  23. $wykonano_zapytanie['logs_players'] = mysql_query($zapytanie['logs_players']) or die(mysql_error());
  24.  
  25.  
  26. $qn = 0;
  27. while($dane = mysql_fetch_assoc($wykonano_zapytanie['logs_players']))
  28. {
  29. $tablica_level[$qn] = $dane['level'];
  30. $tablica_points[$qn] = $dane['points'];
  31. $tablica_points_mieszane[$qn] = $dane['points'];
  32. $tablica_time[$qn] = $dane['time'];
  33. $tablica_nick = $dane['name'];
  34. ++$qn;
  35. }
  36.  
  37. $liczba_rekordow = ($qn-1);
  38.  
  39. $tablica_odwrocona = ($tablica_points_mieszane);
  40.  
  41. //echo $tablica_odwrocona[0],' / ',$tablica_points[0],'<br>';
  42.  
  43. for($v=0;$v <= $liczba_rekordow;$v++)
  44. {
  45. if($_SESSION['vip'] == 2)
  46. {
  47. $tr_tresc = '<td class="itemy"><a href="index.php?page=profil_punkty&s='.$world.'&nick='.$nick.'&id_del='.$dane_acc['id'].'">X</a></td>';
  48. }
  49.  
  50.  
  51. $obliczenie = number_format($tablica_odwrocona[$v]-$tablica_odwrocona[$v+1],0,0,'');
  52.  
  53. echo $tablica_odwrocona[$v],' - ',$tablica_odwrocona[$v-1],' = ',$obliczenie,' ['.$v.']<br>';
  54.  
  55. if($obliczenie >= 0)
  56. {
  57. $img = '<img src="style/up.jpg" alt="Wzrost" height="8" width="9" />';
  58. }
  59. else
  60. {
  61. $img = '<img src="style/down.jpg" alt="Spadek" height="8" width="9" />';
  62. }
  63.  
  64. ++$p;
  65.  
  66. echo '
  67. <tr class="c" onMouseOver="this.className=\'b\'" onMouseOut="this.className=\'c\'">
  68. <td class="itemy"><i><b>'.$l.'</b></i></td>
  69. <td class="itemy">'.$tablica_nick.'</td>
  70. <td class="itemy">'.$tablica_level[$v].'</td>
  71. <td class="itemy">'.number_format($tablica_points[$v],0,0,'.').' ['.$img.']</td>
  72. <td class="itemy">'.$tablica_time[$v].'</td>
  73. '.$tr_tresc.'
  74. </tr>';
  75. ++$l;
  76. }
  77. echo '</table>';
  78.  
  79. $wynik1 = $tablica_points[0] - $tablica_points[$liczba_rekordow];
  80. $wynik2 = ($wynik1*100)/$tablica_points[$liczba_rekordow];
  81. $wynik2 = round($wynik2,5);
  82.  
  83. if($wynik2 < 0)
  84. {
  85. $klasa = 'procent2';
  86. $img = '<img src="style/down.jpg" alt="Spadek" height="8" width="9" />';
  87. }
  88. else
  89. {
  90. $klasa = 'procent';
  91. $img = '<img src="style/up.jpg" alt="Wzrost" height="8" width="9" />';
  92. }
  93.  
  94. <table class="itemy" style="margin-top: 20px;">
  95. <tr class="c" onMouseOver="this.className=\'b\'" onMouseOut="this.className=\'c\'">
  96. <td class="itemy">Przyrost: '.number_format($wynik1,0,0,'.').' Punktów</td>
  97. <td class="itemy">(<span class="'.$klasa.'">'.$wynik2.'</span>%) ['.$img.']</td>
  98. </tr>
  99. </table>';
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.