Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP + MySQL] Próba stworzenia tabeli
Forum PHP.pl > Forum > Przedszkole
henio
Chciałem stowrzyć tabelę (jakby w locie), która będzie sama liczyć punkty.

  1. <?php
  2. include("admin/funkcje.php");
  3. include("admin/baza.php");
  4.  
  5. echo "<table><tr><th>Miejsce</th><th>Drużyna</th><th>Punkty</th></tr>\n";
  6. $wynik = mysqli_query($mysql, "SELECT * FROM druzyny WHERE sezon = 20072008");
  7. $teamy = mysqli_num_rows($wynik);
  8.  
  9. for ($i=0; $i<$teamy; $i++)
  10. {
  11. $rekord = mysqli_fetch_assoc($wynik);
  12.  
  13. $team = $rekord['druzyna'];
  14. $wynik2 = mysqli_query($mysql, "SELECT * FROM terminarz WHERE sezon = 20072008 AND rozgrywki = 'Premiership' AND (gospodarz = '".$rekord['druzyna']."' OR gosc = '".$rekord['druzyna']."') AND wynik > 0");
  15. $punkty = 0;
  16. while($wynik2 && $rekord2 = mysqli_fetch_assoc($wynik2))
  17. {
  18. if($rekord2['gospodarz'] == $rekord['druzyna'])
  19. {
  20. $wynik = $rekord2['wynik'];
  21. $rezultat = explode(' - ', $wynik);
  22. if($rezultat['0'] > $rezultat['1'])
  23. {
  24. $punkty = $punkty + 3;
  25. }
  26. elseif($rezultat['0'] = $rezultat['1'])
  27. {
  28. $punkty = $punkty + 1;
  29. }
  30. }
  31. elseif($rekord2['gosc'] == $rekord['druzyna'])
  32. {
  33. $wynik = $rekord2['wynik'];
  34. $rezultat = explode(' - ', $wynik);
  35. if($rezultat['0'] < $rezultat['1'])
  36. {
  37. $punkty = $punkty + 3;
  38. }
  39. elseif($rezultat['0'] = $rezultat['1'])
  40. {
  41. $punkty = $punkty + 1;
  42. }
  43. }
  44. }
  45. echo "<tr><td>".($i+1).".</td><td>".$team."</td><td>".$punkty."</td></tr>\n";
  46.  
  47. }
  48.  
  49. echo "</table>\n";
  50. ?>

Wyświetla mi się:
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, string given in C:\Program Files\Apache Group\Apache2\htdocs\stronka\tabela.php on line 12 ---> 19 RAZY

Pod tym jest tabela:
Gdzie dobrze wypełniona jest pierwsza kolumna. W ten sposób (Oczywiście podaje tu kod html generowany):
  1. <table><tr><th>Miejsce</th><th>Drużyna</th><th>Punkty</th></tr>
  2. <tr><td>1.</td><td>Arsenal Londyn</td><td>4</td></tr>
  3. <tr><td>2.</td><td></td><td>0</td></tr>
  4. <tr><td>3.</td><td></td><td>0</td></tr>
  5. <tr><td>4.</td><td></td><td>0</td></tr>
  6. <tr><td>5.</td><td></td><td>0</td></tr>
  7. <tr><td>6.</td><td></td><td>0</td></tr>
  8. <tr><td>7.</td><td></td><td>0</td></tr>
  9. <tr><td>8.</td><td></td><td>0</td></tr>
  10. <tr><td>9.</td><td></td><td>0</td></tr>
  11. <tr><td>10.</td><td></td><td>0</td></tr>
  12. <tr><td>11.</td><td></td><td>0</td></tr>
  13. <tr><td>12.</td><td></td><td>0</td></tr>
  14. <tr><td>13.</td><td></td><td>0</td></tr>
  15. <tr><td>14.</td><td></td><td>0</td></tr>
  16. <tr><td>15.</td><td></td><td>0</td></tr>
  17. <tr><td>16.</td><td></td><td>0</td></tr>
  18. <tr><td>17.</td><td></td><td>0</td></tr>
  19. <tr><td>18.</td><td></td><td>0</td></tr>
  20. <tr><td>19.</td><td></td><td>0</td></tr>
  21. <tr><td>20.</td><td></td><td>0</td></tr>


