2013-02-02 50 views
0

我想以無序列表格式顯示存儲在$ error中的所有錯誤。以下是將顯示錯誤的代碼。在PHP中以無序列表格式顯示錯誤

<?php 
    if (!empty($error)) { 
     echo '<p class="error"><strong>Your message was NOT sent<br/> The following error(s) occurred:</strong><br/>'. '<li>' . $error . '</li>' . '</p>'; 
    } elseif (!empty($success)) { 
     echo $success; 
     } 
?> 

問題是,上面的代碼只顯示列表中的第一個錯誤,但其餘的只是在沒有列表格式的單獨行中顯示。所有的錯誤存儲在以下格式:

$error .= "You didn't type in your name. <br />"; 

我試圖刪除br標籤,但沒有奏效。

任何幫助將不勝感激。 感謝提前:)

回答

0
<?php 
    if (!empty($error)) { 
     $errors = explode('<br />', $error); 
     echo ' 
<p class="error"><strong>Your message was NOT sent<br/>The following error(s) occurred:</strong></p> 
<ul> 
'; 
     foreach($errors as $error){ 
      echo "<li>$error</li>\n"; 
     } 
     echo "</ul>"; 
    } elseif (!empty($success)) { 
     echo $success; 

    } 
?> 
+0

是的..這個很適合我...... :) 你能解釋一下這個爆炸函數是如何工作的嗎? – TBI

+0

@TBI它只是在換行符處拆分文本(並刪除它們),並將每個片段放入一個簡單的零索引數組中。 「implode」命令的對面。這兩個都是非常有用的,連同'extract' – keyboardSmasher

0

你必須使用<li>每個錯誤,如果不是使用<br/>標籤,PHP的輸出應該像現在這樣,

<ul> 
    <li>Error1</li> 
    <li>Error2</li> 
    <li>Error3</li> 
</ul> 

所以有這樣的PHP代碼,

$error .= "<li>You didn't type in your name. </li>"; 
$error .= "<li>Error2. </li>"; 
$error .= "<li>Error3 </li>"; 


echo '<p class="error"><strong>Your message was NOT sent<br/> The following error(s) occurred:</strong><br/>'. '<ul>' . $error . '</ul>' . '</p>'; 
+0

我之前想過這個,但是如果我有太多的錯誤需要顯示,這會很費時。因此,我選擇了keyboardSmasher提供的答案。 – TBI

0

假設$error是一個數組(看起來如此)。

if (!empty($error)) { 
    foreach ($error as $e) { 
     printf("<li>%s</li>\n", $e); 
    } 
} 

// or just 
print "<li>". join("</li>\n<li>", $error). "</li>"; 

// extra: collecting errors 
if (trim($_POST["first_name"]) == "") { 
    $error[] = "You didn't type in your first name."; 
} 
if (trim($_POST["last_name"]) == "") { 
    $error[] = "You didn't type in your last name."; 
} 
... 
+0

不,它不是一個數組。 – TBI