Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Pętła w pętli głupieje i ja też
Frugo75
post 17.03.2014, 12:30:12
Post #1





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
freemp3
post 17.03.2014, 12:48:31
Post #2





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

Ostrzeżenie: (0%)
-----


Czy przypadkiem te inserty co są na dole nie powinny być w wewnętrznej pętli while?


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
Frugo75
post 17.03.2014, 13:02:36
Post #3





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Turson
post 17.03.2014, 13:06:07
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Frugo75
post 17.03.2014, 13:12:10
Post #5





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Turson
post 17.03.2014, 13:13:49
Post #6





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Czemu w jednym miejscu masz echo $points_host a niżej isset($points_host) ?
Insert powinien być w pętli jak już powiedziano
Go to the top of the page
+Quote Post
Frugo75
post 17.03.2014, 13:28:19
Post #7





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
freemp3
post 17.03.2014, 13:33:32
Post #8





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

Ostrzeżenie: (0%)
-----


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.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
Frugo75
post 17.03.2014, 13:41:04
Post #9





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
freemp3
post 17.03.2014, 13:48:18
Post #10





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

Ostrzeżenie: (0%)
-----


Dodaj jakąś zmienną, w której będziesz przechowywał wartość true/false i w zależności od tego wykonaj odpowiednie działanie.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
Frugo75
post 17.03.2014, 13:56:39
Post #11





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

Ostrzeżenie: (0%)
-----


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.  
Go to the top of the page
+Quote Post
freemp3
post 17.03.2014, 14:36:16
Post #12





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

Ostrzeżenie: (0%)
-----


W takim razie druga pętla oraz zapytanie przed nią powinny być w warunku:
  1. if($points_host == '3')


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
com
post 17.03.2014, 15:39:47
Post #13





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


jakbyś tak użył przy tych warunkach else to by było dobrze tongue.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 07:48