Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Instrukcja warunkowa
-kozumi-
post
Post #1





Goście







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ś.
Go to the top of the page
+Quote Post
lobopol
post
Post #2





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


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


--------------------
Go to the top of the page
+Quote Post
-kozumi-
post
Post #3





Goście







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. }
Go to the top of the page
+Quote Post
gorden
post
Post #4





Grupa: Zarejestrowani
Postów: 486
Pomógł: 101
Dołączył: 27.06.2010

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


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>';


Ten post edytował gorden 28.01.2011, 17:46:59
Go to the top of the page
+Quote Post
-kozumi-
post
Post #5





Goście







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?
Go to the top of the page
+Quote Post
lobopol
post
Post #6





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


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


--------------------
Go to the top of the page
+Quote Post
-kozumi-
post
Post #7





Goście







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. ?>
Go to the top of the page
+Quote Post
lobopol
post
Post #8





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


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


Ten post edytował lobopol 28.01.2011, 20:54:45


--------------------
Go to the top of the page
+Quote Post
gorden
post
Post #9





Grupa: Zarejestrowani
Postów: 486
Pomógł: 101
Dołączył: 27.06.2010

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


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. }


Ten post edytował gorden 28.01.2011, 21:00:12
Go to the top of the page
+Quote Post
lobopol
post
Post #10





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


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


--------------------
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 Aktualny czas: 22.08.2025 - 08:43