Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Pętła w pętli głupieje i ja też
Forum PHP.pl > Forum > Przedszkole
Frugo75
Jeszcze raz proszę o pomoc.

Chce dodac punkty zawodnikom za udzial w meczu zalezy od wyniku.
W tabeli mecze mam oczywiscie wszystkie dane w tym najwazniejsze punkty

Pozniej z tabeli lineup pobieram dane zawodnikow, ktorzy byli w skladzie w tych meczach. I tym chce przyznac punkty zalezne od wyniku.

No i cos miesza mi sie z petlami, bo albo wyswietla wszystkich zawodnikow, ale jeden mecz, albo ...inne glupoty.

oto kod:

  1.  
  2. $result = mysql_query("SELECT * FROM matches");
  3.  
  4. while ($mecz = mysql_fetch_assoc($result)) {
  5.  
  6. $host_id = $mecz['host_id'];
  7. $guest_id = $mecz['guest_id'];
  8. $host = $mecz['host'];
  9. $guest = $mecz['guest'];
  10. $score_host = $mecz['score_host'];
  11. $score_guest = $mecz['score_guest'];
  12.  
  13.  
  14.  
  15. if ($score_guest == $score_host) {
  16.  
  17. $points_host = '1';
  18. $points_guest = '1';
  19. }
  20.  
  21. if ($score_guest > $score_host) {
  22.  
  23. $points_host = '0';
  24. $points_guest = '3';
  25.  
  26. }
  27.  
  28. if ($score_guest < $score_host) {
  29.  
  30. $points_host = '3';
  31. $points_guest = '0';
  32.  
  33. }
  34.  
  35.  
  36.  
  37.  
  38.  
  39. //lineup
  40.  
  41. $result2 = mysql_query("SELECT * FROM lineup WHERE round_id = 1");
  42.  
  43. while ($line = mysql_fetch_assoc($result2)) {
  44.  
  45. $player_id = $line['player_id'];
  46. $round_id = $line['round_id'];
  47.  
  48.  
  49. echo $points_host." - "."-".$player_id."<hr>";
  50.  
  51. }
  52.  
  53.  
  54.  
  55. if (isset($points_host)) {
  56.  
  57.  
  58. $result3 = mysql_query("INSERT INTO lineup_points (points, round_id, player_id) VALUES ('$points_host', '$round_id', '$player_id') ") or die(mysql_error());
  59.  
  60. }
  61. else {
  62. $result4 = mysql_query("INSERT INTO lineup_points (points, points, round_id, player_id) VALUES ('$points_guest',, '$round_id', '$player_id') ") or die(mysql_error());
  63. }
  64.  
  65.  
  66. }
freemp3
Czy przypadkiem te inserty co są na dole nie powinny być w wewnętrznej pętli while?
Frugo75
Cytat(freemp3 @ 17.03.2014, 12:48:31 ) *
Czy przypadkiem te inserty co są na dole nie powinny być w wewnętrznej pętli while?


Jeśli zamknę wewnetrzna petle while za insertami, to wtedy pokazuje cztery serie $player_id. Jesli jesli ich w bazie 10 bedzie to 4x10.
Turson
Jeżeli zamykasz pętlę przed insertami to nie ma to sensu, bo insert wykona się raz, a
  1. $player_id = $line['player_id'];
  2. $round_id = $line['round_id'];

nie jest tablicą, więc w zmiennych zostaje ostatni rekord
Frugo75
Cytat(Turson @ 17.03.2014, 13:06:07 ) *
Jeżeli zamykasz pętlę przed insertami to nie ma to sensu, bo insert wykona się raz, a
  1. $player_id = $line['player_id'];
  2. $round_id = $line['round_id'];

nie jest tablicą, więc w zmiennych zostaje ostatni rekord


To jak to sensownie zrobic?
Turson
Czemu w jednym miejscu masz echo $points_host a niżej isset($points_host) ?
Insert powinien być w pętli jak już powiedziano
Frugo75
Cytat(Turson @ 17.03.2014, 13:13:49 ) *
Czemu w jednym miejscu masz echo $points_host a niżej isset($points_host) ?
Insert powinien być w pętli jak już powiedziano



