繁体   English   中英

用户登录页面PHP的if语句出错

[英]Error in if statement for user login page PHP

我正在创建此页面作为登录系统,数据库连接正常,我没有看到任何错误或得到任何错误,问题是当我输入正确的用户名和密码时我得到了:

“抱歉,您输入了错误的用户名和密码...请重试...”

当我输入错误的用户名和密码时,我得到一个空白页。

<?php
include_once("db_connection.php"); 

$userName = $_POST['user'];
$password =  $_POST['password'];

if($userName == "" || $password == ""){
echo "Fill in both field";
exit;
}

function SignIn(){
session_start();   //starting the session for user profile page
if(!empty($_POST['user']))   //checking the 'user' name which is from Sign-In.html, is it empty or have some text
{
    $query = mysql_query("SELECT * FROM Customer WHERE userName = '$_POST[user]' AND password = '$_POST[password]'") or die(mysql_error());
    $row = mysql_fetch_array($query) or die(mysql_error());
    if(!empty($row['userName']) AND !empty($row['password']))
    {
        $_SESSION['userName'] = $row['password'];
        echo "SUCCESSFULLY LOGIN TO USER PROFILE PAGE...";

    }
    else
    {
        echo "SORRY... YOU ENTERD WRONG ID AND PASSWORD... PLEASE RETRY...";
    }
}
}
if(isset($_POST['submit']))
{
SignIn();
}

?>

这是HTML,因此每个人都可以看到我正在尝试做的事情:

<!DOCTYPE HTML>
<html>
<head>
<title>Sign-In</title>
<link rel="stylesheet" type="text/css" href="style-sign.css">
</head>

<body id="body-color">
    <div id="Sign-In">
        <fieldset style="width:30%"><legend>LOG-IN HERE</legend>
            <form method="POST" action="connectivity.php">
                User <br><input type="text" name="user" size="40"><br>
                Password <br><input type="password" name="password" size="40"><br>
                <input id="button" type="submit" name="submit" value="Log-In">
            </form>
        </fieldset>
    </div>
</body>

</html>

尝试:

 $query = mysql_query("SELECT * FROM Customer WHERE userName = '{$_POST['user']}' AND password = '{$_POST['password']}'") or die(mysql_error());

或为了安全起见:

 $query = mysql_query("SELECT * FROM Customer WHERE userName = '" . mysql_real_escape_string($_POST['user']) . "' AND password = '" . mysql_real_escape_string($_POST['password'] . "'") or die(mysql_error());

我也认为您可能要使用:

$row = mysql_fetch_assoc($query);

而不是:

$row = mysql_fetch_array($query);

您的代码中有太多问题,

1:您对SQL注入持开放态度,因为您没有清除变量。

2:不建议使用mysql_ *,因为它们已被弃用。

3:像这样尝试查询:

mysql_query("SELECT * FROM Customer 
             WHERE userName = '".mysql_real_escape_string($_POST['user'])."' 
             AND password = '".mysql_real_escape_string($_POST['password'])."'");

4:检查您的拼写,我发现应该输入ENTERD

警告! 警告!

您的代码容易被注入。 我所要做的就是输入我选择的用户名和密码' or '1 ,它将使我进入任何人的帐户!

使用mysql_real_escape_string来转义值并使其安全。

还:您似乎正在将密码另存为PLAINTEXT字符串。 这不好。 我的意思是真的, 真的真的真的很糟糕。 我不能强调这有多严重。 有关宇宙的大小,请参见《旅行者指南》。

...除非您以加密格式保存它们,并尝试以纯文本形式访问它们。 那将永远行不通,您需要对用户输入的任何内容进行加密,并查看它是否对同一件事进行加密。

您的SQL查询字符串使用$ _POST [user]的文字值,您应该将其实际值连接到String中。 实际上,您应该对其进行转义以防止SQL注入,因为这是从客户端发布的。

该线程解释注入: 如何防止PHP中的SQL注入?

用以下内容替换您的SQL语句:

SELECT * FROM Customer WHERE userName = '$userName' AND password = '$password'

假设您不想进行任何形式的消毒。 如果这样做,请将您的第一行更改为:

$userName = mysql_real_escape_string($_POST['user']);
$password = mysql_real_escape_string($_POST['password']);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM