【问题标题】:How to sanitise and store a decimal in sql databse如何在sql数据库中清理和存储小数
【发布时间】:2021-11-02 17:07:00
【问题描述】:

我是 sql 和 php 的新手,但我想弄清楚如何安全地存储从 HTML 表单获取的十进制值,在 php 中对其进行清理,然后将其发送到 sql 数据库。目前,我将 HTML 值转换为浮点数并使用 FILTER_SANITIZE_NUMBER_FLOAT 进行清理。 sql 数据值类型为十进制(10,5)。但是当我将 -2.5 存储到数据库中时,它会显示为 -25.00000000。我知道我的大部分代码都是正确的,因为当我从同一个表单中获取其他值时,对它们进行清理,然后将它们输入到数据库中,它可以正常工作。

    $Goal_howmch = (float) filter_input(INPUT_POST, 'How_much', FILTER_SANITIZE_NUMBER_FLOAT);
    
    <label for="How much"><b>How much: </b></label>
                    <select name="How_much" id="How much" default="0" required>
                        <option value=-10>-10%</option>
                        <option value=-7.5>-7.5%</option>
                        <option value=-5>-5%</option>
                        <option value=-2.5>-2.5%</option>
                        <option value=0 selected>0%</option>
                        <option value=2.5>2.5%</option>
                        <option value=5>5%</option>
                    </select>

【问题讨论】:

  • 您的代码有点不清楚,因为它混合了 html 和 PHP。您需要弄清楚的第一件事是发生错误的时间点。例如,在设置 $Goal_howmch 之后的行上,您应该执行 echo $Goal_howmch;。如果看起来不错,请在从 Web 浏览器发送之前确定它是什么。如果没问题,请检查您的 PHP 脚本收到它时的内容。接下来,检查如果在 PHP 代码中硬编码 -2.5 并将其发送到数据库会发生什么。最后,直接使用您的数据库并尝试使用insert 语句插入该值。你现在知道错误的地方了。
  • 另外,您是否在代码中对此值进行任何其他计算。我注意到您将其列为百分比。也许你也在做这方面的事情。

标签: php html sql


【解决方案1】:

尽管在上述文档中特别提到了这一点,但由于许多人似乎认为这不直观,因此值得指出的是,除非您指定 FILTER_FLAG_ALLOW_FRACTION,否则 FILTER_SANITIZE_NUMBER_FLOAT 将删除小数字符:

<?php
$number_string = '12.34';

echo filter_var( $number_string, FILTER_SANITIZE_NUMBER_FLOAT ); // 1234

echo filter_var( $number_string, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ); // 12.34
?>

来源:https://www.php.net/manual/en/filter.filters.sanitize.php#125563

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-19
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 2019-12-03
    • 2017-02-02
    • 1970-01-01
    相关资源
    最近更新 更多