2013-05-22 65 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