0

我对 PHP 很陌生,对 JQuery 也很陌生。

所以我写了一些 JQuery 来做一些计算,我在下面写了一些类似的东西:

//on change of a selectbox with the class item
$('.item').change(function() {
  // set variable id as the id name of this id 
  var id = this.id;
  // price variable is equal to the value of the element id 'hiddenprice'
  price = $("#hiddenprice").val();
  // number of items is the value of the select box
  numberofitems = $(this).val();
  // number of days is equal to a php variable I set on the page
  numofdays = "<?php echo $length->days; ?>";
  //totalprice is equal to the 'price' multiplied by 'numofdays'
  totalprice = Number(price) * Number(numofdays);
  //calculates final total by multiplying the 'totalprice' by 'numofitems'
  finaltotal = Number(totalprice ) * Number(numofitems); 
  //updates the HTML with the new price
  $('#'+id).html("&euro;" + finaltotal.toFixed(2));

});

我正在尝试这个,虽然我得到了它的工作,但在阅读了一些内容后,我知道因为这个脚本位于我正在更新的页面的页脚中,如果用户想要恶意,它是不安全且易于操作的。

所以我想通过将值发布到 PHP 脚本然后返回值来进行服务器端的计算。

// POST values to PHP Script

$id = (posted select id);
$price = (#hiddenprice variable value);
$numofitems = (posted value of the select);
$numofdays = $length->days;

$totalprice = (int)$price * (int)$numofdays;
$finaltotal = (int)$totalprice * (int)numofitems;

//Then push $finaltotal and $id back to the user viewed page

$('#'+<?php echo $id; ?>).html("&euro;" + <?php echo $finaltotal; ?>.toFixed(2));

我只是不确定如何在不刷新的情况下将它们推送到页面然后返回它们,也不刷新。

再次抱歉,如果这很简单,我已经查看了 JQuery 表单插件,我只是想知道是否有更适合我想做的解决方案。

提前致谢。

4

2 回答 2

1

您可能想查看ajax,它可以在不刷新页面的情况下发布或获取数据。这个问题的答案也可能会有所帮助。

于 2013-03-14T13:36:55.153 回答
0

您需要使用 AJAX。这会将数据发送到服务器,并允许您在收到响应后执行回调。

如果您使用的是 jQuery,请阅读有关$.ajax方法的信息。

要处理响应,最简单的数据类型是JSON

一个简单的例子

Javascript

$.ajax({
    url: calculation_url.php,
    method: 'post',
    dataType: 'JSON',
    data: {price: price, days: numofdays },
    success: function(response) {
        // you should check a valid response was received
        $("#result").html(response.html);
    }
});

PHP - calculatin_url.php

$price = $_POST['price'];
$days = $_POST['days'];
// do calculations

// send data back as json
die(json_encode(array('html' => $finalTotal)));

要开始此过程,您需要将事件附加到计算按钮。阅读有关使用on方法注册事件的信息,您可能会发现阅读有关event.preventDefault()方法的信息会很有帮助。

于 2013-03-14T13:46:39.737 回答