Как упростить, если isset $var else $var = ' ';

Если я хочу, например, заполнить форму значениями $_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 ответа

Решение

Попробуйте что-то вроде этого:

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

Ваша функция всегда выполняла первый случай, потому что вы проверяете, установлен ли параметр if (isset($_POST[$vartocheck]))

Вы можете использовать троичные операторы, это скорее сокращение, если / иначе

echo '<input type="text" name="somefield" value="';
echo isset($_POST['somefield']) ? $_POST['somefield'] : '';
echo '">';
Другие вопросы по тегам