Pozwoliłem sobie przenieść tagi na początek tematu by były widoczniejsze. Pozdrawiam! drPayton
SirZooro
W liniach 21 i 34 nadpisujesz sobie to co zwróciła funkcja mysqli_query() w linii 7. Najprościej zmień nazwę zmiennej smile.gif
henio
Dzięki za pomoc, teraz jest juz okey. Zastanawiam się teraz jak posortować po punktach malejąco. Czy ma ktoś jakiś pomysł na to?

Widzę, że nie spotkałem się z odzewem. Ponawiam prośbę.
JaRoPHP
Cytat(henio @ 4.12.2007, 20:11:36 ) *
Zastanawiam się teraz jak posortować po punktach malejąco.

Dodaj do odpowiedniego zapytania SQL klauzulę sortowania:
  1. ... ORDER BY punkty DESC
henio
Problem w tym ze ja nie mam takiej kolumny w tabeli
JaRoPHP
Cytat(henio @ 4.12.2007, 21:47:15 ) *
Problem w tym ze ja nie mam takiej kolumny w tabeli
To zmienia postać rzeczy :-).

W pętli która tworzy Ci wydruk tabeli, buduj tablicę, tak, aby miała postać poniżej, następnie ją posortj.
  1. <?php
  2. $tbl = array ('Arsenal' => 20, 'Sunderland' => 4, 'Bolton' => 10, 'Chelsea' => 3);
  3. asort($tbl, SORT_NUMERIC);
  4. ?>

