2012-07-23 61 views
0

你好我有以下問題:如何縮短php的狀態?

我有一個表格,我想檢查通過PHP的一些輸入錯誤。除此之外,我想顯示用戶有關什麼是錯誤的信息。

我的問題是,我只喜歡顯示一條消息,而不是在同一時間。因此我需要過濾來自php的所有錯誤消息,將其限制爲一個。

所以PHP正在尋找這樣的:

<?php if (isset($errors['for_a']):?><div id="errormessage">some text</div><?php endif; ?> 

和PHP的規則是:

(case1) ... if (isset($errors['for_a']) AND (!isset($errors['for_b'])) AND (!isset($errors['for_c'])) OR (!isset($errors['for_d'])) ... 
OR 
(case 2) ...AND (!isset($errors['for_b'])) AND (!isset($errors['for_c'])) AND (!isset($errors['for_d'])) ... 
and so on for input field a... 

所以問題是,我有7個輸入字段,這將意味着我不得不寫所有可能性。有沒有辦法縮短這個?

非常感謝。

更新:

好吧,也許它不夠清楚,我喜歡做什麼。

我沒有顯示錯誤信息的問題。這工作正常。每個特定輸入字段的每個錯誤消息都可以正確顯示。

問題是,我對它們每個都有不同的錯誤消息。我確實在更多維數組中存儲:

if(empty($a)){$errors['a'][]="first failure for a"} 
if(something else happens($a)){$errors['a'][]="second failure for a"} 
... 

if(empty($b)){$errors['b'][]="first failure for b"} 
if(something else happens($b)){$errors['b'][]="second failure for b"} 
... 

顯示錯誤消息也不是問題。

<?php if (isset($errors['a'])):?> 
<?php echo "<div class='erl'>"; 
echo $errors['a'][0]; 
echo "</div>";   
endif;?> 
<?php endif;?> 

問題是在同一時間只顯示一個錯誤信息的條件!

所以這裏有一些圖形來說明我的意思:

這是在那一刻,所有的錯誤的div將在同一時間顯示的情況:

f0

這是什麼我想達到,只有一個錯誤信息將同時顯示在第一個輸入字段開始檢查:

f2

,這樣用戶將被強制顯示第二誤差層之前糾正第一個輸入字段:

f5

希望現在得到明顯。

+0

籠統地說,我覺得你是在一個錯誤的方式思考它。作爲一名用戶,如果我必須多次發送表單來了解所有錯誤,那麼我會非常沮喪,因爲您一次只顯示一個錯誤。如果您一次顯示所有內容,則可用性更高。但是如果您正在進行測驗或測試,那麼您可以按照自己的方式進行測試。 – 2012-07-23 13:10:50

+0

還有一些錯誤的div顯示用戶,這有一些問題。但如果他想知道什麼是錯誤的,他可能會在提交表單之前看到它。同時有很多信息會變得有點混亂。太多的信息一次。這就是我爲什麼要這樣的原因。 – bonny 2012-07-23 13:44:04

回答

1

我不確定你在問什麼。通常對於表單,如果有很多字段,您可以創建一個錯誤數組,並將錯誤顯示爲表單頂部的項目符號列表,或內嵌其相應的表單元素。

<?php 
$errors = array(); 

if (isset($_POST['submit'])) { 
    // for each form field check it's valid, if it's not add a key to the errors array, i.e. 
    if (empty($_POST['name'])) { 
     $errors['name'] = 'Name is a required field'; 
    } 
} 

// display form 
?> 

您現在將擁有一個$errors數組。如果它不是空的,你的表單有錯誤。然後,您可以通過以下兩種方式之一顯示這些錯誤。截至窗體頂端的符號列表:

<!DOCTYPE html> 
<html> 
    <body> 
    <form method="post"> 
<?php if (!empty($errors)): ?> 
     <p>Please correct the following errors:</p> 
     <ul> 
<?php foreach ($errors as $error): ?> 
     <li><?php echo $error; ?></li> 
<?php endforeach; ?> 
     </ul> 
<?php endif; ?> 
     <!-- the rest of your form --> 
    </form> 
    </body> 
</html> 

或內聯與每個表單字段:

<form method="post"> 
    <div class="input"> 
    <label for="name">Name:</label> 
    <input type="text" name="name" id="name" /> 
<?php if (isset($errors['name'])): ?> 
    <div class="error"><?php echo $errors['name']; ?></div> 
<?php endif; ?> 
    </div> 
</form> 

希望有所幫助。

+0

嗨,謝謝,但我沒有。我更新了我的問題以提供更多信息。 – bonny 2012-07-23 11:32:49

+0

如果每個表單字段有多個錯誤,那麼我只是說第一個。 – 2012-07-23 11:36:39

+0

對不起,我不明白你的意思。我不需要它們作爲一個div中的子彈列表。我有我的圖層類,將顯示旁邊。所有的作品。問題是如何將顯示方法同時限制爲一種。 – bonny 2012-07-23 11:41:31

0

你如何做你的錯誤治療?

如果只設置$errors['for_a'],等等...如果在輸入字段for_a一個錯誤,你可以這樣做:

if (count($errors) > 0) { 
    foreach ($errors as $input => $errormsg) { 
     echo '<div id="errormessage">' . $errormsg . '</div>' 
    } 
} else { 
    // continue normally 
} 
+0

你好,我有一個更多的維數組。如果(空($ a)){$ errors ['a'] [] =「錯誤爲」.... if(empty($ b)){$ errors ['b'] [] =「」b「的錯誤...等等,所以每個輸入字段都有自己特定的錯誤消息。所以我不認爲這會有所幫助,因爲使用計數錯誤將是有用的,當我只有一個錯誤的可能性,但有7! (數學表達)可能性! – bonny 2012-07-23 11:18:49

+0

我更新了我的問題。謝謝。 – bonny 2012-07-23 11:37:24

0

怎麼樣的OO解決方案?喜歡的東西:

<?php echo $errors->show('for_a', 'some text'); ?>

其中$錯誤指向一個類,將輸出「一些文本」,只有當它之前沒有任何輸出。

0

可能最簡單的解決方案是使用全局變量,如果您顯示錯誤,則可以使用該變量。

如:

$errorShown = false; 

和一個功能:

function showError($whatError,$errArr){ 
    global $errorShown; 
    if ((isset($errArr[$whatError])) && (!$errorShown)){ 
    echo $whatError; 
    $errorShown = true; 
    } 
} 

,並調用該函數。

<?php showError('for_a',$errors); ?> 
+0

我更新了我的問題。謝謝。 – bonny 2012-07-23 11:33:08