Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z UPDATE w if
Forum PHP.pl > Forum > Bazy danych
Bootsyou
Mam pewien skrypcik, który wymaga sporo if w zależności czy liczba jest większa od tego czy owego... Tak, czy inaczej MySQL z niewiadomego powodu nie chce wykonać UPDATE przy tym if'ie:

  1. f ($is_it_there==$name AND $result>$is_it_there2 AND $result>$is_it_there3) {
  2. mysql_query("UPDATE highscore SET result='$result' WHERE nickname='$name'")or die("<br /><br />ERROR: Updating Highest Score failed!");
  3. echo "<br /><br /><b><font color='red'>Your Highest score has been updated.</font></b><br /><a href='index.php'>GO BACK</a>";
  4. }


Całość kodu to:

  1. // Get values from form
  2. $name=$_POST['nickname'];
  3. $result=$percent;
  4.  
  5. // Connect to server and select database.
  6. mysql_connect("$host", "$username", "$password")or die("cannot connect");
  7. mysql_select_db("$db_name")or die("cannot select DB");
  8. $choose = "SELECT nickname FROM highscore WHERE nickname='$name'";
  9. $zap = mysql_query($choose);
  10. $chosen = mysql_fetch_assoc($zap);
  11. $is_it_there = $chosen['nickname'];
  12.  
  13. $choose2 = "SELECT result FROM highscore WHERE nickname='$name'";
  14. $zap2 = mysql_query($choose2);
  15. $chosen2 = mysql_fetch_assoc($zap2);
  16. $is_it_there2 = $chosen2['result'];
  17.  
  18. $choose3 = "SELECT result2 FROM highscore WHERE nickname='$name'";
  19. $zap3 = mysql_query($choose3);
  20. $chosen3 = mysql_fetch_assoc($zap3);
  21. $is_it_there3 = $chosen3['result2'];
  22.  
  23. if ($is_it_there==$name AND $result>$is_it_there2 AND $result>$is_it_there3) {
  24. mysql_query("UPDATE highscore SET result='$result' WHERE nickname='$name'")or die("<br /><br />ERROR: Updating Highest Score failed!");
  25. echo "<br /><br /><b><font color='red'>Your Highest score has been updated.</font></b><br /><a href='index.php'>GO BACK</a>";
  26. }
  27. elseif ($is_it_there==$name AND $result>$is_it_there2 AND $result<$is_it_there3) {
  28. mysql_query("UPDATE highscore SET result='$result' WHERE nickname='$name'")or die("<br /><br />ERROR: Updating Highest Score failed!");
  29. mysql_query("UPDATE highscore SET result2='$result' WHERE nickname='$name'")or die("<br /><br />ERROR: Updating Lowest Score failed!");
  30. echo "<br /><br /><b><font color='red'>Your Highest and Lowest score have been updated.</font></b><br /><a href='index.php'>GO BACK</a>";
  31. }
  32. elseif ($is_it_there==$name AND $result<$is_it_there2 AND $result<$is_it_there3) {
  33. mysql_query("UPDATE highscore SET result2='$result' WHERE nickname='$name'")or die("<br /><br />ERROR: Updating Lowest Score failed!");
  34. echo "<br /><br /><b><font color='red'>Your Lowest score has been updated.</font></b><br /><a href='index.php'>GO BACK</a>";
  35. }
  36. elseif ($is_it_there==$name AND $result<$is_it_there2 AND $result>$is_it_there3) {
  37. echo "<br /><br /><b><font color='red'>Your Lowest or Higest score have NOT been updated. This attempt is NOT your highest/lowest.</font></b><br /><a href='index.php'>GO BACK</a>";
  38. }
  39. elseif ($is_it_there!=$name) {
  40. // Insert data into mysql
  41. $sql="INSERT INTO $tbl_name(result, nickname, result2)VALUES('$result', '$name', '$result')";
  42. $result=mysql_query($sql);
  43.  
  44. // if successfully insert data into database, displays message "Successful".
  45. if($result){
  46. echo "<br /><br /><b><font color='red'>New Highscore for this nick! Score saved.</font></b><br /><a href='index.php'>GO BACK</a>";
  47. }
  48.  
  49. else {
  50. echo "<br /><br /><b><font color='red'>ERROR: If you spot this error after refreshing this page please ignore. If not - report to Cromiell.</font></b>";
  51. }
  52. }
nospor
Skoro ci sie nie wykonuje to
1) Warunek w IF nie jest spelniony
albo
2) Warunek w zapytaniu nie jest spelniony dla zadnego rekordu.

Wiec sprawdz. Sprawdzenie tego naprawdę nie jest trudne i zajmie ci całe 10 sekund
Bootsyou
Źle się wyraziłem. Warunek jest spełniony bo mam błąd z "or die" wyświetlany. Dlatego nie wiem czemu nie działa.
nospor
To zamiast nic nie mowiacego tekstu wyswietlaj blad zapytania....
mysql_query("UPDATE highscore SET result='$result' WHERE nickname='$name'")or die(mysql_error());
Bootsyou
Duplicate entry '100' for key 'PRIMARY'
nospor
Komunikat bledu chyba wyjasnia wszystko...
Bootsyou
Wiesz... Gdyby to nie był mój pierwszy skrypt od "białego dokumentu" w PHP+MySQL to pewnie byłoby jak mówisz. Poproszę o wskazówkę. wink.gif Dzięki z góry
nospor
Masz już klucz główny o wartosci 100 a mimo to próbujesz innemu rekordowi ustawić dla klucza głównego wartosc 100.
Nie moze byc kilku rekordów z tym samym kluczem głównym...
Bootsyou
Czyli co w bazie muszę zmienić? Coś w strukturze?
nospor
Nie wiem co chcesz osiągnąć wiec nie wiem co masz zmieniac.
Bootsyou
Mam bazę " result | nickname | result2 "
W tej sytuacji if chodzi o UPDATE ponieważ nick już istnieje w bazie (nie robimy nowego rekordu). Potem sprawdzamy, czy jest większy od kolumny result i result2. Warunek zostaje spełniony więc chcę wykonać UPDATE tylko na kolumnie result a result2 nie ruszać. Krótki opis jak ma zadziałać.

nospor
No ale po grzbya z result zrobiles klucz główny i autoincrement? Klucz główny to klucz główny - go się nie zmienia. A ty result zmieniasz wiec nie moze byc kluczem głównym
Bootsyou
Dobra już sobie poradziłem. Zrzuciłem kolumnę result2 i zrobiłem ją jeszcze raz bez wartości domyślnej. Teraz działa jak należy. Dzięki za poświęcony czas, pozdrawiam!
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.