Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Warunki - nie działają
Forum PHP.pl > Forum > Przedszkole
Frugo75
Jeszcze raz proszę o pomoc, bo znów utknąłem.
Mam w bazie takie kolumny
  1. category_id players_id position_id points
  2. 1 2 2 0
  3. 1 1 1 0


I teraz chce zrobic tak, aby dodac punkty do "points" zalezne od wartosci kolumnach category_id i position_id.

Zrobiłem tak, ale nie działa. Zawsze wstawia wartość 8 mimo, że w w drugim wierszy np. wartosc category_id to 1 a wartosc position_id to tez 1, a mimo to wstawia 8. Ktoś mi powie dlaczego?

  1. if ($players_statistics_category == 1 && $players_statistics_position == 1) {
  2. mysql_query("UPDATE fantasy.players_statistics SET points = '15' WHERE category_id = '1' ") or die(mysql_error());;
  3. }
  4.  
  5.  
  6. if ($players_statistics_category == 1 && $players_statistics_position == 2) {
  7. mysql_query("UPDATE fantasy.players_statistics SET points = '8' WHERE category_id = '1'") or die(mysql_error());;
  8. }
  9.  
kujol
Spróbuj drugie if zamienić na elseif
Frugo75
Cytat(kujol @ 7.03.2014, 07:41:01 ) *
Spróbuj drugie if zamienić na elseif


