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

:-(

Кто-нибудь получил идея или предложения, как это сделать?


EDIT:

Вот что я в конечном итоге делает - я принял ответ 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'] ?: ''; 

Лично мне нравится, не сокращенная версия лучше, хотя, потому что я также могу иметь случаи, когда мне нужно проверить для других вещей, кроме Исети() - например, регулярного выражения. Таким образом, я поддерживаю это последовательно, каждый раз выполняя функцию.

+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

Вы можете использовать Тернарные операторы, это в значительной степени обобщающим если/другое

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

Смежные вопросы