我在页面加载时保存了一个javascript变量,稍后我将使用该变量。用户是否可以更改此变量。我试图找出一种方法,当用户输入某项内容时,创建一个ajax帖子,并返回几个值。
初始化()是在加载时触发的,因此变量数量很快就会被获取到页面加载中。
function initialize() {
quantity = parseInt(document.getElementById('shipping_quantity').value);
}然后,通过查询状态为rate的db来检索传送率。
getRate(){
var rate = '';
$.post('getrate.php', {state: state}, function(data){
rate = parseInt(data);
$("input#shipping_rate").val('$' + rate);这是getrate.php
<?
include_once ('includes/config.php');
$state = "OK";
if(isset($_POST['state'])){ $state = $_POST['state'];}
$con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$st = $con->prepare( 'SELECT rate FROM freight WHERE administrative_area_level_1 = :state' );
$st->bindParam( ':state', $state, PDO::PARAM_STR, 2 );
$st->execute();
$row = $st->fetch();
$rate = $row['rate'];
echo $rate;
?>以及如何在getRate()函数的最后一部分处理发送总量
var total = (rate * quantity);
$("input#shipping_total").val('$' + total);
});当我把它放在一起的时候,它是有效的,但是我担心在计算总数之前,数量可能会被改变。
我正在考虑使船运表单post,并返回到它自己后,在一个函数php的运费计算。
我正在看的例子。
购物车教程
发布于 2013-08-02 17:10:50
用户是否可以更改此变量。
也许,但更重要的是,您根本不能信任客户端发送给您的任何信息。“信任,但要证实”我相信这句话.因此,除了您为方便或用户界面而做的任何客户端操作之外, you 必须对服务器端进行二次检查()。
特别是在你的情况下,你说你有:
function initialize() {
quantity = parseInt(document.getElementById('shipping_quantity').value);
}如前所述,这似乎依赖于全局quantity变量,或者更糟的是,通过http://blog.niftysnippets.org/2008/03/horror-of-implicit-globals.html创建一个变量。在这两种情况下,是的,对用户来说更改它是很容易的。它们可以打开JavaScript控制台并键入:
window.quantity = 42;然后按回车。
您可以通过将所有代码放在一个作用域函数中来防止这种情况,并使其变得更加困难:
(function() {
// Your code here, e.g.:
var quantity = 0;
function initialize() {
quantity = parseInt(document.getElementById('shipping_quantity').value);
}
// ...and so on
})();这至少防止了它是一个全局的,而且很容易修改。但是这仍然很简单,他们所要做的就是使用任何现代浏览器,打开Dev工具,在代码中放置一个断点,当到达断点时,修改quantity的值。
无论如何,使用作用域函数是个好主意,因为全局值通常是坏消息。不过,这确实意味着,如果使用老式的onXYZ属性来连接事件处理程序,则必须从使用DOM方法(或者使用jQuery、其on函数等)改为使用DOM方法,因为onXYZ属性只能调用从全局范围访问的函数。
发布于 2013-08-02 17:11:07
您只需要确保Javascript将任何价格发送回被使用的服务器。那样的话,如果有人真的改变了他们,那就无关紧要了。
您的服务器将需要一次查找价格,以向用户显示它是多少,然后另一次,当他们提交订单时,计算出他们(或他们的信用卡)的账单总额。
这样你就可以控制价格,而不必在意用户是否会愚弄它。
https://stackoverflow.com/questions/18022476
复制相似问题