Autor Zpráva
Lexis Doleandr
Profil *
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 *
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
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 *
php:
V tom to opravdu není.
Medvídek:
Takže víte v čem je chyba?
Medvídek
Profil
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 *
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 *
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0