Php 瓦尔查尔(32)元';我不接受零
我在MySQL数据库表中有一个名为Php 瓦尔查尔(32)元';我不接受零,php,mysql,sql,Php,Mysql,Sql,我在MySQL数据库表中有一个名为miliety的字段,它的类型是varchar(32) 在我的网页上,我有一个输入字段,用户可以在其中键入里程数并发送表单 以下是里程输入的一些PHP验证: if (empty($_POST["mileage"])) { $mileageErr = "Mileage required"; } else{ $mileage = htmlspecialchars($_POST["mileage"]); } 将里
miliety
的字段,它的类型是varchar(32)
在我的网页上,我有一个输入字段,用户可以在其中键入里程数并发送表单
以下是里程输入的一些PHP验证:
if (empty($_POST["mileage"])) {
$mileageErr = "Mileage required";
}
else{
$mileage = htmlspecialchars($_POST["mileage"]);
}
将里程插入db表时:
// validation omitted...
$query = $db->prepare("INSERT INTO cars VALUES ($mileage)");
$result = $query->execute();
当我在输入字段中输入数字0
并提交它时,我得到错误“所需里程数”
为什么我会犯这个错误?我已经将类型设置为varchar(32),它应该接受长度不超过32的任何字符串输入,对吗
或者我对前导零有什么不知道的吗?您得到的错误与数据库的设置方式无关。如果值为零时,则为空 以下内容被认为是空的: “”(空字符串)
0(0为整数)
0.0(0作为浮点数)
“0”(0作为字符串) 空
假的 array()(空数组)
$var;(声明了一个变量,但没有值)
如果您想进行正确的检查,请尝试isset并简单地检查您的帖子是否=“” 比如说
if(设置($\u POST['miliety'])和&$\u POST['miliety']!=”)
您遇到的错误与数据库的设置方式无关。如果值为零时,则为空
以下内容被认为是空的:
“”(空字符串)0(0为整数)
0.0(0作为浮点数)
“0”(0作为字符串) 空
假的 array()(空数组)
$var;(声明了一个变量,但没有值)
如果您想进行正确的检查,请尝试isset并简单地检查您的帖子是否=“” 比如说
if(isset($\u POST['miliege'])和&$\u POST['miliege']!=”)
$\u POST[“miliege”]
将评估为FALSE,因为它为零(有关详细信息,请参阅)。如果某个变量不存在或计算结果为FALSE,则该变量被视为空。$\u POST[“里程数”]
将计算结果为FALSE,因为它为零(有关详细信息,请参阅)。如果变量不存在或计算结果为FALSE,则该变量被视为空。您希望使用isset()检查里程是否存在,而不是空()。您希望使用isset()检查里程是否存在,而不是空()。不相关,但在插入字符串(varchar(32),您需要引用它们,尽管您确实应该使用绑定变量,而不是直接注入,以避免sql注入。这就是为什么您首先要准备查询。不相关,但是当您插入字符串(varchar(32)…)时,您需要引用它们,尽管您确实应该使用绑定变量,而不是直接注入变量,以避免sql注入。这就是您首先准备查询的原因。是的,像if(empty($\u POST[“miliety”])和&if($\u POST[“miliety”])!=0这样的快速修复方法也可以执行此任务。
不,empty将返回false,因为您的值为零。使用我发布的代码,如果里程数仅为数字,您可以更进一步,并检查是否为数字。如果您不希望值为零,则空将适用于您。但是如果你这样做了,那么就使用我在答案中发布的代码。对,像if(empty($\u POST[“miliety”])和&if($\u POST[“miliety”])!=0这样的快速修复方法也可以这样做吗?
不,empty将返回false,因为你的值为零。使用我发布的代码,如果里程数仅为数字,您可以更进一步,并检查是否为数字。如果您不希望值为零,则空将适用于您。但是如果你这样做了,那么就用我在答案中贴出的代码。