首页 > 解决方案 > 当从 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";
}
}
?>

标签: phpsqlphpmyadmin

解决方案


请将 $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 应用程序的风险降到最低。


推荐阅读