检查数据库中是否已存在某些内容的函数不起作用

时间:2017-04-04 08:16:07

标签: php mariadb

我正在从事这个项目,我需要一些帮助。我试图在登录时检查某人是否已经在数据库中,如果不是,则会添加它们。但是,我的代码总是将它们添加到数据库中......

登录代码:

<?php
if(isset($_POST["emaillogin"]) and isset($_POST["passwordlogin"])){
    $sql = "SELECT `accnr` 
            FROM `Account` 
            WHERE '$emaillogin' = `emailadress` 
            AND '$passwordlogin' = `password` LIMIT 1";

    $result = mysql_query($sql);

    if ($result == false){
        echo "E-mail or password incorrect! <br>";
    }else{
        $accnr = mysql_fetch_array($result);                    
        setcookie("accnr", $accnr[0] , time() + (1800), "/"); 
        $accnmr = $accnr[0];

        if(check_firstest($accnmr) == false){
            $query = "INSERT INTO `VRIENDEN`
                               (`accnr`,`vriendnr`) 
                        VALUES ('$accnmr','$accnmr')";
            $result = mysql_query($query);
        }

        header("location:home.php");
        die();
    }
}

&GT;

functions.php中的函数:

function check_firstest($accnr){    
$query = mysql_query("SELECT count(*) AS 'num' FROM `VRIENDEN` WHERE `accnr` = '$accnr' AND `vriendnr` = '$accnr'");
    if($result > 0){
        return true;
    }
    else{
        return false;
    }
}

登录自己的工作正常,所以没问题。 谢谢!

2 个答案:

答案 0 :(得分:0)

您的第一个查询有点奇怪,并且您没有将$ _POST中的值捕获到您在查询中使用的变量

<?php
error_reporting(E_ALL); 
ini_set('display_errors', 1);

if(isset($_POST["emaillogin"]) and isset($_POST["passwordlogin"])){
    $sql = "SELECT `accnr` 
            FROM `Account` 
            WHERE `emailadress` = '{$_POST['emaillogin']}'
            AND   `password` = '{$_POST['passwordlogin']}'
            LIMIT 1";

    $result = mysql_query($sql);

    if ($result == false){
        // something went REALLY WRONG, report it
        echo mysql_error();
        exit;
    }
    if ( mysql_num_rows($result) == 1 ) {
        // found user and password matches
        header("location:home.php");
        exit;
    }else{
        // new user, create the account
        $accnr = mysql_fetch_array($result);                    
        setcookie("accnr", $accnr[0] , time() + (1800), "/"); 
        $accnmr = $accnr[0];

        if(check_firstest($accnmr) == false){
            $query = "INSERT INTO `VRIENDEN`
                               (`accnr`,`vriendnr`) 
                        VALUES ('$accnmr','$accnmr')";
            $result = mysql_query($query);
        }
        // and go to home page
        header("location:home.php");
        die();
    }
}
?>

当然还需要修复check_firstest()

function check_firstest($accnr){    
    $result = mysql_query("SELECT count(*) AS 'num' 
                            FROM `VRIENDEN` 
                            WHERE `accnr` = '$accnr' 
                            AND `vriendnr` = '$accnr'");
    if(mysql_fetch_field($result, 0) > 0){
        return true;
    } else{
        return false;
    }
}
  

但我必须添加

     

您的脚本面临SQL Injection Attack的风险   看看Little Bobby Tables偶然发生了什么   if you are escaping inputs, its not safe!   使用prepared parameterized statements

     

     

您不应该使用mysql_数据库扩展,它已被弃用并已存在多年,并且在PHP7中永远消失。   如果您只是学习PHP,请花些精力学习PDOmysqli数据库扩展和准备好的语句。   Start here

答案 1 :(得分:-1)

您必须计算结果行:

function check_firstest($accnr){    
    $result = mysql_query("SELECT count(*) AS 'num' 
                            FROM `VRIENDEN` 
                            WHERE `accnr` = '$accnr' 
                            AND `vriendnr` = '$accnr'");
    if(mysql_fetch_field($result, 0) > 0){
        return true;
    } else{
        return false;
    }
}

这里mysql_num_rows()函数给出了结果集中的行数。如果它大于0则表示存在一些数据。