我已经尝试了很长时间才弄清楚,为什么这种形式不起作用。如果您不键入任何内容,它甚至不会显示错误消息。
我希望有人可以指出这个问题。
表单经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>
";
?>
答案 0 :(得分:2)
使用name
atr将字段发送到服务器,而不是id
。使用名称添加(或替换)id,例如:
<input type='submit' name='submit' value='Submit' />
将生成$_POST['submit'] == 'Submit'
UPD:添加,而不是替换。值通过name
发送,但另一方面<label />
使用id
与表单元素相关联。
UPD2:从enctype
移除<form>
attr。
答案 1 :(得分:0)
我建议不要使用empty
,而是使用isset
。空接受很多东西是空的。你的支票应该是这样的:
if (isset($_POST['foo']) || $_POST['foo'] !== '') {
$errors[] = 'You need to fill in the foo input';
}
其他一些提示:
一个例子:
<?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
属性。