1

例如,如果我想用 $_POST 值重新填充表单(这个问题还有其他应用程序,但这是最简单的)我必须始终检查 $_POST 索引是否已设置,然后才能使用它的值,或者我'会从 php 中得到通知。

例如:

echo '<input type="text" name="somefield" value="';
if(isset($_POST['somefield']))
  { echo $_POST['somefield']; }
echo '">';

对于复杂的形式,这似乎很麻烦,并且像很多重复一样。所以我想,让我们提取一个函数:

function varcheck_isset($vartocheck)
{
  if(isset($vartocheck))
    {return $vartocheck;}
  else
    {return '';}
}

然后做

echo '<input type="text" name="somefield" value="';
echo varcheck_isset($_POST['somefield']);
echo '">';

使代码更好看。

但是当我这样做并且 $_POST['somefield'] 没有设置时,它说

注意:未定义索引:somefield

:-(

有人对如何使这项工作有想法或建议吗?


编辑:

这就是我最终做的事情 - 我接受了 Organgepill 的回答,只是稍微修改了一下:

function arraycheck_isset($arraytocheck, $indextocheck)
{
  if(isset($arraytocheck) && is_array($arraytocheck) && array_key_exists($indextocheck, $arraytocheck))
    { return $arraytocheck[$vartocheck];}
  else
    { return '';}
}

elclanrs 下面的评论也很不错。写吧:

echo $_POST['field'] ?: '';

不过,我个人更喜欢非速记版本,因为除了 isset() 之外,我可能还需要检查其他内容 - 例如正则表达式。这样我每次都通过一个函数来保持它的一致性。

4

2 回答 2

3

您可以使用三元运算符,它几乎是 if/else 的简写

echo '<input type="text" name="somefield" value="';
echo isset($_POST['somefield']) ? $_POST['somefield'] : '';
echo '">';
于 2013-05-22T03:43:20.193 回答
3

尝试这样的事情:

function postedVal($vartocheck)
{
  if(array_key_exists($vartocheck, $_POST))
    return $_POST["$vartocheck"];
  return '';
}

您的函数总是遇到第一种情况,因为您正在检查是否设置了参数if (isset($_POST[$vartocheck]))

于 2013-05-22T03:47:55.483 回答