#php #html #foreach #echo
#php #HTML #foreach #эхо
Вопрос:
Я хочу напечатать div со списком ошибок внутри него. Ошибки обнаруживаются путем повторения внутри цикла foreach. Я хотел бы, чтобы весь этот div и список были внутри переменной, чтобы я мог распечатать его в требуемой части.
Вот что я делаю:
errmessage = "";
//more code, if etc
else {
$errmessage .= '<div class="form-error alert alert-danger"><strong>Form submission failed!</strong><ul>';
foreach($vresult->getErrors() as $v) {
$errmessage .= '<li>'.$v.'</li>';
}
$errmessage .= '</ul></div>';
}
В другой части файла:
<form method="post">
<?php
echo $errmessage;
?>
Это правильный способ сделать это, я хочу повторить, если есть ошибка, иначе ничего не выводите, если их нет. Это работает для меня, но мне было интересно, есть ли какие-либо другие хорошие практики.
Комментарии:
1. Вы могли бы просто установить флаг в своем первом бите, а затем получить возможные выходные данные во втором? Я не уверен, что полностью понимаю проблему.
2. @AbuNooh Вы разместили ветку else без
if
. Пожалуйста, разместитеif
тоже.
Ответ №1:
Ваше решение можно использовать, но я предлагаю использовать объектно-ориентированный подход, подобный этому:
<?php
class ErrorManager
{
private $errors = Array();
public function AddError($errorMessage)
{
array_push($this->errors,$errorMessage);
}
public function GetErrorMessage()
{
$finalMessage = "";
foreach ($this->errors as amp;$error) {
$finalMessage .= $error ."rn";
}
return $finalMessage;
}
}
— Использование класса ——
$errMngr = new ErrorManager();
$errMngr->AddError('A failure occured!');
$errMngr->AddError('another failure :(');
echo $errMngr->GetErrorMessage();
//OR Use this for HTML
echo nl2br($errMngr->GetErrorMessage());
?>
Таким образом, вы можете получить обычную текстовую строку, используя разделитель n r. Вы можете выводить ошибки в свой файл журнала, а также отображать их в виде HTML с nl2br()
Вы также можете изменить класс, чтобы использовать div список, подобный этому:
public function GetErrorMessageHTMLList()
{
$finalMessage = "<div><ul>";
foreach ($this->errors as amp;$error) {
$finalMessage .= '<li>'.$error .'</li>';
}
return $finalMessage.'</ul></div>';
}
Ответ №2:
Решение выглядит нормально, одно из предложений
В противном случае, если вы не хотите отображать сообщение «Ошибка отправки формы!» при отсутствии ошибок
if(!empty($vresult->getErrors()) {
//Build error message inside
}