Php 防止篡改用户输入和SQL注入失败

Php 防止篡改用户输入和SQL注入失败,php,Php,我有一个表单,有两个文本输入。 一个是价格,另一个是数量。 在保存表单之前,有一些检查可以防止篡改用户输入和SQL注入 其中之一是: if(strval(floatval($quantity)) === $quantity && strval(floatval($price)) === price) { $errors = false; } 这张支票的问题是,如果我们有$price=“47.80”,例如 floatval()给我们47.8,然后strv

我有一个表单,有两个文本输入。 一个是价格,另一个是数量。 在保存表单之前,有一些检查可以防止篡改用户输入和SQL注入

其中之一是:

    if(strval(floatval($quantity)) === $quantity && strval(floatval($price)) === price) {
      $errors = false;
   }
这张支票的问题是,如果我们有$price=“47.80”,例如 floatval()给我们47.8,然后strval()给我们“47.8”,它不等于“47.80” 所以检查失败,我们得到一个错误


我想知道您是否可以想出一种方法来解决这个问题,而不需要太多地更改逻辑。

您可以使用过滤器扩展:

$price = filter_var($price, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
它删除所有不是数字或句点的内容

如果数字必须有两个小数点,那么你必须以某种方式强制执行。您可以不允许没有两个小数点的数字,也可以自己修复输入。这样做应该可以:

$price= number_format($price, 2, '.', null);

为什么会这样?如果您的数量是整数-检查它是否是整数。如果你的价格是浮动的-检查它是否是浮动的。例如,对于以字符串表示的数字,有这样一些东西,如
是\u numeric()
。但实际上:真正的解决方案是使用预先准备好的语句,而不必担心sql注入。它不是浮点。它实际上是来自数据库的字符串。它也存储为字符串。另外,输入是一个带有字符串值的文本框。这就是表格的形式,就像我说的,我不想因为各种原因而改变它。因此,我必须找到一种方法来操作它。@AlmaDo我将尝试is_numeric(),它可能在这里起作用。谢谢如果你愿意的话,你可以把它贴出来作为一个合适的答案。这里的数字字符串确实如此。