php - 当从 php 表单输入字符串时,PHP、SQL 查询在浮点数据库中保存“0”
问题描述
当数据类型错误时,网站应该中止查询。但我得到的是,如果我将字符串值放入浮点数据类型,它会保存为“0”。
<?php
require('db_connect.php');
if (isset($_POST['prodName']) and isset($_POST['prodPrice']) and isset($_POST['prodQuantity'])){
// Assigning POST values to variables.
$name = $_POST['prodName'];
$price = $_POST['prodPrice'];
$quantity = $_POST['prodQuantity'];
// CHECK FOR THE RECORD FROM TABLE
$query = "INSERT INTO product (name, price, quantity) VALUES ('$name','$price','$quantity')";
$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
if ($query){
//echo "Login Credentials verified";
echo "<script type='text/javascript'>
alert('Product Added');
window.location.href='menu.php';
</script>";
}
else{
echo "
<script type='text/javascript'>
alert('Invalid Login Credentials');
window.location.href='login.php';
</script>";
//echo "Invalid Login Credentials";
}
}
?>
解决方案
请将 $result 而不是 $query 放在 if 条件中。至于'0'的查询结果,如果我没记错的话,就是false,意思是你尝试插入的数据,由于错误(很可能是数据类型)无法保存。您应该在插入之前先验证 $_POST 值。
例如:
if (is_float($_POST['prodName']) === false || is_float($_POST['prodPrice']) === false
|| is_float($_POST['prodQuantity']) === false)
&& echo "<script type='text/javascript'>
alert('Invalid Login Credentials');
window.location.href='login.php'; </script>";
通过验证,您可以防止不想要的值进入您的数据库,并将损害整个 Web 应用程序的风险降到最低。
推荐阅读
- reactjs - 如何在 typescript react hooks 项目的其他组件中获取 redux store 的值
- css - 移除赫斯提亚顶栏
- c++ - 错误:非聚合类型向量
不能用初始化列表初始化 - node.js - 使用 res.json() 在 http get 中返回两个不同的 sachems?
- haskell - 为什么不能在 GHC 中强制超功能?
- python - 为什么在屏蔽图像和裁剪图像时会得到不同的 glcms
- javascript - JavaScript 在未预定义维度的多维数组中设置值
- javascript - 简单的 JS 示例未运行(单击按钮)
- azure - 我创建了新的 Azure 应用程序,但它一直显示错误消息需要管理员批准
- discord.js - Discord.js 使用 .awaitMessages 创建响应式命令