Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我在代码中找不到bug_Php_Mysql - Fatal编程技术网

Php 我在代码中找不到bug

Php 我在代码中找不到bug,php,mysql,Php,Mysql,这是一个小的登录和注册程序的代码。每次用户尝试登录时,此代码都会检查电子邮件和密码是否正确。如果在mysql提示符中输入相同的查询,则该查询也可以工作。 我无法找出代码中的错误。每次我输入有效的电子邮件和密码$result都会变为FALSE <html> <head> <title>Log In</title> </head> <body> <?php $host = "localhost";

这是一个小的登录和注册程序的代码。每次用户尝试登录时,此代码都会检查电子邮件和密码是否正确。如果在mysql提示符中输入相同的查询,则该查询也可以工作。 我无法找出代码中的错误。每次我输入有效的电子邮件和密码$result都会变为FALSE

<html>
<head>
    <title>Log In</title>
</head>
<body>
<?php
    $host = "localhost";
    $user = "root";
    $password = "password";
    $database = "user";
    $conn = mysqli_connect($host, $user, $password, $database);
    if(!$conn) {
        die("Connection Error: ".mysqli_connect_error($conn));
    }
    $query = "select email, password from user_info where email = \'$_POST[login_email]\' or password = \'$_POST[login_password]\'";
    $result = mysqli_query($conn, $query);
    if(!$result)
        die("failure");
    if(mysqli_num_rows($result) > 0) {
       $details = mysqli_fetch_assoc($result);
        if($details["email"] != $_POST["login_email"] && $details["password"] != $_POST["login_password"]) {
            die("Invalid username or password.");
        }
        echo "successful";
    }
    else {
        die("Don't have an account yet?. Please Sign Up to get started.");
    }
?>
</body>
</html>

登录

解析字符串中的数组变量是一项棘手的操作:

$query = "select email, password from user_info where email = \'$_POST[login_email]\' or password = \'$_POST[login_password]\'";
应改为:

$query = "select email, password from user_info where email = ? or password=?"
$stmt=con.prepare($query)
$stmt->bind_param("s", $_POST[login_email]);
$stmt->bind_param("s", $_POST[password]);
$stmt->execute();
$stmt->bind_result($result);
$stmt->fetch();
但是,如果
登录\u电子邮件
正确或密码正确,您将得到一个结果。因此,对于此查询检查凭据,50%的正确率就足够了

下一行也很有趣:

 if($details["email"] != $_POST["login_email"] && $details["password"] != $_POST["login_password"]) 

因此,两者都必须是不正确的才能出错。同样,只要有一个用户名或随机密码(甚至不知道它属于哪个用户),就足以登录。有点奇怪。

@lalithkumar是对的。但作为临时解决方案,您可以将
$query
行更改为以下内容


$query=“从用户信息中选择电子邮件、密码,其中电子邮件=”。$\u POST[“login\u email”]。”或密码=”。$\u POST[“login\u password”]。”

使用准备好的语句。这将导致sql注入对从表单中获取的参数进行响应。这是一件事,另一件事是,这是一个可怕的做法,你正在做什么,你被黑客在2秒钟内,sql注入。您应该通过电子邮件和密码进行查询,而不是电子邮件或密码。所以任何知道你的邮件的人都能收到。谢谢你们两位。这是一个愚蠢的错误@Arminius