2014-11-16 83 views
-2

所以我有一個窗體,用戶可以看到6個字段中的2個。用戶然後可以點擊一個按鈕來顯示其他字段。如何使用PHP檢測元素是否可見?

每個字段使用以下PHP驗證(注:的preg_match是有,以確保他們已經進入了一個空間,因爲它是一個名稱字段):

$multipleFormErrors = array(); 
if (!isset($firstGuestName) || empty($firstGuestName) || !preg_match("/ /", 
    $firstGuestName)) { 
    $multipleFormErrors["firstGuestName"] = "You have not entered your full name."; 
} 
if (!isset($secondGuestName) || empty($secondGuestName) || !preg_match("/ /", 
    $secondGuestName)) { 
    $multipleFormErrors["secondGuestName"] = "You have not entered guest #2's full 
    name."; 
} 
if (!isset($thirdGuestName) || empty($thirdGuestName) || !preg_match("/ /", 
    $thirdGuestName)) { 
    $multipleFormErrors["thirdGuestName"] = "You have not entered guest #3's full name."; 
} 

依此類推,直到客人# 6。

然後將結果被回顯到使用用戶:

if (isset($_POST["multipleSubmit"])) { 
    if ($multipleFormErrors) { 
    echo "<div class=\"errors\">"; 
    echo "Please fix the following errors:"; 
    echo "<ul>"; 
    foreach ($multipleFormErrors as $error) { 
     echo "<li>"; 
     echo $error; 
     echo "</li>"; 
    } 
    echo "</ul>"; 
    echo "</div>"; 
    } 
} 

的這裏的問題是,所有的錯誤顯示,即使旅客3 - 6是對用戶不可見的。因此,如果他們提交的表格只有最初的2位嘉賓填寫完畢,他們會得到一個錯誤,因爲嘉賓3 - 6的值爲空字符串。我想一個解決這個問題的方法是讓PHP檢測顯示值是否設置爲像在JS中那樣可以阻止,所以這是可能的還是我需要做一些不同的事情?

乾杯!

+1

你的PHP沒有「可見」的概念。該頁面位於用戶的瀏覽器中,與您的PHP生成的HTML無關。 –

回答

1

PHP發生在服務器上,JavaScript發生在客戶端上,這就是問題的癥結所在。服務器沒有辦法(沒有更多的編碼和狀態跟蹤)知道客戶端是否在查看某個東西。

我建議:

  • 保持你的一般應用結構的方式是(不這樣做,狀態跟蹤,這將需要更多的JS/jQuery的/等)

  • 也許將錯誤代碼與文本框相關聯,以便僅在文本框出現錯誤時才顯示錯誤代碼

  • 對系統進行編碼,完全意識到客人(超出第一個?)是可選的,因此客人檢查應該只發生在服務器si如果存在部分名稱(如果是,則錯誤顯示客人是空白的,這通常會發生)。客人2-6的空白名稱可能完全合法。

+0

所有好主意,非常感謝! –

相關問題