【问题标题】:isset is not checking the scriptisset 没有检查脚本
【发布时间】:2016-06-27 17:34:21
【问题描述】:
<!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!!!";
}
?>

我已经编写了这段代码来创建登录表单。当我在浏览器中打开表单时,它显示“无操作!!!”这是最后一个else中的语句。我无法弄清楚错误,为什么它不检查 if (isset($_POST['submit']))

【问题讨论】:

  • 首次加载页面时,在表单发布之前,$_POST 未定义。因此,isset($_POST['submit']) 为 false,并且显示您的“无操作”消息。
  • 一个更典型的例子应该告诉大家最终停止将表单和处理逻辑放在同一个脚本中的愚蠢习惯。不!它只会制造问题!
  • 向@arkascha 弟兄传道!传道!
  • 删除else 部分或将您的表单处理逻辑放到不同的脚本中
  • 停止使用mysql_*,它已被sinds php 5.5 弃用,并在php 7.0 中完全删除。请改用mysqli_*PDO

标签: php mysql forms login


【解决方案1】:

您必须将 php 部分分开,因为当表单加载时,它会在表单尚未提交时检查 isset($_POST['submit']),因此您将看不到任何操作。 创建一个 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,它们更安全。

【讨论】:

  • 另一个文件不是required 它可以是同一个文件。提到这两个选项。
  • @xdevnull 可以,但有不好。最好将表单和处理分开
【解决方案2】:

isset($_POST['submit']) 明确表示,

此页面是否包含$_POST(包含“提交”键)或没有?

如果答案是肯定的,它显示你的逻辑,否则 "NO Action!!!" 部分。你应该知道,它总是会检查$_POSTcontent是否设置。而对于你所看到的是,页面发出的请求方法。由于您要告诉页面收听$_POST 方法以显示逻辑(而不是它/键包含的内容),因此您的表达应该是

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

现在说

此页面是否包含$_POST(包含'submit'键)并且请求方法是否为post?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 2020-04-19
    • 1970-01-01
    • 2014-01-18
    • 2018-08-05
    • 2012-10-23
    • 1970-01-01
    相关资源
    最近更新 更多