2012-04-11 168 views
1

我已經嘗試了很長時間才弄清楚,爲什麼這個表單不起作用。如果您不輸入任何內容,甚至不會顯示錯誤消息。PHP XHTML嚴格格式不起作用

我希望這裏有人能指出這個問題。

表單是XHTML嚴格驗證。

<?php 

$err = array(); 

if (isset($_POST['submit'])) { 

/* Do the validation */ 
$uploader_name = $_POST['uploader_name']; 
$uploader_mail = $_POST['uploader_mail']; 

if (empty($uploader_name)) { 
$err[] = "Name is empty."; 
} 

if (empty($uploader_mail)) { 
$err[] = "Mail is empty."; 
} 

/* If everything is ok, proceed */ 
if (empty($err)) { 

//Do MySQL insert 

} 

} 


echo "<h1>Submit</h1>"; 

if(!empty($err)) { 
echo "<span style='color:red;'>"; 
foreach ($err as $e) {echo "* $e<br />"; } 
echo "</span><br />"; 
} 

echo " 
<div> 
<form action='' method='post' enctype='text/plain'> 
<fieldset> 
<legend>Your details</legend> 
<label for='uploader_name'>Your name/nickname</label><br /> 
<input type='text' id='uploader_name' value='$uploader_name' /><br /><br /> 

<label for='uploader_mail'>Your mail (will not be visible)</label><br /> 
<input type='text' id='uploader_mail' value='$uploader_mail' /><br /><br /> 
</fieldset> 

<p><input type='submit' id='submit' value='Submit' /></p> 
</form> 
</div> 
"; 

?> 

回答

2

字段使用name ATR,不id發送到服務器。添加(或更換)IDS與名稱,例如:

<input type='submit' name='submit' value='Submit' /> 

會產生$_POST['submit'] == 'Submit'

UPD:補充,而不是替代。數值通過name發送,但另一方面<label />的使用id's與表單元素連接。

UPD2:並從<form>刪除enctype屬性。

+0

這也是我的想法,但它現在的工作 – 2by 2012-04-11 20:04:13

+0

哦。我自己測試:只要刪除'enctype' attr使其工作。 – Botanick 2012-04-11 20:10:21

+0

是的,我剛剛發現!謝謝你,你會編輯你的問題,包括這個,然後我會接受它 – 2by 2012-04-11 20:11:29

0

我建議不要使用empty,但isset。 Empty很多東西都是空的。你的檢查應該是這樣的:

if (isset($_POST['foo']) || $_POST['foo'] !== '') { 
    $errors[] = 'You need to fill in the foo input'; 
} 

一些其他提示:

  • 使用單引號PHP和雙在HTML
  • 保持引號出字符串的,與連接符

舉例:

<?php 
if (isset($_POST['form_send'])) { 
    /* all validation stuff */ 
} 
?> 
<form action="post"> 
    <!-- ... --> 
    <input type="text" value="<?php echo $uploader_mail ?>"><br /> 
    <!-- ... --> 
</form> 

或者

<?php 
$name = 'World'; 
// not... 
$hello = "Hello World"; 
// ...but 
$hello = 'Hello '.$name; 

而且至少,回答你的問題。 PHP查找name屬性,而不是id屬性。

+0

Wouter,你能給我一個例子嗎? – 2by 2012-04-11 20:12:40

+0

而不能使用'!isset($ _ POST ['foo])'而不是? – 2by 2012-04-11 20:14:43

+0

是的,你可以。但我認爲這不好。現在你正在用一個值比較一個布爾值('true' /'false')。在我看來,你正在比較蘋果和橘子。 – 2012-04-11 20:19:38