Ale jak dam insert w pętli to mi nie działa i wyswietla 4 razy to liste id zawodnikow.

A isset($points_host) - chce dodawac albo $points_host albo $points_guest do points.
freemp3
Wyświetla 4 razy listę zawodników ponieważ masz 4 mecze.

Linia 49: wyświetlasz zmienną $points_host
Linia 55: sprawdzasz czy istnieje

Gdzie tu logika? To tak jakbyś najpierw wsiadał do samochodu, a później sprawdzał czy w ogóle jest w garażu.
Frugo75
Cytat(freemp3 @ 17.03.2014, 13:33:32 ) *
Wyświetla 4 razy listę zawodników ponieważ masz 4 mecze.

Linia 49: wyświetlasz zmienną $points_host
Linia 55: sprawdzasz czy istnieje

Gdzie tu logika? To tak jakbyś najpierw wsiadał do samochodu, a później sprawdzał czy w ogóle jest w garażu.


OK. Masz racje.
Jak w takim razie jednym insertem wstawic dane $points_host i $points_guest, zeby nie wstawial dwoch wartosci do jednego pola?
freemp3
Dodaj jakąś zmienną, w której będziesz przechowywał wartość true/false i w zależności od tego wykonaj odpowiednie działanie.
Frugo75
Cytat(freemp3 @ 17.03.2014, 13:33:32 ) *
Wyświetla 4 razy listę zawodników ponieważ masz 4 mecze.

Linia 49: wyświetlasz zmienną $points_host
Linia 55: sprawdzasz czy istnieje

Gdzie tu logika? To tak jakbyś najpierw wsiadał do samochodu, a później sprawdzał czy w ogóle jest w garażu.


No i nie działa. Zrobiłem jak mowiłeś i na razie chce wstawic tylko punkty zawodników gospodarzy $points_host.
Insert jest w wewnetrznej petli i dalej 4 x po liczba zawodnikow i kazdemu dopisane punkty 1,1,3,1. A powinien dopisac 3 tylko tym co rzeczywiscie grali w zwycieskim meczu.

Kod:
  1. $result = mysql_query("SELECT * FROM matches");
  2.  
  3. while ($mecz = mysql_fetch_assoc($result)) {
  4.  
  5. $host_id = $mecz['host_id'];
  6. $guest_id = $mecz['guest_id'];
  7. $host = $mecz['host'];
  8. $guest = $mecz['guest'];
  9. $score_host = $mecz['score_host'];
  10. $score_guest = $mecz['score_guest'];
  11.  
  12.  
  13.  
  14. if ($score_guest == $score_host) {
  15.  
  16. $points_host = '1';
  17. $points_guest = '1';
  18. }
  19.  
  20. if ($score_guest > $score_host) {
  21.  
  22. $points_host = '0';
  23. $points_guest = '3';
  24.  
  25. }
  26.  
  27. if ($score_guest < $score_host) {
  28.  
  29. $points_host = '3';
  30. $points_guest = '0';
  31.  
  32. }
  33.  
  34.  
  35.  
  36. //lineup
  37.  
  38. $result2 = mysql_query("SELECT * FROM lineup WHERE round_id = 1");
  39.  
  40. while ($line = mysql_fetch_assoc($result2)) {
  41.  
  42. $player_id = $line['player_id'];
  43. $round_id = $line['round_id'];
  44.  
  45.  
  46. $result3 = mysql_query("INSERT INTO lineup_points (points, round_id, player_id) VALUES ('$points_host', '$round_id', '$player_id') ") or die(mysql_error());
  47.  
  48.  
  49. }
  50.  
  51. }
  52.  
freemp3
W takim razie druga pętla oraz zapytanie przed nią powinny być w warunku:
  1. if($points_host == '3')
com
jakbyś tak użył przy tych warunkach else to by było dobrze tongue.gif
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.