Na koniec pozostanie Ci zbudowanie pętli przechodzącej przez posortowana tablicę - aby wydrukować jej zawartość.
henio
Próbowałem zrobić jak pisałeś, więc dodałem tablicę do pętli, w której drukuje mi informacje z bazy danych

  1. <?php
  2. include("admin/funkcje.php");
  3. include("admin/baza.php");
  4.  
  5. echo "<table><tr><th>Miejsce</th><th>Drużyna</th><th>Mecze</th><th>Punkty</th><th>Bramki</th><th>Punkty u siebie</th><th>Punkty na wyjeździe</th><th>Bramki w siebie</th><th>Bramki na wyjeździe</th></tr>\n";
  6. $wynik = mysqli_query($mysql, "SELECT * FROM druzyny WHERE sezon = 20072008");
  7. $teamy = mysqli_num_rows($wynik);
  8.  
  9. for ($i=0; $i<$teamy; $i++)
  10. {
  11. $rekord = mysqli_fetch_assoc($wynik);
  12.  
  13. $team = $rekord['druzyna'];
  14. $wynik2 = mysqli_query($mysql, "SELECT * FROM terminarz WHERE sezon = 20072008 AND rozgrywki = 'Premiership' AND (gospodarz = '".$rekord['druzyna']."' OR gosc = '".$rekord['druzyna']."') AND wynik != '-'");
  15. $punkty = 0;
  16. $mecze = 0;
  17. $bramki = 0;
  18. $straty = 0;
  19. $bramkihome = 0;
  20. $bramkiaway = 0;
  21. $stratyhome = 0;
  22. $stratyaway = 0;
  23. $punktyhome = 0;
  24. $punktyaway = 0;
  25. while($wynik2 && $rekord2 = mysqli_fetch_assoc($wynik2))
  26. {
  27. if($rekord2['gospodarz'] == $rekord['druzyna'])
  28. {
  29. $wynik4 = $rekord2['wynik'];
  30. $rezultat = explode(' - ', $wynik4);
  31. $ab = $rezultat['0'];
  32. $abc = $rezultat['1'];
  33. $bramki = $bramki + $rezultat['0'];
  34. $straty = $straty + $rezultat['1'];
  35. $bramkihome = $bramkihome + $rezultat['0'];
  36. $stratyhome = $stratyhome + $rezultat['1'];
  37. if($ab > $abc)
  38. {
  39. $punkty = $punkty + 3;
  40. $punktyhome = $punktyhome + 3;
  41. }
  42. elseif($abc > $ab)
  43. {
  44. $punkty = $punkty + 0;
  45. $punktyhome = $punktyhome + 0;
  46. }
  47. elseif($ab = $abc)
  48. {
  49. if($ab > $abc && $abc > $ab)
  50. {
  51. $punkty = $punkty + 0;
  52. $punktyhome = $punktyhome + 0;
  53. }
  54. else
  55. {
  56. $punkty = $punkty + 1;
  57. $punktyhome = $punktyhome + 1;
  58. }
  59. }
  60. $mecze = $mecze + 1;
  61. }
  62. elseif($rekord2['gosc'] == $rekord['druzyna'])
  63. {
  64. $wynik4 = $rekord2['wynik'];
  65. $rezultat = explode(' - ', $wynik4);
  66. $ab = $rezultat['0'];
  67. $abc = $rezultat['1'];
  68. $bramki = $bramki + $rezultat['1'];
  69. $straty = $straty + $rezultat['0'];
  70. $bramkiaway = $bramkiaway + $rezultat['1'];
  71. $stratyaway = $stratyaway + $rezultat['0'];
  72. if($ab < $abc)
  73. {
  74. $punkty = $punkty + 3;
  75. $punktyaway = $punktyaway + 3;
  76. }
  77. elseif($ab > $abc)
  78. {
  79. $punkty = $punkty + 0;
  80. $punktyaway = $punktyaway + 0;
  81. }
  82. elseif($ab = $abc)
  83. {
  84. if($ab > $abc && $abc > $ab)
  85. {
  86. $punkty = $punkty + 0;
  87. $punktyaway = $punktyaway + 0;
  88. }
  89. else
  90. {
  91. $punkty = $punkty + 1;
  92. $punktyaway = $punktyaway + 1;
  93. }
  94. }
  95. $mecze = $mecze + 1;
  96. }
  97. }
  98. $tbl = array( array('Klub'=> "$team",
  99. 'Mecze'=> "$mecze",
  100. 'Punkty'=> "$punkty",
  101. 'Bramki'=> "$bramki - $straty",
  102. 'Punktyhome'=> "$punktyhome",
  103. 'Punktyaway'=> "$punktyaway",
  104. 'Bramkihome'=> "$bramkihome - $stratyhome",
  105. 'Bramkiaway'=> "$bramkiaway - $stratyaway"
  106. ),
  107.  
  108. );
  109. @rsort($tbl['0']['Punkty']);
  110. #rsort($tbl, SORT_NUMERIC);
  111.  
  112. echo "<tr><td>".($i+1).".</td><td>".$team."</td><td>".$mecze."</td><td>".$punkty."</td><td>".$bramki." - ".$straty."</td>";
  113. echo "<td>".$punktyhome."</td><td>".$punktyaway."</td><td>".$bramkihome." - ".$stratyhome."</td><td>".$bramkiaway." - ".$stratyaway."</td></tr>\n";
  114. }
  115. echo "</table>\n";
  116.  
  117. $ilosc_kolumn = count($tbl);
  118. if ($ilosc_kolumn == 0)
  119.  {
  120. echo'<p>Brak Danych</p>';
  121.  }
  122. else
  123. {
  124. echo "<table border='1' style='border-collapse: collapse'>\n";
  125. echo "<tr><th bgcolor='#CCCFF'>Miejsce</th><th bgcolor='#CCCFF'>Drużyna</th><th bgcolor='#CCCFF'>Mecze</th><th bgcolor='#CCCFF'>Punkty</th><th bgcolor='#CCCFF'>Bramki</th><th bgcolor='#CCCFF'>Punkty u siebie</th><th bgcolor='#CCCFF'>Punkty na wyjeździe</th><th bgcolor='#CCCFF'>Bramki u siebie</th><th bgcolor='#CCCFF'>Bramki na wyjeździe</th>\n";
  126. for ($i=0; $i<$ilosc_kolumn; $i++)
  127. {
  128. $y = $i + 1;
  129. echo "<tr><td><b>".$y.".</b></td><td>".$tbl[$i]['Klub']."</td><td>".$tbl[$i]['Mecze']."</td><td>".$tbl[$i]['Punkty']."</td><td>".$tbl[$i]['Bramki']."</td>";
  130. echo "<td>".$tbl[$i]['Punktyhome']."</td><td>".$tbl[$i]['Punktyaway']."</td><td>".$tbl[$i]['Bramkihome']."</td><td>".$tbl[$i]['Bramkiaway']."</td></tr>\n";
  131. }
  132. }
  133. ?>


