Как упростить, если 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 '">';