【问题标题】:PHP Function - Error Passing Form Field as ParameterPHP 函数 - 将表单字段作为参数传递时出错
【发布时间】:2020-08-04 18:35:54
【问题描述】:

我创建了以下函数来从提交的表单字段中删除网址。我这样做是为了防止垃圾邮件。

<?PHP
function scrubURL($field)
{
    return preg_replace('@((https?://)?([-\\w]+\\.[-\\w\\.]+)+\\w(:\\d+)?(/([-\\w/_\\.]*    (\\?\\S+)?)?)*)(?:[?&]\S+=\S*)*@i', '', $_POST[$field]);
}
?>

我尝试在表单处理中引用该函数: $_POST['first'] = scrubURL($_POST['first']);

我收到错误:未定义索引:http://somewebsite.com

不知何故,它是从表单而不是字段本身传递值。我尝试将字段用引号括起来,scrubURL("$_POST['first']") 并得到错误:语法错误,意外'first'(T_STRING),期望','或')'

我看不到原因,因为我在另一个表格上成功瘦了。我做错了什么?

【问题讨论】:

  • 函数定义说它需要字段名称,但您尝试将字段值传递给它。这是错误的:$_POST['first'] = scrubURL($_POST['first']); 这是正确的:$_POST['first'] = scrubURL('first');
  • 哎呀。我从函数中删除了 $_POST,因为该字段可能是 $_GET 并且它可以工作。谢谢。

标签: php spam-prevention


【解决方案1】:

您的函数参数$field 包含$_POST['first'] 的值!您在示例中想要的是一个函数调用,例如

$_POST['first'] = scrubURL('first');

作为建议:我不会在您的函数中访问$_POST。这是更清洁的代码。 ;)

function scrubURL($dirtyUrl)
{
    return preg_replace('@((https?://)?([-\\w]+\\.[-\\w\\.]+)+\\w(:\\d+)?(/([-\\w/_\\.]*    (\\?\\S+)?)?)*)(?:[?&]\S+=\S*)*@i', '', $dirtyUrl);
}

$_POST['first'] = scrubURL($_POST['first']);

【讨论】:

    【解决方案2】:

    从您的代码看来,您只需将“first”作为参数传递:

    $result = scrubURL('first');
    

    【讨论】:

      猜你喜欢
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      • 2011-04-14
      • 2020-06-02
      • 2014-12-08
      相关资源
      最近更新 更多