登录有效,但无法注册。你能找到错误吗?

时间:2018-06-26 14:02:28

标签: php mysql

我是编码的新手,并且为我的登录功能(使用数据库)使用了一些模板和教程,效果很好。我几乎为注册功能使用了相同的代码。但这是行不通的。在这种情况下,安全性并不重要,请忽略它。

该按钮似乎未提交任何内容。也没有错误或出现任何东西。 login.php已包含在源代码中(未包含在下面的代码中)

应如何工作:

登录(工作):输入电子邮件和密码时,系统检查是否在数据库(用户)中保存了相同的组合(电子邮件和密码),如果数据正确,则将我重定向到下一个站点(不安全,我知道)。否则,它会显示一条错误消息。

注册(不工作):输入电子邮件和密码时,系统检查数据库中是否存在相同的电子邮件。如果存在,则会显示一条消息。否则,电子邮件和密码将保存在数据库中。

<?php  

$link = mysqli_connect("localhost", "root"); 

if (!$link) 
    { 
    die("Connection not possible: " . mysqli_error()); 
    } 

$datenbank = mysqli_select_db("dbname", $link); 

if (!$datenbank) 
    { 
    echo "Cannot use database: " . mysqli_error(); 
    mysqli_close($link);
    exit;
    } 

if (!empty($_POST["login"])) 
    { 
    $_loginEmail = mysqli_real_escape_string($link, $_POST["uname"]); 
    $_loginPasswort = mysqli_real_escape_string($link, $_POST["psw"]); 

    $_sql = "SELECT * FROM user WHERE 
                email='$_loginEmail' AND 
                passwort='$_loginPasswort'
            LIMIT 1"; 

    $_res = mysqli_query($link, $_sql); 
    $_counter = @mysqli_num_rows($_res); 

    if ($_counter> 0) 
        { 
        echo "Logged in"; 
        header("Location: xxxxxxx.php");
        }
    else 
        { 
        echo "Wrong login<br>"; 
        } 
    }


if (!empty($_POST["register"])) 
    { 
    $_registerEmail = mysqli_real_escape_string($link, $_POST["email"]); 
    $_registerPasswort = mysqli_real_escape_string($link, $_POST["psw1"]);

    $_sql = "SELECT * FROM user WHERE 
                email='$_registerEmail'
            LIMIT 1"; 

    $_res = mysqli_query($link, $_sql); 
    $_anzahl = @mysql_num_rows($_res); 

    if ($_coujnter> 0) 
        { 
        echo "email exists";
        }
    else 
        { 
        $_sql = "INSERT INTO user (email, passwort) VALUES('$_registerEmail', '$_registerPasswort')";
        $_res = mysqli_query($link, $_sql); 
        } 
    }       

mysqli_close($link); 

1 个答案:

答案 0 :(得分:1)

您在注册时遇到的问题是缺乏一致性

例如,您首先说;

$link = mysql_connect("localhost", "root"); 

然后对注册进行插入查询;

$_res = mysqli_query($_sql, $link); 

除了后者具有错误方式的参数(链接然后是sql)外,您还使用2种单独的方法尝试完成相同的工作,mysqli函数无法与mysql函数配合使用,请坚持使用一个或其他,并按照您的问题的评论所述;

使用mysqli函数,因为这些函数更安全并允许准备语句

主要原因是自(我认为)PHP v5.5 mysql函数已弃用,并已在PHP v7中完全删除

question and its answers将帮助您提高查询的安全性

NB ;以下内容可以在php.net mysql_connect页面上找到,该页面通过有用的链接解释了我在上面所说的内容;

  

警告   此扩展在PHP 5.5.0中已弃用,在PHP 7.0.0中已删除。而是应使用MySQLiPDO_MySQL扩展名。另请参见MySQL:选择API指南和related FAQ了解更多信息。此功能的替代方法包括:
  mysqli_connect()
  PDO::__construct()