2013-05-22 37 views
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()函数 - 例如一个正则表达式。这种方式每次都通过函数来​​保持一致。

+2

在现代的PHP中,你可以这样做:echo $ _POST ['field']?''' – elclanrs

+0

@elclanrs这是一个很好的建议,谢谢!为什么不把它作为答案? – olli

回答

3

尝试这样的事:

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

你的函数总是打黑第一案,因为你正在检查如果参数设置可能已经if (isset($_POST[$vartocheck]))

+0

我喜欢你的想法!它也像魅力一样运作!非常感谢 :-) – olli

3

您可以使用三元运算,这几乎是一个简写的if/else

echo '<input type="text" name="somefield" value="'; 
echo isset($_POST['somefield']) ? $_POST['somefield'] : ''; 
echo '">'; 
+1

我实际上正在考虑'@echo $ _POST ['somefield']',但是很害怕得到它。这种方法完美。 –

+0

@DaveChen:等等,什么?那是什么,在哪里可以找到更多关于它的信息? – olli

+0

@Anujan:谢谢你的回应。我实际上意识到速记,但它仍然使我需要两次写变量名($ _POST [“somefield”])......留下平常的错误空间等等。 : -/ – olli