【问题标题】:Trimming my inputs before validating?在验证之前修剪我的输入?
【发布时间】:2014-01-05 10:26:58
【问题描述】:

我对我的服务器端验证脚本有一些疑问。目前,我通过检查 $_POST 数组中的字段是否为空,或者它们是否短于最小长度来验证我的输入数据。

我的脚本(摘录);

if(!isset($_POST['BizAddItemCat']) OR empty($_POST['BizAddItemCat']))
{
    die("Please enter a category for your item.");
}

if(!isset($_POST['BizAddItemSubCat']) OR empty($_POST['BizAddItemSubCat']))
{
    die("Please enter a subcategory for your item");
}

if(!isset($_POST['BizAddItemName']) OR empty($_POST['BizAddItemName']) OR strlen($_POST['BizAddItemName']) < 5)
{
    die("Your item name must contain at least 5 characters");
}

if(!isset($_POST['BizAddItemPrice']) OR empty($_POST['BizAddItemPrice']))
{
    die("Your item must have a price");
}

if(!isset($_POST['BizAddItemQty']) OR empty($_POST['BizAddItemQty']))
{
    die("You must enter your available stock for your item");
}

if(!isset($_POST['BizAddItemDesc']) OR empty($_POST['BizAddItemDesc']) OR strlen($_POST['BizAddItemDesc']) < 20)
{
    die("Your item description must contain at least 20 characters");
}

然后我修剪 $_POST 变量并将它们分配给变量

$itemcat=trim($_POST['BizAddItemCat']);
$itemsubcat=trim($_POST['BizAddItemSubCat']);
$itemname=trim($_POST['BizAddItemName']);
$itemprice=trim($_POST['BizAddItemPrice']);
$itemqty=trim($_POST['BizAddItemQty']);
$itemdesc=trim($_POST['BizAddItemDesc']);

但是,包含所有空格的字符串(例如 " " )将通过 empty() 检查,但所有空格将被 trim() 删除。因此,如果我有一个包含所有空格的字符串,它将通过我的验证并删除所有空格,留下一个空变量?

但是,如果我在验证变量之前修剪我的变量,那么我将无法检查字段是否存在 (isset($_POST['etc'])?

如果是这样,我将如何解决这个问题?

【问题讨论】:

  • 先修剪然后检查是否为空

标签: php validation


【解决方案1】:

您可以在值通过条件之前对其进行修剪,或者更改条件以检查是否存在空字符串。

if ($_POST['whatevervalue'] !== " ")

我建议在条件之前进行修剪。虽然为什么你在检查之后才出现赋值语句让我感到困惑。

【讨论】:

  • 当我测试我的脚本时,如果我使用 (例如 $a=trim($_POST['dsadasdas'])) 修剪输入,然后使用 isset() 检查,它总是返回 $ a为真(isset()通过)但是当我删除修剪时,isset()返回false。所以我虽然我会在检查输入是否存在之后分配变量是!空的。通过在验证之前进行修剪,我的 isset() 将不起作用?
  • 您确定这些值设置正确吗?
猜你喜欢
  • 1970-01-01
  • 2021-07-04
  • 2014-04-19
  • 2015-10-29
  • 1970-01-01
  • 2016-05-16
  • 2016-01-27
  • 1970-01-01
  • 2019-04-19
相关资源
最近更新 更多