2012-04-11 69 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