好的,標題太奇怪了,我當然應該告訴發生了什麼:)。我正在創建一個HTML5表單。我希望使用HTML5新技術和CSS3新僞類(當然我記得關於服務器端驗證)完全驗證該表單。我舉一個例子:HTML5表單驗證機制:在服務器端驗證後設置無效
HTML:
<input type="email" value="">
CSS:
input:invalid {color: #fff; box-shadow: 0 0 5px #f00;}
大家都知道:好驗證是一個嚴格的用戶的瀏覽器,並在同服務器。所以,如果我允許用戶只輸入電子郵件號碼,並且服務器將接受字母,這是一個錯誤。如果用戶可以輸入數字,服務器將不會接受,這是一個錯誤。
什麼問題?我要求用戶發送電子郵件。用戶輸入asd @ asd這是一個完全驗證電子郵件的HTML5命名法(asd可以是本地主機,因此不需要點)。這就是爲什麼輸入被驗證,並且一切正常。現在,我將這封電子郵件發送到我的PHP腳本中,這個腳本要求更高。例如,它:
PHP
function Validate($mail) {
$validate = true;
// Parse mail
if (!filter_var($mail, FILTER_VALIDATE_EMAIL)) $validate = false;
// Check DNS RR
$host = explode('@',$mail);
$host = array_pop($host);
if ($host == '') $validate = false;
else if (!checkdnsrr($host,'MX')) $validate = false;
return $validate;
}
所以當然電子郵件ASD ASD @未通過此驗證。
是否有任何機制允許我建議瀏覽器返回這封電子郵件仍然不好,但使用HTML5方法?
更確切地說,我在首次檢查POST數據時編寫了一個PHP表單類,然後渲染表單。所以如果缺少某些東西,我可以渲染表單,但使用發送的POST數據,不要忘記輸入值。這是做這種事的常用方法。
因此,我在PHP知道電子郵件無效但HTML5認爲它是有效的之後呈現輸入電子郵件。更多代碼(真片段,以顯示你的想法...):
$email = isset($_POST['email']) ? $_POST['email'] : '';
if (Validate($email)) {
// do whatever You want with the form
header("Location: /success-congratulations-great-form-hoooray");
}
else {
echo "<form>...";
echo "<input type="email" value=\"$email\">"; // this $email is important here!
echo "<input type=\"submit\" ... />
echo "</form>";
}
是否有機會建議瀏覽器這個輸入無效?只有在驗證錯誤的情況下,我纔想到回顯某種<script>
。但我卡在這裏。
我覺得這個問題,例如和答案將是有用的,是要讓符合standarts形式很多很多人,但錯過了一些東西......
THX您的答覆和最誠摯的問候!
UPDATE 真的沒有想法我怎麼能做到這一點?我正在考慮開始賞金:)。
PS。關於這個主題的大文章:http://www.html5rocks.com/en/tutorials/forms/html5forms/ –
,也可以幫助:http://html5pattern.com/ – audre7
Thx偉大的鏈接:)。問題仍然打開:)。 –