我是程序员,我创建了一个与积分一起使用的简单游戏。由于这个社区的一些帮助,现在一切正常。
只有一件事我无法正常工作。让我解释。人们可以捐款为我的项目做出贡献。当他们点击一组四个按钮时,值会显示在输入文本框中。我使用以下代码:
<button value="0.10" class="round-button">€ 0.10</button>
<button value="0.25" class="round-button">€ 0.25</button>
<button value="0.50" class="round-button">€ 0.50</button>
<button value="1.00" class="round-button">€ 1.00</button>
<form action="validate.php" method="post">
<input name="total" type="text" class="total" id="total" />
<input type="image" src="image/accept.fw.png" name="submit" />
</form>
这并不困难。但接下来我把它发布到我的文件validate.php。这里的一切都很好,这是我的validate.php
include 'sql.php';
$query_pretest = mysql_query("SELECT credits FROM users WHERE username='".$_SESSION['login']."'");
$check = mysql_fetch_array($query_pretest);
$total = $_POST['total'];
if ($check['credits']<=($_POST['total'])) { echo 'not enough money in your account'; }
else { mysql_query("UPDATE users SET credits = (credits -'{$_POST[total]}') WHERE username='".$_SESSION['login']."'"); echo 'Thanks for your donation'; }
好的,这样可行,但现在发生了一些奇怪的事情。当用户选择例如0.85美分并且他的帐户中有5.00时,用户在捐赠4.00后离开。看起来价值0.85转移到1.0?
我做错了什么,或者我在数据库中需要其他什么? 我在名为Credits的数据库中的列有一个'int(11)',所以也许我需要设置它不同?有人能指点我吗?
感谢!!!
答案 0 :(得分:2)
INTEGER
类型只能存储整数,而不能存储分数。在数据库中存储货币值有两种常用方法:
使用DECIMAL(11,2)
代替INT(11)
作为数据类型。这指定了一个总数为11位的值,包括小数点后的2位数。
使用INT(11)
,并将所有内容乘以100
,然后存储分数而非欧元数。也可以在HTML中执行此操作,例如
<button value="10" class="round-button">€ 0.10</button>
我不建议使用FLOAT
或DOUBLE
,因为这会引入浮点错误。
答案 1 :(得分:0)
将您的int
更改为您的数据库中的double
。
答案 2 :(得分:0)
感谢你的回复,它就是诀窍。我现在要更多地研究MySQL数据库的使用。愚蠢的我......