Probowałem i nie działa;(
Przy elseif wstawia wszedzie wartosc 15.
nospor
@kujol po co strzelasz? Przeciez widac wyraznie ze nie w tym problem. Podstawy logiki sie klaniaja
@Frugo, skoro wchodzi ci w 8, znaczy ze wartosci dla 8 są spelnione.

  1. var_dump($players_statistics_category);
  2. var_dump($players_statistics_position);
  3. if ($players_statistics_category == 1 && $players_statistics_position == 1) {
  4. echo 'Jestem w 1';
  5. mysql_query("UPDATE fantasy.players_statistics SET points = '15' WHERE category_id = '1' ") or die(mysql_error());;
  6. }
  7.  
  8.  
  9.  
  10. if ($players_statistics_category == 1 && $players_statistics_position == 2) {
  11. echo 'Jestem w 2';
  12. mysql_query("UPDATE fantasy.players_statistics SET points = '8' WHERE category_id = '1'") or die(mysql_error());;
  13. }


Inna mozliwoscią jest to, ze ten kod masz w jakiejs petli, i ze pomimo iz nawet w za pierwszym razem jest w 1, to za drugim i tak wejdzie w 2 i nadpisze wynik 1

Cytat
Przy elseif wstawia wszedzie wartosc 15.
Czyli za kazdym razem wchodzi ci w kazdego IFa. Czyli widac ze pokazales nam tylko urywek kodu, bo przy takim kodzie co tu wstawiles, nie ma prawa tak robic. Nie ma prawa byc spelniony zarowno pierwszy IF jak i drugi IF jednoczesnie
Frugo75
Cytat(nospor @ 7.03.2014, 07:47:46 ) *
Inna mozliwoscią jest to, ze ten kod masz w jakiejs petli, i ze pomimo iz nawet w za pierwszym razem jest w 1, to za drugim i tak wejdzie w 2 i nadpisze wynik 1


Było w pętli while po zapytaniu do bazy. Wyjąłem if-y poza petle to teraz wstawia wszedzie 15.
nospor
No wlasnie......

Pewnie w petli wyliczasz te wartosci $players_statistics_category oraz $players_statistics_position
No sorki, ale po wykonaniu petli to te wartosci bedą mialy wartosc z ostatniego obrotu petli. Wiec jesli ostatni skonczyl sie na warunku 15, to taki bedzie ostateczny wynik.

POkaz caly kod i napisz co chccesz konretnie osiagnac.
Frugo75
Cytat(nospor @ 7.03.2014, 07:55:29 ) *
Czyli widac ze pokazales nam tylko urywek kodu,


Wklejam zatem cały kod:

  1. <?php
  2. header("Location: match.php");
  3.  
  4.  
  5.  
  6. mysql_connect("localhost","root","") or die(mysql_error()) or die(mysql_error());
  7. mysql_select_db("fantasy");
  8.  
  9.  
  10.  
  11. //players statistics
  12.  
  13. $result5 = mysql_query("SELECT * FROM fantasy.players_statistics") or die(mysql_error());
  14.  
  15.  
  16. while ($statistics = mysql_fetch_assoc($result5)){
  17.  
  18. $players_statistics_id = $statistics['id'];
  19. $players_statistics_match = $statistics['match_id'];
  20. $players_statistics_players = $statistics['players_id'];
  21. $players_statistics_category = $statistics['category_id'];
  22. $players_statistics_position = $statistics['position_id'];
  23.  
  24.  
  25. }
  26.  
  27.  
  28. if ($players_statistics_category == 1 && $players_statistics_position == 1) {
  29.  
  30.  
  31. mysql_query("UPDATE fantasy.players_statistics SET points = '15' WHERE category_id = '1' ") or die(mysql_error());;
  32.  
  33.  
  34. }
  35.  
  36.  
  37. if ($players_statistics_category == 1 && $players_statistics_position == 2) {
  38.  
  39.  
  40. mysql_query("UPDATE fantasy.players_statistics SET points = '8' WHERE category_id = '1'") or die(mysql_error());;
  41.  
  42.  
  43.  
  44. }
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53. ?>



A co chcę osiągnąć? Chce przypisać punkty do points zalezne od wartosci w category_id i position_id.
Jesli np category_id 1 a position_id 1 to punktów 15
Jelsi np category_id 1 a position_id 2 to punktów 8

itp
nospor
Rety... no ale przeciez ci mowie, ze twoje wartosci beda mialy wartosc z ostaniego obrotu petli...

Ty masz te IFy miec w petli, zas tu:
WHERE category_id = '1'
ma nie byc id =1 tylko ID ktore aktualnei przetwarzasz w petli. Wowczas wszystko bedzie dzialac. I nie category_id tylko ID,bo pewnie dla kazdego rekordu chcesz zmienic wartosc pola.


Inna sprawa, ze do tego ci zadna petla nie potrzebna, tylko jeden zwykly UPDATE
Frugo75
Cytat(nospor @ 7.03.2014, 08:07:54 ) *
Inna sprawa, ze do tego ci zadna petla nie potrzebna, tylko jeden zwykly UPDATE


Tzn jak?
Sprobuje po godz. 9.
Pyton_000
  1. while ($statistics = mysql_fetch_assoc($result5)){
  2.  
  3. $players_statistics_id = $statistics['id'];
  4. $players_statistics_match = $statistics['match_id'];
  5. $players_statistics_players = $statistics['players_id'];
  6. $players_statistics_category = $statistics['category_id'];
  7. $players_statistics_position = $statistics['position_id'];
  8.  
  9. if($players_statistics_category == 1) {
  10. $pkt = 0;
  11. switch($players_statistics_position) {
  12. case 1: $pkt = 15; break;
  13. case 2: $pkt = 13; break;
  14. case 3: $pkt = 11; break;
  15. case 4: $pkt = 9; break;
  16. case 5: $pkt = 5; break;
  17. }
  18. mysql_query("UPDATE fantasy.players_statistics SET points = '{$pkt}' WHERE category_id = '1'") or die(mysql_error());
  19. }
  20. }
Frugo75
Cytat(Pyton_000 @ 7.03.2014, 08:11:03 ) *


Dzieki, sprawdze po godz. 9.
Szybki update: po switch wszedzie wstawia 15
nospor
No zalamka..... Pyton i ty tez nie widzisz, ze on ma aktualizowac dany atktualnie przetwarzany rekord a nie za kazdym razem te same?? Czy nawet nie poczatkujacym userom trzeba takie podstawy wyjasniac??

@Frugo i inni
Nie moze byc taki warunek WHERE category_id = '1'" bo za kazdym razem akutalizujecie to samo i za kazdym razem nadpisujecie wyniki poprzedniego UPDATE!
W WHERE ma byc warunek na akutalnie przetwarzany rekord.


Poza tym podkreslam po raz kolejny, tutaj zadna mulaca petla nie jest potrzbna, wystarczy jeden ogolny UPDATE z IF mysql w srodku
Frugo75
Cytat(nospor @ 7.03.2014, 08:33:43 ) *
Nie moze byc taki warunek WHERE category_id = '1'" bo za kazdym razem akutalizujecie to samo i za kazdym razem nadpisujecie wyniki poprzedniego UPDATE!
W WHERE ma byc warunek na akutalnie przetwarzany rekord.



Poza tym podkreslam po raz kolejny, tutaj zadna mulaca petla nie jest potrzbna, wystarczy jeden ogolny UPDATE z IF mysql w srodku


Masz rację zrobiłem tak i działa:
  1. while ($statistics = mysql_fetch_assoc($result5)){
  2.  
  3. $players_statistics_id = $statistics['id'];
  4. $players_statistics_match = $statistics['match_id'];
  5. $players_statistics_players = $statistics['players_id'];
  6. $players_statistics_category = $statistics['category_id'];
  7. $players_statistics_position = $statistics['position_id'];
  8.  
  9.  
  10. }
  11.  
  12.  
  13. if ($players_statistics_category == 1 && $players_statistics_position == 1) {
  14.  
  15.  
  16. mysql_query("UPDATE fantasy.players_statistics SET points = '15' WHERE id = '$players_statistics_id' ") or die(mysql_error());;
  17.  
  18.  
  19. }
  20.  
  21.  
  22. if ($players_statistics_category == 1 && $players_statistics_position == 2) {
  23.  
  24.  
  25. mysql_query("UPDATE fantasy.players_statistics SET points = '8' WHERE id = '$players_statistics_id'") or die(mysql_error());;
  26.  
  27. }
  28.  
  29.  


A jak zrobić bez pętli? z jednym "ogolnym UPDATE z IF mysql w srodku"? Tak z czystej ciekawosci pytam.
nospor
No brawo, wkoncu.

Co do mysql
https://dev.mysql.com/doc/refman/5.0/en/con...tml#function_if

ps: tylke te twoje IF z update co masz teraz to mają byc w petli a nie poza nią. Tak jak masz teraz to tylko zaktualizujesz ostatni rekord.
Frugo75
Cytat(nospor @ 7.03.2014, 08:49:48 ) *
No brawo, wkoncu.


Dziękuję wszystkim za pomoc. Miłego dnia zycze i udanego weekendu
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.