Blogger Information
Blog 9
fans 0
comment 6
visits 9538
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php 实现一个简单的计算器功能
存在
Original
3699 people have browsed it

一,需要用到的 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. }
  • 效果

正常效果

'效果';

当用户传入非法数据效果

'效果';

三,总结

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

Correcting teacher:灭绝师太灭绝师太

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
2 comments
存在 2020-11-23 20:18:31
好的,老师
2 floor
灭绝师太 2020-11-23 13:44:43
可以使用input标签的type属性值number来做前端用户输入控制
1 floor
Author's latest blog post