使用get请求时出现php错误

时间:2017-06-15 20:38:52

标签: php sql pdo

我正在尝试选择并使用PDO插入数据库。当我在url中传递我的参数时,它完美地运行。但是当网址中没有任何内容时,我会收到2个错误。

Notice: Undefined index: username in C:\wamp64\www\MT\magiclogin.php on line 19

Notice: Undefined index: password in C:\wamp64\www\MT\magiclogin.php on line 20

发布工作完美,但我想通过网址发送并删除HTML。但每次我重新加载页面我都会收到错误。这是我的代码

<?php

if($_SERVER['REQUEST_METHOD'] =="GET"){

    try{

        // new php data object 
        $handler = new PDO('mysql:host=127.0.0.1;dbname=magicsever', 'root', '');
        //ATTR_ERRMODE set to exception
        $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    }catch(PDOException $e){
        die("There was an error connecting to the database");   

    }



    $username = trim($_GET['username']); 
    $password = trim($_GET['password']);

    $stmt = $handler->prepare("SELECT * FROM generalusersdata WHERE username = ?");

    $stmt->execute(array($username));

    if($row = $stmt->fetch()){

        $hashedPassword = md5(md5($row['user_id']).$_GET['password']);

        if($hashedPassword == $row['password']){

            $token = md5(uniqid(mt_rand(), true));
            $stmtTokenCheck = $handler->prepare("SELECT * FROM token_table WHERE token = ?");

            $stmtTokenCheck->execute(array($token));

            if($rowToken = $stmtTokenCheck->fetch()){

                $token = md5(uniqid(mt_rand(), true));
            }   

            $time = time();
            $stmt = $handler->prepare("INSERT INTO token_table (timestamp, user_id, token)VALUES(?, ?, ?)");
            $stmt->execute(array($time, $row['user_id'], $token));

            echo json_encode([

                "timestamp" => $time,
                "token" => $token,
                "fullname" => $row['fullname'],
                "username" => $row['username'],
                "email" => $row['email']
            ]);

        }else{

            die("Password or Username entered is incorrect!");
        }

    }else{

            die("Password or Username entered is incorrect!");
        }





}




?>

2 个答案:

答案 0 :(得分:3)

如果url查询中没有用户名或密码参数(.as-console-wrapper { max-height: 100% !important; top: 0; }之后的网址部分),则$ _GET数组将为空。

在尝试用它们做逻辑之前,你应该检查这些参数是否为空:

?

还必须注意,通过url查询发送密码是不安全的。此外,md5不足以加密密码。查看PHP的password_hash函数。

答案 1 :(得分:1)

如果你在第一行尝试这个怎么办:

if(isset($_GET['username']) && isset($_GET['password'])) {

...

而不是if($_SERVER['REQUEST_METHOD'] =="GET"){