Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Porównanie zmiennych
Forum PHP.pl > Forum > Przedszkole
Frugo75
  1. if (strcmp($result_tip, $result == 0))
  2.  
  3. mysql_query("UPDATE user_tips SET points = 3 WHERE match_id = $id");


Znów mam prośbę o pomoc.
$result_tip daje np wynik 1:0, a $result daje 5:2.
Dlaczego strcmp() zwraca zero?

Dodam, że przed if daje echo $result." ---- "."$result_tip"."<hr>";
i mam:
1:0 ---- 1:0
1:0 ---- 5:3

W pierwszym jest ok, ale dlaczego drugi funkcja uznaje za ok?
sowiq
  1. if ( strcmp($result_tip, $result) === 0 )
  2.  
  3. // albo po prostu:
  4.  
  5. if ( $result_tip == $result )
Frugo75
Cytat(sowiq @ 4.06.2014, 12:49:12 ) *
  1. if ( strcmp($result_tip, $result) === 0 )
  2.  
  3. // albo po prostu:
  4.  
  5. if ( $result_tip == $result )


Ani to ani, to znów gdzie jest 5:3, wstawia do bazy 3...
Pyton_000
pokaż szerszy kontekst
Frugo75
Cytat(Pyton_000 @ 4.06.2014, 12:56:03 ) *
pokaż szerszy kontekst

Wklejam całośc.


  1. $checkscore = checkscore(1030); //pobieram mecze
  2. foreach ($checkscore as $checkscores) {
  3.  
  4. $score1 = $checkscores['goals_host'];
  5. $score2 = $checkscores['goals_guest'];
  6. $id = $checkscores['id'];
  7. $result = $score1.":"."$score2";
  8.  
  9. if ($score1 > $score2){
  10.  
  11. $wdl = 'w';
  12. }
  13.  
  14. elseif ($score1 == $score2) {
  15. $wdl = 'd';
  16. }
  17. elseif ($score1 < $score2) {
  18. $wdl = 'l';
  19. }
  20.  
  21.  
  22. dbConnectLocal();
  23. $taketip = taketips($id); //pobieram typy
  24. foreach ($taketip as $taketips) {
  25.  
  26. $score_t1 = $taketips['score1'];
  27. $score_t2 = $taketips['score2'];
  28. $result_tip = $score_t1.":"."$score_t2";
  29.  
  30. $result_tip;
  31.  
  32. if ($score_t1 > $score_t2){
  33.  
  34. $wdl_tip = 'w';
  35. }
  36.  
  37. elseif ($score_t1 == $score_t2) {
  38. $wdl_tip = 'd';
  39. }
  40. elseif ($score_t1 < $score_t2) {
  41. $wdl_tip = 'l';
  42. }
  43.  
  44.  
  45.  
  46.  
  47. dbConnectLocal();
  48. if ($wdl == $wdl_tip){
  49.  
  50. mysql_query("UPDATE user_tips SET points_wdl = 1 WHERE match_id = $id") or die(mysql_error());
  51.  
  52.  
  53. }
  54. else {
  55.  
  56. mysql_query("UPDATE user_tips SET points_wdl = 0 WHERE match_id = $id") or die(mysql_error());
  57. }
  58. echo $result." ---- "."$result_tip"."<hr>";
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66. if ( strcmp($result_tip, $result) === 0 )
  67.  
  68. mysql_query("UPDATE user_tips SET points = 3 WHERE match_id = $id");
  69. }
  70. }
  71.  
  72. ?>
  73.  
Pyton_000
Pokaż co powie
  1. var_dump($result, $result_tip);

zamiast tego echo
Frugo75
Cytat(Pyton_000 @ 4.06.2014, 13:11:35 ) *
Pokaż co powie
  1. var_dump($result, $result_tip);

zamiast tego echo

string(3) "1:0" string(3) "1:0" string(3) "1:0" string(3) "5:3"
Pyton_000
To wstaw jeszcze:
  1. var_dump(strcmp($result_tip, $result));
Frugo75
Cytat(Pyton_000 @ 4.06.2014, 13:20:17 ) *
To wstaw jeszcze:
  1. var_dump(strcmp($result_tip, $result));

Proszę bardzo:
int(0) int(4)
Pyton_000
no i jest ok, aktualizuje tylko w pierwszym przypadku
Frugo75
Cytat(Pyton_000 @ 4.06.2014, 13:24:46 ) *
no i jest ok, aktualizuje tylko w pierwszym przypadku

To dlaczego mi do bazy wstawia 3, userowi, który ma $result_tip = 5:3?

Cytat(Frugo75 @ 4.06.2014, 13:25:53 ) *
To dlaczego mi do bazy wstawia 3, userowi, który ma $result_tip = 5:3?


Co ciekawe....
Jak wstawiłem do testów tak:
  1. if ($result_tip == $result) {
  2.  
  3. mysql_query("UPDATE user_tips SET points = 3 WHERE match_id = $id");
  4. }
  5. elseif ($result_tip != $result) {
  6. mysql_query("UPDATE user_tips SET points = 7 WHERE match_id = $id");
  7. }


