使用空变量和格式化数字

时间:2014-02-05 15:54:59

标签: php mysql null isset

我的页面上有一堆涉及数字的文本框。数据库中的默认值在创建时为NULL,并且每个输入echo都是数据库中的值(默认情况下没有,因为它设置为null)。

我遇到的问题是,如果用户第一次打开表单,提交表单并且没有填写项目,则值变为0而不是保留{{1} }}

有人可以帮助我吗?


当用户打开页面时,它会像这样格式化数字:

null

当用户发布表单时,它会将数字取消格式化,如下所示:

if(isset($data['variable1']))
    $variable1 = numberFormat($data['variable1']);
else
    $variable1 = "";

我甚至试过这样做:

$variable1 = numberUnformat($_POST['variable1']);

NUMBERFORMAT()

if(isset($_POST['variable1']))
    $variable1 = numberUnformat($_POST['variable1']);
else
    $variable1 = "";

numberUnformat()

function numberFormat($n, $n_decimals="2")
{
    return ((floor($n) == round($n, $n_decimals)) ? number_format($n) : number_format($n, $n_decimals));
}

4 个答案:

答案 0 :(得分:0)

if(isset($_POST['variable1']))

$_POST['variable1']将始终设置,如果它是表单的一部分。 HTTP POST值(或通过HTTP传输的任何其他内容)永远不会null,因为它不是HTTP中的类型。最好的是一个空字符串,它不是null,因此上述条件始终为true,并且您的非格式化函数将始终返回0

您必须检查strlen($_POST['variable1']) > 0$_POST['variable1'] !== ''

答案 1 :(得分:0)

因为它包含在您的表单帖子中,所以该变量在技术上设置(设置为''),这是您需要检查的内容。

一个简单的方法可能是

if(strlen(trim($data['variable1'])) > 0)
{
  $variable1 = numberFormat($data['variable1']);
}
else
{
  $variable = null;
}

取决于您实际想要做什么。所以这里我们删除之前和之后的所有空格,然后测试输入的长度,如果它大于0,则用户输入一些内容,否则我们将其转换为真空。

答案 2 :(得分:0)

如果你isset($_GET['data'])即使它是空的

input name="data"也是如此

你也应该检查$_GET['data'] === ''(或$ _POST)

答案 3 :(得分:0)

试试这个

 if(isset($data['variable1']) && !is_null($data['variable1']))
    $variable1 = numberFormat($data['variable1']);
 else
    $variable1 = "";