博客列表 >php 实现一个简单的计算器功能

php 实现一个简单的计算器功能

存在
存在原创
2020年11月20日 19:03:163700浏览

一,需要用到的 php 基础知识点

  • php 运算符

  • 条件分支控制

二,简单实现

  • 实现思路

前端界面是一个form表单,两个输入框允许用户输入要运算的数值,一个下拉列表允许用户选择运算方式,比如+-×÷等算数运算符。用ajax异步请求的方式把需要运算的数值和运算符传递给php脚本,php脚本根据前端所传递过来数据进行判断、运算,然后把结果返回给浏览器,浏览器把结果渲染到窗口。

  • 代码

html代码

  1. <form action="http://php.std/1119/1.php" method="post" onsubmit="return false;">
  2. <label for="num1"></label>
  3. <input type="text" name="num1" id="num1" value="" />
  4. <select name="operator" id="operator">
  5. <option value="0">+</option>
  6. <option value="1">-</option>
  7. <option value="2">×</option>
  8. <option value="3">÷</option>
  9. </select>
  10. <label for="num2"></label>
  11. <input type="text" name="num2" id="num2" value="" />
  12. <button>=</button>
  13. <span id="result" style="color: rebeccapurple; padding-left: 1em"></span>
  14. </form>

js代码

  1. //获取按钮
  2. let btn = document.getElementsByTagName("button")[0];
  3. //获取表单
  4. let form = document.getElementsByTagName("form")[0];
  5. //服务器地址
  6. let url = "http://php.std/1119/calculator.php";
  7. // ajax初始化
  8. const handle = new XMLHttpRequest();
  9. // 点击计算
  10. btn.addEventListener("click", () => {
  11. // 构造ajax请求数据
  12. // 第一个数
  13. let num1 = document.querySelector("#num1").value;
  14. console.log(num1);
  15. // 第二个数
  16. let num2 = document.querySelector("#num2").value;
  17. console.log(num2);
  18. // 操作符(0->+,1->-,2->x,3->÷)
  19. let opt = document.querySelector("#operator").value;
  20. console.log(opt);
  21. // 构造请求对象
  22. const data = {
  23. num1,
  24. num2,
  25. opt,
  26. };
  27. // 转为json;
  28. const dataToJson = JSON.stringify(data);
  29. console.log(dataToJson);
  30. // ajax请求
  31. handle.addEventListener("readystatechange", show, false);
  32. handle.open("POST", url, true);
  33. // 设置请求头(post必须设置)
  34. handle.setRequestHeader("content-type", "application/x-www-form-urlencoded");
  35. handle.send(dataToJson);
  36. });
  37. // 结果渲染
  38. function show() {
  39. // 返回结果赋值变量
  40. let ret = handle.response;
  41. // 渲染
  42. document.querySelector("#result").innerHTML = ret;
  43. }

php代码

  1. <?php
  2. error_reporting(0);
  3. // 接受参数
  4. $post = json_decode(key($_POST),true);
  5. // 第一个数
  6. $num1 = isset($post['num1'])?$post['num1']:0;
  7. // 第二个数
  8. $num2 = isset($post['num2'])?$post['num2']:0;
  9. // 运算符代号(0->+,1->-,2->x,3->÷)
  10. $opt = isset($post['opt'])?(int)$post['opt']:0;
  11. // 验证数据合法性
  12. if(!verify($num1,$num2,\$opt)) {
  13. echo '非法数据,你已经被我们标记!';
  14. die;
  15. }
  16. // 计算
  17. switch($opt){
  18. case 0:
  19. // 加 +
  20. echo $num1+$num2;
  21. break;
  22. case 1:
  23. // 减 -
  24. echo $num1-$num2;
  25. break;
  26. case 2:
  27. // 乘 *
  28. echo $num1\*$num2;
  29. break;
  30. case 3:
  31. // 除 /
  32. echo $num1/\$num2;
  33. break;
  34. }
  35. // 定义数据合法性函数
  36. function verify($num1,$num2,$opt)
  37. {
  38. $opt_allow = [0,1,2,3];
  39. //验证
  40. if(!is_numeric($num1)||!is_numeric($num2)) {
  41. return false;
  42. }else{
  43. return in_array($opt,$opt_allow) && true;
  44. }
  45. }
  • 效果

正常效果

'效果';

当用户传入非法数据效果

'效果';

三,总结

作为服务端的开发者来说,永远不要相信用户的输入,因此对于用户的输入既要在前端过滤一遍的同时,也建议在服务端也过滤一遍。当然作为演示,我在前端没写验证代码,其实正确的做法是先在前端验证一遍再在服务端验证。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议
存在2020-11-23 20:18:312楼
好的,老师
灭绝师太2020-11-23 13:44:431楼
可以使用input标签的type属性值number来做前端用户输入控制