To wszystkim wstawił 7. Pomoże ktoś?
sowiq
Cytat(Frugo75 @ 4.06.2014, 12:56:26 ) *
To dlaczego mi do bazy wstawia 3, userowi, który ma $result_tip = 5:3?


Bo tak podałeś w zapytaniu smile.gif
  1. mysql_query("UPDATE user_tips SET points = 3 WHERE match_id = $id");


Jeśli chcesz, żeby "SET points = 3" wstawiło inną wartość niż 3, to muszę Cię rozczarować wink.gif
Frugo75
Cytat(sowiq @ 4.06.2014, 14:03:06 ) *
Bo tak podałeś w zapytaniu smile.gif
  1. mysql_query("UPDATE user_tips SET points = 3 WHERE match_id = $id");


Jeśli chcesz, żeby "SET points = 3" wstawiło inną wartość niż 3, to muszę Cię rozczarować wink.gif


Ale przecież warunek się nie zgadza bo 1:1 nie jest takie samo jak 5:3.
sowiq
Widzisz kolego, na własnej skórze się przekonujesz, że zawsze należy stosować klamry przy instrukcjach warunkowych. Bez tych klamerek dodasz sobie jakiegoś var_dumpa i od razu Ci się wszystko wali.

Porównaj sobie te dwa kody:

  1. $a = 1;
  2. $b = 2;
  3. if( $a == $b )
  4. var_dump($a, $b);
  5. echo "Wykonuję zapytanie!!"
  6.  
  7. // ORAZ
  8. if( $a == $b ){
  9. var_dump($a, $b);
  10. echo "Wykonuję zapytanie!!"
  11. }


Różnica w zapisie bardzo mała, w działaniu ogromna.
Frugo75
Cytat(sowiq @ 4.06.2014, 14:09:18 ) *
Widzisz kolego, na własnej skórze się przekonujesz, że zawsze należy stosować klamry przy instrukcjach warunkowych. Bez tych klamerek dodasz sobie jakiegoś var_dumpa i od razu Ci się wszystko wali.

Porównaj sobie te dwa kody:

  1. $a = 1;
  2. $b = 2;
  3. if( $a == $b )
  4. var_dump($a, $b);
  5. echo "Wykonuję zapytanie!!"
  6.  
  7. // ORAZ
  8. if( $a == $b ){
  9. var_dump($a, $b);
  10. echo "Wykonuję zapytanie!!"
  11. }


Różnica w zapisie bardzo mała, w działaniu ogromna.


Dzięki kolego, ale nawet jak mam wklamerkach, to jest to samo. Zapytanie się wykonuje, tylko wstawia wartosc 3 nawet jesli $result nie jest taka sam jak $result_tip. I tego nie kumam. Może to przez którą pętlę?

Mam teraz tak i znów wstawia 3 wszystkim:
  1.  
  2. if ($result_tip == $result) {
  3.  
  4. mysql_query("UPDATE user_tips SET points = 3 WHERE match_id = $id");
  5. }
sowiq
To zrób tak:

  1. if ($result_tip == $result) {
  2. echo '<br />---------<br />';
  3. var_dump($result_tip, $result, $result_tip == $result, $id);
  4. echo '<br />---------<br />';
  5.  
  6. mysql_query("UPDATE user_tips SET points = 3 WHERE match_id = $id");
  7. }


i pokaż wynik.
Frugo75
Cytat(sowiq @ 4.06.2014, 14:25:01 ) *
To zrób tak:

  1. if ($result_tip == $result) {
  2. echo '<br />---------<br />';
  3. var_dump($result_tip, $result, $result_tip == $result, $id);
  4. echo '<br />---------<br />';
  5.  
  6. mysql_query("UPDATE user_tips SET points = 3 WHERE match_id = $id");
  7. }


i pokaż wynik.


---------
string(3) "1:0" string(3) "1:0" bool(true) string(4) "1030"
---------
sowiq
No i z tego wynika, że ten fragment kodu zrobił powinien zrobić tylko jeden update, rekordu o ID = 1030.

Jeśli coś jeszcze zmieniło się w bazie, to musiał to zrobić inny kawałek kodu, w innym miejscu.
Frugo75
Cytat(sowiq @ 4.06.2014, 14:49:26 ) *
No i z tego wynika, że ten fragment kodu zrobił powinien zrobić tylko jeden update, rekordu o ID = 1030.

Jeśli coś jeszcze zmieniło się w bazie, to musiał to zrobić inny kawałek kodu, w innym miejscu.

OK. Tylko który?
sowiq
W pliku, który wkleiłeś powyżej widzę trzy razy zapytanie SQL UPDATE. Pokazałem Ci powyżej jak debugować. Rusz trochę głową i znajdź kolejne miejsca, gdzie niechciane zapytanie się wykonuje.
nospor
Ja tylko dodam, że Frugo nie precyzowal konkretnego rekordu w warunku UPDATE, tylko kilka, stąd wlasnie zapisywal 3 do kilku rekordow a nie jednego smile.gif

Sprawa rozwiązana
Pyton_000
Nospor jest jak mędrzec. Siedzi cicho i obserwuje. Nic nie mówi tylko śmieje się w duchu. Ale jak już coś powie to wszystkim szczęki opadają bo wiedzą że ma Zawsze rację haha.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.