为什么我不能用PHP if语句在html中提交表单操作?

时间:2018-02-27 02:52:50

标签: php html

当我点击“提交”时,我总是收到错误消息,说“找不到对象!”但是,如果我将$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> 

1 个答案:

答案 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。但请注意,如果您选择这样做,需要验证服务器端。