当我点击“提交”时,我总是收到错误消息,说“找不到对象!”但是,如果我将$action
更改为$_SERVER['PHP_SELF']
:即
<form action='<?php echo $action; ?>' method='post'>
到
<form action='<?php echo $_SERVER['PHP_SELF']; ?>' method='post'>
它会起作用。但是,在这种情况下,如果没有错误,我们无法将表单提交给“sighup.php”。
<!DOCTYPE html>
<html>
<head>
<title>Testpage</title>
</head>
<body>
<?php
$uid_err="";
if(isset($_POST['submit'])) {
if(empty($_POST['uid'])) {
$uid_err="This field cannot be empty!";
$action=$_SERVER['PHP_SELF'];
} else {
$action="signup.php";
}
}
?>
<form action='<?php echo $action; ?>' method='post'>
<input type="txt" name="uid"><?php echo $uid_err; ?><br>
<button type="submit" name="submit">Submit</button>
</form>
</body>
</html>
答案 0 :(得分:2)
您的$action
变量仅设置在双层if
条件内。虽然如果$_SERVER['PHP_SELF']
为空,您确实将其设置为uid
,但您实际上并未考虑submit
未设置。
因为您需要表单action
属性来首先发送表单,所以不能在页面加载时触发,因此,您的if
条件永远不会输入,$action
永远不会被设置。
要解决此问题,您需要在$action
条件中设置else
:
if(isset($_POST['submit'])) {
if(empty($_POST['uid'])) {
$uid_err="This field cannot be empty!";
$action=$_SERVER['PHP_SELF'];
} else {
$action="signup.php";
}
} else {
$action=$_SERVER['PHP_SELF'];
}
话虽如此,即使if(isset($_POST['submit']))
... $action=
条件完全也是一个没有实际意义,因为修改位置几乎没有意义表格在提交后发送;您不太可能想要将相同的表单两次提交到两个不同的位置。
不是验证表单,阻止提交,然后再次尝试显示表单,而是应该在表单提交的位置处理验证。如果您想阻止用户甚至提交表单,您应该使用JavaScript。但请注意,如果您选择这样做,也需要验证服务器端。