我一直在尝试设置一些可以检查HTML表单的内容,以确保在提交表单之前输入的文本字段至少输入了1个字符(到下一页)。
HTML表单在一个页面上,并流向第二页。第二页然后更新文本文件。一切正常,所以我不想改变它。但我需要的是验证器。
我搜索并阅读了大量建议,看过使用ISSET的一些建议,并完成了下面的脚本。
但这不起作用(因为表单总是提交/没有错误消息)。我已经厌倦了许多其他建议(根据我读过的其他教程)。但似乎无论文本字段是否为空,表单仍将始终提交。 (下一页上有一个时间戳,所以我可以告诉提交的内容。
有人能告诉我Isset是否适用于这种情况?如果是这样,我错了。或者如果没有,我可以使用什么来获取文本字段的验证器。我宁愿使用PHP,但如果我需要使用Javascript,那是可能的。
(补充:我认为问题在于,即使出现以下$错误消息,它也永远不会显示,因为页面会通过提交按钮自动重定向。我需要它与事件处理程序类似 - 例如,如果单击按钮提交,请检查错误。如果有错误,请打印出来。如果没有,请提交表单。此代码不会这样做。)
第1页代码。
<?php
if (isset($_POST['submit'])) {
$error = '';
if (trim($_POST['topic']) == '') {
$error = "Please enter a topic<br>");
}
if (trim($_POST['outline']) == '') {
$error = "Please enter an outline<br>";
}
if ($error == '') {
Echo "There are no errors";
} else {
echo "$error";
}
}
?>
<form style="" method="post" action="addtopic2.php">
Topic:<input name="topic" id="topicbox" maxlength="100" type="text">
Outline: <textarea input wrap="nowrap" rows="10" cols="120" name="outline">
</textarea><br><input name="submit" value="Submit" type="submit">
</form>
代码
<?php
$b = time ();
$c = date("g:i:s A D, F jS Y",$b);
print "Topic and Outline Submitted at $c";
$t = "Topic:";
$o = "Outline:";
$d = "Time Date:";
$topic = $_POST['topic'];
$outline = $_POST['outline'];
$data = stripslashes("$t $topic | $o $outline | $d $c |\n");
$fh = fopen("users.txt", "a");
fwrite($fh, $data);
fclose($fh);
?>
答案 0 :(得分:1)
您是否尝试过if((is_array($_POST)) && (!empty($_POST)) {...}
?
最好使用empty($var)
代替$var == ''
或!empty($var)
代替$var != ''
示例:
<?php
function arTrim (&$item , $keys) { //trims the string and makes it safe
if (!is_array($item))
$item = trim(htmlspecialchars($item));
}
array_walk($_POST, 'arTrim'); //apply this to each element in the our POST array
if((is_array($_POST)) && (!empty($_POST)) {
$error='';
if((empty($_POST['topic'])) || (empty($_POST['password'])))
$error='Please enter a topic<br / >';
if((empty($_POST['outline'])) || (empty($_POST['password'])))
$error='Please enter an outline<br />';
if(empty($error))
echo '<a href="addtopic2.php">text of the link</a>';
else
echo $error;
}
?>
在键入密钥时不要忘记使用引号:$_POST['password']
,$_POST['outline']
等。
还有一条建议:不要在PHP中使用双引号。最好使用单一的。因为double中的所有文本都将被解析为变量。没有优化。
<br>
是错误的变种,请使用<br />
。与<img />
,<link />
,<meta />
等相同的情况
答案 1 :(得分:1)
这应该这样做
<?php
if(isset($_POST['submit'])){
if($_POST['topic'] == ""){
$error="Please enter a topic<br>";
}
if($_POST['outline'] == ""){
$error="Please enter an outline<br>";
}
if(isset($error)){
echo $error;
}else{
// Both fields have content in
}
}
?>
<form style="" method="post" action="addtopic2.php">
Topic:<input name="topic" id="topicbox" maxlength="100" type="text">
Outline: <textarea input wrap="nowrap" rows="10" cols="120" name="outline">
</textarea><br><input name="submit" value="Submit" type="submit">
</form>
答案 2 :(得分:0)
对于初学者来说,在验证数据时,总是认为客户端验证(如Javascript)一样精确 - 您必须始终对数据执行服务器端验证(PHP)。
PHP的isset()
旨在与字符串类型变量一起使用:
$password = trim($_POST['password']);
$topic = trim($_POST['topic']);
$outline = trim($_POST['outline']);
if(!isset($password)) {
//is empty
}
PHP empty()
旨在与数组一起使用,不应用于检查字符串类型变量。
答案 3 :(得分:0)
Javascript提供更快的响应,如果您使用HTML5,它可以更快:
对于html5,您可以尝试类似:
<input type="text" id="topicbox" name="topic" required="required" data-minlength="6" />
为了在IE上工作,请在标题上使用:
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
如果您更喜欢javascript,我建议使用jquery插件:jquery.validation