Efekt nie jest taki jakbym chciał. Otóż tablica $tbl jest tak jakby nadpisywana w efekcie czego mam tylko ostatni klub w tablicy. Czy ktoś wie co jest źle?

Czy ktoś mi odpowie?
JaRoPHP
Cytat(henio @ 8.12.2007, 23:31:12 ) *
Czy ktoś mi odpowie?
Tak smile.gif.
Masz bardzo duży bałagan w kodzie. Powoduje to, że jest on nieczytelny, dlatego mały odzew.

Również masz sporo błędów, np:
- w pętli for wykonujesz zapytania mysql, a spokojnie możesz je dać przed pętlę (oczywiście wraz z mysqli_fetch_array).

Cytat(henio @ 8.12.2007, 23:31:12 ) *
Otóż tablica $tbl jest tak jakby nadpisywana w efekcie czego mam tylko ostatni klub w tablicy
A ten kod, to co:
  1. <?php
  2. $tbl = array( array('Klub'=> "$team",
  3. 'Mecze'=> "$mecze",
  4. 'Punkty'=> "$punkty",
  5. 'Bramki'=> "$bramki - $straty",
  6. 'Punktyhome'=> "$punktyhome",
  7. 'Punktyaway'=> "$punktyaway",
  8. 'Bramkihome'=> "$bramkihome - $stratyhome",
  9. 'Bramkiaway'=> "$bramkiaway - $stratyaway"
  10. ),
  11.  
  12. );
  13. ?>
Nigdzie nie dodajesz elementów do tablicy, tylko zawsze tworzysz (nadpisujesz) nową.
marcio
Czy chodzi o to czy znowu zle zrozumialem http://www.chechlo.net/nauka/php2/pliki/18.htm
henio
Cytat(marcio @ 9.12.2007, 19:41:53 ) *
Czy chodzi o to czy znowu zle zrozumialem http://www.chechlo.net/nauka/php2/pliki/18.htm

Nie nie chodzi mi o to

O to mi chodzi:
Czy jest jakiś sposób na zapisanie danych do tabilcy, danych które są otrzymywane z bazy danych za pomocą pętli.

Przykładowo:
Pobieram z tabeli w bazie MySQL wszystkie mecze drużyny A i drużyny B, obliczam na ich podstawie ilość meczów, punkty i bramki i te dane chce zapisać do tablicy aby posortować nowe dane malejąco po punktach.

Nowe dane nie są tożsame z danymi pobranymi z bazy danych
mrjozo
na początku np linia 9:

  1. <?php
  2. $tbl = array();
  3. ?>


w pętli zamiast tego co masz, wstaw to ponieżej:

  1. <?php
  2. $tbl[] = array('Klub'=> "$team",
  3. 'Mecze'=> "$mecze",
  4. 'Punkty'=> "$punkty",
  5. 'Bramki'=> "$bramki - $straty",
  6. 'Punktyhome'=> "$punktyhome",
  7. 'Punktyaway'=> "$punktyaway",
  8. 'Bramkihome'=> "$bramkihome - $stratyhome",
  9. 'Bramkiaway'=> "$bramkiaway - $stratyaway");
  10. ?>
henio
Dzięki za pomoc, teraz już wszystkie kolumny wyświetlają się w tabeli. Problemem teraz wydaje się być sortowanie. Otóż:

  1. <?php
  2. $tbl[] = array('Klub'=> "$team",
  3. 'Mecze'=> "$mecze",
  4. 'Punkty'=> "$punkty",
  5. 'Bramki'=> "$bramki - $straty",
  6. 'Punktyhome'=> "$punktyhome",
  7. 'Punktyaway'=> "$punktyaway",
  8. 'Bramkihome'=> "$bramkihome - $stratyhome",
  9. 'Bramkiaway'=> "$bramkiaway - $stratyaway"
  10. );
  11.  
  12. rsort($tbl['0']['Punkty']);
  13. ?>


