Autor | Zpráva | ||
---|---|---|---|
Lexis Doleandr Profil * |
#1 · Zasláno: 8. 8. 2011, 23:56:04
Zdravím, mohu se zeptat, proč mi pořád script vyhazuje "Nemáš dostatek zlata ke koupi síly!"?
Formulář: <?php if($_SESSION["NESMIS_MENIT_PRODUKTY"]) {echo $_SESSION["NESMIS_MENIT_PRODUKTY"]; unset($_SESSION["NESMIS_MENIT_PRODUKTY"]);} ?> <?php if($_SESSION["NEDOSTATEK_ZLATA"]) {echo $_SESSION["NEDOSTATEK_ZLATA"]; unset($_SESSION["NEDOSTATEK_ZLATA"]);} ?> <?php if($_SESSION["PRODUKT_KOUPEN"]) {echo $_SESSION["PRODUKT_KOUPEN"]; unset($_SESSION["PRODUKT_KOUPEN"]);} ?> <table border="0"> <th width="80px">Produkt</th> <th width="80px">Vlastníš</th> <th width="80px">Koupíš</th> <th width="80px">Za</th> <th width="80px">Koupit?</th> <tr style='text-align: center;'> <td>Síla</td> <td><?php echo $staty["sila"]; ?></td> <td>1 Kus</td> <td><?php echo $staty["sila_cena"]; ?> zlata</td> <td><form action="" method="POST"><input type="hidden" name="produkt" value="sila"><input type="submit" name="obchod_odeslat" value=" Koupit "></form></td> </tr> <tr style='text-align: center;'> <td>Inteligence</td> <td><?php echo $staty["inteligence"]; ?></td> <td>1 Kus</td> <td><?php echo $staty["inteligence_cena"]; ?> zlata</td> <td><form action="" method="POST"><input type="hidden" name="produkt" value="inteligence"><input type="submit" name="obchod_odeslat" value=" Koupit "></form></td> </tr> <tr style='text-align: center;'> <td>Duše</td> <td><?php echo $staty["duse"]; ?></td> <td>1 Kus</td> <td><?php echo $staty["duse_cena"]; ?> zlata</td> <td><form action="" method="POST"><input type="hidden" name="produkt" value="duse"><input type="submit" name="obchod_odeslat" value=" Koupit "></form></td> </tr> </table> Script: <?php if(IsSet($_POST["obchod_odeslat"])) { if($_POST["produkt"] == "sila" AND $staty["zlato"] >= $staty["sila_cena"]) { mysql_query("UPDATE staty SET sila=sila+1 WHERE id='".$_SESSION["ID"]."'"); mysql_query("UPDATE staty SET sila_cena=sila_cena+2 WHERE id='".$_SESSION["ID"]."'"); $_SESSION["PRODUKT_KOUPEN"] = "Síla byla koupena."; session_write_close(); header("Location: index.php?s=Obchod"); }else{ $_SESSION["NEDOSTATEK_ZLATA"] = "Nemáš dostatek zlata ke koupi síly!"; session_write_close(); header("Location: index.php?s=Obchod"); } if($_POST["produkt"] == "inteligence" AND $staty["zlato"] >= $staty["inteligence_cena"]) { mysql_query("UPDATE staty SET inteligence=inteligence+1 WHERE id='".$_SESSION["ID"]."'"); mysql_query("UPDATE staty SET inteligence_cena=inteligence_cena+2 WHERE id='".$_SESSION["ID"]."'"); $_SESSION["PRODUKT_KOUPEN"] = "Inteligence byla koupena."; session_write_close(); header("Location: index.php?s=Obchod"); }else{ $_SESSION["NEDOSTATEK_ZLATA"] = "Nemáš dostatek zlata ke koupi inteligence!"; session_write_close(); header("Location: index.php?s=Obchod"); } if($_POST["produkt"] == "duse" AND $staty["zlato"] >= $staty["duse_cena"]) { mysql_query("UPDATE staty SET duse=duse+1 WHERE id='".$_SESSION["ID"]."'"); mysql_query("UPDATE staty SET duse_cena=duse_cena+15 WHERE id='".$_SESSION["ID"]."'"); $_SESSION["PRODUKT_KOUPEN"] = "Duše byla koupena."; session_write_close(); header("Location: index.php?s=Obchod"); }else{ $_SESSION["NEDOSTATEK_ZLATA"] = "Nemáš dostatek zlata ke koupi duše!"; session_write_close(); header("Location: index.php?s=Obchod"); } } ?> Vyhazuje to, až kliknu na inteligenci nebo duše, když kliknu na sílu, vypíše to, že síla byla úspěšně koupena. Děkuji |
||
php Profil * |
#2 · Zasláno: 9. 8. 2011, 00:39:17
Už jen když nato kouknu tak vidím, že máš nastavený špatně podmínky v if, vzhledem k tomu, že tam nemáš závorky tak tady rozvedu ten první:
if($_POST["produkt"] == "sila" AND $staty["zlato"] >= $staty["sila_cena"]) takže v pořadí operátorů se to má tak, první je čárka a pak následují logické operátory slovy jak to máš ty tady takže OR,XOR a AND, takže ty se vlastně prvně ptáš jaký je výsledek mezi "sila" a $stat["zlato"] jelikož operátory == a >= mají stejnou priority tak se pak celý if vyhodnocuje z leva takže jako by si tam PHP doplnilo samo závorky, pak se tedy pro lepší názornost tenhle if vyhodnocuje takhle: if(($_POST["produkt"] == ("sila" AND $staty["zlato"])) >= $staty["sila_cena"]) což je značná blbost, takže první rada, zkus tam doplnit závorky, asi takhle: if(($_POST["produkt"] == "sila") AND ($staty["zlato"] >= $staty["sila_cena"])) |
||
Medvídek Profil |
#3 · Zasláno: 9. 8. 2011, 00:51:38 · Upravil/a: Medvídek
php:
> Už jen když nato kouknu tak vidím, že máš nastavený špatně podmínky v if, vzhledem k tomu, že tam nemáš závorky tak tady rozvedu ten první: > > 1 > > if($_POST["produkt"] == "sila" AND $staty["zlato"] >= $staty["sila_cena"]) Nemyslim si, viz toto: <?php $s["produkt"]="sila"; $s["zlato"]=500; $s["cena"]=300; if($s["produkt"] == "sila" AND $s["zlato"] >= $s["cena"]){ echo "V poradku <br /><hr><pre>"; print_r($s); } ?> důkaz zde: http://filez.party-akce.cz/djpw/if.php Lexis Doleandr: Zkus si v té podmínce printnout, nebo var_dumpnout hodnotym které vyhodnocuješ. |
||
Lexis Doleandr Profil * |
#4 · Zasláno: 9. 8. 2011, 01:01:18
php:
V tom to opravdu není. Medvídek: Takže víte v čem je chyba? |
||
Medvídek Profil |
#5 · Zasláno: 9. 8. 2011, 01:03:29 · Upravil/a: Medvídek
Lexis Doleandr:
Viz má předchozí odpověď (asi jste reagoval po editaci). nechte si vypsat v té podmínce, co vám opravdu vrací ty proměnné) Něco jako: if(IsSet($_POST["obchod_odeslat"])){ echo "<pre>"; print_r($staty); } Předpokládám, že si to vytahujete z DB a to zde uvedeno neni. Každopádně se nesplní podmínka, take musí být zakopán pes někde tam. |
||
Lexis Doleandr Profil * |
#6 · Zasláno: 9. 8. 2011, 10:45:31
Medvídek:
Tak se mi zdá, že pomocí printu, je všechno ok. Možná něco na tom bude, co říkal php i když mi to taky nefungovalo. Script se předělal do trošku "složitější" verze a již funguje. php, Medvídek: Děkuji vám za účast ve vlákně, problém byl vyřešen. |
||
php Profil * |
#7 · Zasláno: 9. 8. 2011, 16:26:23
Tak se omlouvám, špatně sem pochopil tabulku ze které sem čerpal informace, operátory:AND XOR OR a čárka maj tu nejmenší prioritu, takže můj první odhad na závorky byl chybný i to vyhodnocování ifu není z leva, ale z prava : ) to jen tak pro uvedení věcí na pravou míru.
|
||
Časová prodleva: 14 let
|
0