我正在尝试学习 PHP,并且正在观看 Dani Krossing 的教程。我能够按照他的教程进行操作,并能够使用 HTML 和 PHP 构建一个计算器。但我遇到了一个问题,每当我尝试输入十进制数时,它都会删除“.”。符号并使其成为整数。因此,如果我将 12.3 和 3 加起来,结果就是 126,而不是 15.3。我尝试在线检查任何选项,但似乎没有任何效果。以下是我使用的代码
HTML 格式:
<h2>Calculator Activity</h2>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="POST">
<input type="text" name="num01" placeholder="Number one">
<select name="operator">
<option value="add">+</option>
<option value="subtract">-</option>
<option value="multiply">*</option>
<option value="divide">/</option>
</select>
<input type="text" name="num02" placeholder="Number two">
<button>Calculate</button>
</form>
PHP 代码:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
//Grab data from the form and sanitize
$num01 = filter_input(INPUT_POST, "num01", FILTER_SANITIZE_NUMBER_FLOAT);
$num02 = filter_input(INPUT_POST, "num02", FILTER_SANITIZE_NUMBER_FLOAT);
$operator = htmlspecialchars($_POST["operator"]);
// Error Handlers
$errors = false;
if(empty($num01) || empty($num02) || empty($operator)) {
echo "Fill in all fields!";
$errors = true;
}
if (!is_numeric($num01) || !is_numeric($num02)) {
echo "Only numeric characters are allowed!";
$errors = true;
}
// Calculate numbers if no erros
if (!$errors) {
$value = 0;
switch ($operator) {
case "add":
$value = $num01 + $num02;
break;
case "subtract":
$value = $num01 - $num02;
break;
case "multiply":
$value = $num01 * $num02;
break;
case "divide":
$value = $num01 / $num02;
break;
default:
echo "Something went wrong!";
}
echo "Result = ".$value;
}
}
?>
提前谢谢您!
有任何可能的选项可以使其适用于十进制输入吗?
filter_input(INPUT_POST, "num01", FILTER_SANITIZE_NUMBER_FLOAT);造成问题。
这是因为 FILTER_SANITIZE_NUMBER_FLOAT 过滤器从浮点数中删除了所有“非法字符”(它认为)。
对于您的情况,您想要处理带小数位的数字,请替换
$num01 = filter_input(INPUT_POST, "num01", FILTER_SANITIZE_NUMBER_FLOAT);
$num02 = filter_input(INPUT_POST, "num02", FILTER_SANITIZE_NUMBER_FLOAT);
与
$num01=$_POST["num01"];
$num02=$_POST["num02"];