PHP/Javascript验证计算

PHP/Javascript Validated Calculation

本文关键字:计算 验证 Javascript PHP      更新时间:2023-09-26

我以前遇到过这个问题,并希望再次这样做:我想在javascript和PHP中运行小计计算。我可能需要在某个时候更改计算。

  • 它需要在javascript中运行以最大限度地提高计算速度,以便用户知道会发生什么。
  • 它需要在PHP中运行,以便我得到一个有效的小计,恶意用户不能干扰。
这样

:

  • 如果我只在客户端(javascript)运行计算,恶意用户可能会破解javascript并更改小计。
  • 如果我只在服务器端(在PHP中)运行计算,则必须等待AJAX调用才能使用户获得更新的小计。

所以我想在两边执行计算。我所见过的唯一方法是在PHP中编程计算并在单独的javascript中编程计算。

我的问题是,人们会建议我使用什么模式,技术或技术来在服务器端创建计算,并使其与javascript兼容,当它被发送到客户端?

我有一个想法,例如,是一个PHP数组的计算,它被翻译成PHP代码和javascript代码,例如:

array(
    array(type => "operand", "name" => "variable_A"),
    array(type => "operator", "name" => "multiply"),
    array(type => "operand", "name" => "variable_B"),
)

可以转换成PHP:

return $variable_A * $variable_B;

和Javascript:

return variable_A * variable_B;

这是一个操作模式的例子。我不知道如果真的有的话,它们会是什么样子

ajax?

你可以传递javascript输入的所有变量,并留下基于服务器的流程。

还是我误解了你的问题?

我对你的问题的看法就像你描述的那样:做双重计算。我相信"大男孩"就是这么做的。

示例:将两个数字相加。代码是这样的:

HTML片段:

<form method="post" action="/add.php">
<input id="firstOperand" name="firstOperand" placeholder="First operand"/>
<input id="secondOperand" name="firstOperand" placeholder="Second operand"/>
<input type="submit" onclick="doCalculation()" value="Add"/>
</form>
<div id="result" />

你的JS可能看起来像:

function doCalculation() {
  var first = parseInt(document.getElementById('firstOperand').value);
  var second = parseInt(document.getElementById('secondOperand').value);
  var result = first + second;
  // the minimum amount of error checking
  if isNan('result') return false;
  document.getElementById('result').innerHTML = result;
  // Now use some framework (like jQuery) to make an Ajax call and pass the result to callback.
  Framework.Ajax('/add.php?format=json', 'POST', {first: first, second: second}, callback);
  return false;
}
function callback(response) b
  var res = response.json.result;
  var resultEl = document.getElementById('result');
  var errorEl = document.getElementById('error');
  // if our result is not correct, we want to update the user on it
  if (res != parseInt(resultEl.innerHTML)) {
    Framework.removeClass(errorEl, 'hidden');
  }
  document.getElementById('result').innerHTML = res;
}

当然,您的PHP结果页(add.php)将返回json结果。这里的附加价值是,你还可以返回一个普通的HTML结果(就像如果js被禁用)。

你的回调还可以检查返回的结果中是否有错误,并显示该错误消息。或者如果结果超时,则显示"结果"未保存的通知。但我想那超出了问题的范围(至少超出了答案的范围)。

注意:这只是我脑子里的代码,没有测试,直接写在答案框里,可能有一些事情应该做得更好。