Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Instrukcja warunkowa
Forum PHP.pl > Forum > Przedszkole
kozumi
Dzień dobry!

Mam takie zapytanie mysql które po kliknięciu w odsyłacz ?go=walka odejmuje z bazy -10 i w tym mój problem, że chciałbym aby gdy zostanie 10 nie odjęło do zera lecz by zostawiło 1.

Całość wygląda tak:
  1. <?php
  2. if($_GET['go'] == walka) {
  3. if($dane['hp'] < 1) {
  4. echo 'Masz za malo punktow zycia!';
  5. }
  6. if($dane['hp'] > 1) {
  7. $zapytanie = "UPDATE users SET hp = hp - 10 WHERE user_id = 1";
  8. $idzapytania = mysql_query($zapytanie);
  9. header('Location: index.php');
  10. }
  11. }
  12. ?>


Aktualnie tak instrukcje zrobiłem ale pokręciłem coś.
lobopol
Sprawdź po prostu
  1. SELECT hp FROM users WHERE id="id_konta"

ile zwróci j jeżeli jest mniej niż 11 ustaw na 1 jeżeli więcej odejmij 10
kozumi
Może być takie rozwiązanie:

  1. $hp = mysql_query("SELECT `hp`,`hp_max` FROM `users` WHERE `user_id` = 1");
  2.  
  3. if($_GET['go'] == atak) {
  4. if($dane['hp'] < 11) {
  5. zapytanie -9
  6. }
  7. if($dane['hp'] > 9) {
  8. zapytanie -10
  9. }
  10. }
gorden
Trochę dziwnie to zrobiłeś, bo jeśli $dane['hp'] będzie równe 10, to zapytanie odejmie 19pkt..

  1. $id = 1; //id usera
  2. $hp = mysql_fetch_row(mysql_query("SELECT `hp`, `max_hp` FROM `users` WHERE `user_id`='$id'"));
  3.  
  4. if(isset($_GET['go']) && $_GET['go'] == 'atak') {
  5. if($hp[0] < 1) echo 'Za mało punktów życia!'; else
  6. if($hp[0] > 9) {
  7. mysql_query("UPDATE `users` SET `hp`=`hp`-10 WHERE `user_id`='$id'");
  8. echo 'Odjęto 10 punktów życia.';
  9. } else
  10. if($hp[0] < 10) {
  11. mysql_query("UPDATE `users` SET `hp`=1 WHERE `user_id`='$id'");
  12. echo 'Ponieważ miałeś poniżej 10 punktów życia, twoje hp zostało ustawione na 1.';
  13. } else echo 'Błąd przechwytywania ilości życia..';
  14. } else echo '<a href="?go=atak">atakuj</a>';
kozumi
Ale jeśli chodzi o ostatnią instrukcję to nie o to głównie mi chodziło bo może być np. 3 lub 2 dlatego nie za bardzo aby od razu do 1.

Myślałem tak:
  1. if($dane['hp'] < 10) {
  2. mysql_query("UPDATE `users` SET `hp`-8 WHERE `user_id`='1'");
  3. }


Jeśli hp mniejsze niż 10 czyli 9...1 to należało by odjąć 8 i po sprawie lecz zawsze odejmuje mi 10. Dlaczego?
lobopol
To zrób prościej
1. wyciągasz aktualny stan zdrowia czyli x
2. od tej liczby odejmujesz te 10 i teraz masz y
a)y<=1 ustawiasz w bazie hp = 1
cool.gify>1 ustawiasz życie na poziomie y

nie musisz odejmować tego w bazie
kozumi
Problem po części rozwiązałem ale gdy dojdzie do 0 to tak pozostanie dopóki nie wciśnie się odsyłacza ponownie.

  1. <?php
  2. if(isset($_GET['go']) && $_GET['go'] == 'atak') {
  3. if($dane['hp'] < 2) echo 'Masz za malo punktow zycia!'; else
  4. if($dane['hp'] > 9) {
  5. mysql_query("UPDATE `users` SET `hp`=`hp`-10 WHERE `user_id`='1'");
  6. echo 'Odjeto 10 punktow zycia.;';
  7. header('Location: index.php');
  8. } else
  9. if($dane['hp'] < 10) {
  10. mysql_query("UPDATE `users` SET `hp`-10 WHERE `user_id`='1'");
  11. header('Location: index.php');
  12. }
  13. if($dane['hp'] == 0) {
  14. mysql_query("UPDATE `users` SET `hp`=1 WHERE `user_id` = '1'");
  15. header('Location: index.php');
  16. }
  17. }
  18. ?>
lobopol
Możesz mi wytłumaczyć czemu nie zrobisz tak jak ci napisałem?
  1. if($dane['hp'] > 9) {

jak ktoś ma 10 to mu zapiszesz wartość 0, a tego nie chcesz.

Logicznie masz wielkie problemy z układaniem ifów

patrząc po twoich warunkach
startowe życie 1 wynik za mało życia
startowe życie 2 wynik wynik życie = -8
startowe życie 3 wynik wynik życie = -7
.
.
.
startowe życie 10 wynik 0
startowe życie 11 wynik 1 nareszcie dobrze
gorden
Mam pomysł.
  1. $query = "UPDATE `users` SET `hp`=1 WHERE `id`='$id'";
  2. switch($dane['hp']) {
  3. case 1: mysql_query($query); break;
  4. //analogicznie..
  5. case 5: mysql_query($query); break;
  6.  
  7. //tak do 10, powyżej:
  8. default: mysql_query("UPDATE `users` SET `hp`=`hp`-10 WHERE `id`='$id'");
  9. }
lobopol
Ale na cholerę sobie kod utrudniać? Podałem najprostszą opcje mam ją wam jeszcze napisać w php? Przecież to pobranie danych (co już jest), jedno odejmowanie (masakra), 1 if i jeden else, ewentualnie lepsza opcja
-jeżeli życie przed odejmowaniem = 1 za mało życia
- else if wynik odejmowania >0 zycie = wynik odejmowania
-else wynik = 1
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.