Wówczas wyświetla mi się 20 razy (111 linijka: rsort($tbl['0']['Punkty'])winksmiley.jpg:
Warning: rsort() expects parameter 1 to be array, string given in C:\Program Files\Apache Group\Apache2\htdocs\stronka\tabela.php on line 111
JaRoPHP
Dokumentacja funkcji rsort" title="Zobacz w manualu PHP" target="_manual() - zapoznaj się.

Tak skonstruowanej tablicy nie posortujesz w ten sposób. Musisz użyć funkcji array_multisort" title="Zobacz w manualu PHP" target="_manual. Zapoznaj się z przykładem 222. Sortowanie wyników zapytań do baz danych.
henio
Nie wiem może jestem dziś jakiś nie kontaktowy, ale jak zrobiłem tak jak w przykładzie to wyskoczyło mi:
Warning: Cannot use a scalar value as an array in C:\Program Files\Apache Group\Apache2\htdocs\stronka\tabela.php on line 129

Warning: Cannot use a scalar value as an array in C:\Program Files\Apache Group\Apache2\htdocs\stronka\tabela.php on line 130

Warning: Cannot use a scalar value as an array in C:\Program Files\Apache Group\Apache2\htdocs\stronka\tabela.php on line 131

Fragment kodu:
  1. <?php
  2. foreach ($tbl as $klucz => $wiersz) {
  3. $mecze[$klucz] = $wiersz['Mecze'];
  4. $punkty[$klucz] = $wiersz['Punkty'];
  5. $bramki[$klucz] = $wiersz['Bramki'];
  6. }
  7. array_multisort($punkty, SORT_DESC, $bramki, SORT_DESC, $tbl);
  8. ?>

Przy czym są to linijki od 128 do 133
JaRoPHP
Cytat(henio @ 11.12.2007, 22:32:52 ) *
Nie wiem może jestem dziś jakiś nie kontaktowy, ale jak zrobiłem tak jak w przykładzie to wyskoczyło mi: ...
Widocznie nie zrobiłeś jak w przykładzie.

  1. <?php
  2.  
  3. $tbl[] = array('Klub' => 'FC Barcelona', 'Mecze' => 5, 'Punkty' => 8);
  4. $tbl[] = array('Klub' => 'AC Milan', 'Mecze' => 5, 'Punkty' => 15);
  5. $tbl[] = array('Klub' => 'Werder Brema', 'Mecze' => 5, 'Punkty' => 9);
  6.  
  7. foreach ($tbl as $key => $row) {
  8.  $klub[$key] = $row['Klub'];
  9.  $mecze[$key] = $row['Mecze'];
  10.  $punkty[$key] = $row['Punkty'];
  11. }
  12.  
  13. array_multisort($punkty, SORT_DESC, $klub, SORT_STRING, $tbl);
  14. print_r($tbl);
  15. ?>
henio
Błąd o którym pisałem wcześniej pokonałem. Teraz tylko chcę wyświetlić dane w tabeli.
Kiedy robie tak:
  1. <?php
  2. $ile = count($tbl);
  3. for($i=0; $i<$ile; $i++)
  4. {
  5. echo "<tr><td>".($i+1)."</td><td>".$klub[$key]."</td><td>".$mecze[$key]."</td><td>".$punkty[$key]."</td><td>".$bramki[$key]."</td>";
  6. echo "<td>".$punktyhome[$key]."</td><td>".$punktyaway[$key]."</td><td>".$bramkihome[$key]."</td><td>".$bramkiaway[$key]."</td></tr>\n";
  7. }
  8. ?>

Wyświetlają mi się dane z ostatniego rekordu tablicy
JaRoPHP
Iterujesz pętlę po $i, a potem nie wykorzystujesz tej zmiennej w tablicy $tbl.
henio
Więc już skończyłem ten skrypt i mogę z sporą satysfakcją poprosić o zamknięcie wątku.

Oczywiście wszystkim, którzy pomogli mi w tym skrypcie dziękuje.
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.