isset没有检查脚本

时间:2016-06-27 17:34:22

标签: php mysql forms login

<!DOCTYPE HTML>
<html>
<head>
<title>Sign-In</title> 
</head> 
<body>
<form method="POST" action="home.php">
User: <br><input type="text" name="username" size="40"/><br /> 
Password: <br><input type="password" name="password" size="40"/><br /> 
<input type="submit" name="submit" value="Log-In" /> 
</form> 
</body> 
</html> 
<?php
error_reporting(E_ALL);

if (isset($_POST['submit']))
{   
    mysql_connect('localhost', 'root', '') or die(mysql_error());
    mysql_select_db('cheapbooks');
    echo "connected to DB";
    $username = $_POST["username"];
    $password = $_POST["password"];

    $query = mysql_query("SELECT * FROM customer WHERE username='".$username."' AND password='".$password."' ");
    $numrows = mysql_num_rows($query);
    if($numrows!=0)
    {
        while($row = mysql_fetch_assoc($query))
        {
            $dbuser = $row['username'];
            $dbpass = $row['password'];
        }
        if($username == $dbuser && $password == $dbpass)
        {
            session_start();
            $_SESSION['sess_user']=$username;
            echo "Logged in successfully";
            //header("Location: home.php"); //Redirecting to home page after login
        }
        else
        {
            echo "Invalid username or password!";
        }
    }
    else
    {
        echo "Failed........";
    }
}
else
{
    echo "NO Action!!!";
}
?>

我已编写此代码用于创建登录表单。当我在浏览器中打开表单时,它会显示&#34; No Action !!!!&#34;这是最后的陈述。我无法弄清楚错误,为什么它不检查是否(isset($ _ POST [&#39; submit&#39;]))

2 个答案:

答案 0 :(得分:1)

当表单加载时,你必须将php部分分开,当表单尚未提交时检查isset($ _ POST [&#39; submit&#39;]),这样你就不会看到任何动作。 创建一个login.php文件并放入此代码

<!DOCTYPE HTML>
<html>
<head>
<title>Sign-In</title> 
</head> 
<body>
<form method="POST" action="home.php">
User: <br><input type="text" name="username" size="40"/><br /> 
Password: <br><input type="password" name="password" size="40"/><br /> 
<input type="submit" name="submit" value="Log-In" /> 
</form> 
</body> 
</html> 

接下来在同一个文件夹中创建另一个名为home.php的文件并放入php代码

<?php
error_reporting(E_ALL);

if (isset($_POST['submit']))
{   
    mysql_connect('localhost', 'root', '') or die(mysql_error());
    mysql_select_db('cheapbooks');
    echo "connected to DB";
    $username = $_POST["username"];
    $password = $_POST["password"];

    $query = mysql_query("SELECT * FROM customer WHERE username='".$username."' AND password='".$password."' ");
    $numrows = mysql_num_rows($query);
    if($numrows!=0)
    {
        while($row = mysql_fetch_assoc($query))
        {
            $dbuser = $row['username'];
            $dbpass = $row['password'];
        }
        if($username == $dbuser && $password == $dbpass)
        {
            session_start();
            $_SESSION['sess_user']=$username;
            echo "Logged in successfully";
            //header("Location: home.php"); //Redirecting to home page after login
        }
        else
        {
            echo "Invalid username or password!";
        }
    }
    else
    {
        echo "Failed........";
    }
}
else
{
    echo "NO Action!!!";
}
?>

当您打开login.php时,您将获得该表单,当您发布它时,它将重定向到home.php文件。你可以在home.php做任何你想做的事情。 另外,我建议您使用mysqliPDO它们更安全。

答案 1 :(得分:0)

isset($_POST['submit'])清楚地说,

  

此页面是否包含$_POST(包含&#39;提交键)或否?

如果答案是肯定的,则显示您的逻辑,否则显示"NO Action!!!"部分。您应该知道,它始终会检查$_POST内容是否设置。而对于您正在查看的内容,页面的请求方法给出了。由于您要告诉该网页听取$_POST方法以显示逻辑(而不是其中包含的内容),您的表达应该是

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submit'])) {
    /*ok*/
}else{
    /*No action*/
}

现在说

  

此页面是否包含$_POST(包含&#39;提交&#39;密钥),请求方法是否为post?

和其他人一样,分离文件(我实际上是指目的)总是更好。