尝试使用PHP和MYSQLi创建登录系统

时间:2015-03-03 23:19:10

标签: php mysql database mysqli

我开始学习一些MYSQLi& PHP今天,但我有点卡在这一点上。我已经尝试了几种方法,但似乎没有什么对我有用,因为我对它并不是很了解。我正在尝试为已经拥有帐户的用户创建登录功能,但这似乎不起作用。

另外,我知道我目前的密码加密很弱,但我只是在我深入了解安全问题之前,先尝试学习基础知识。

无论如何,这是我的代码:

形式:

<form method="POST" action="login.php" name="login">
Email <input type="email" name="email">
Password <input type="password" name="password">
<input type="submit" name="login" value="Login">
</form>

PHP:     require_once( '芯/的init.php'); //通过新的mysqli连接到数据库

session_start();

if($_SESSION['user'] != ''){
    header('Location: profile.php');
}

if (isset($_POST['submit'])){

    $email = mysqli_real_escape_string( $_POST['email'] );
    $password = mysqli_real_escape_string( $_POST['password'] );

    $hash = md5($password);

    $query = "SELECT * FROM users WHERE email='$email' AND password='$hash'";

    $result = mysqli_query($db,$query)or die(mysqli_error());
    $num_row = mysqli_num_rows($result);

    if( $num_row == 1 ) {
        echo "Does work";
        while ($row = mysqli_fetch_array($result) ){
            $_SESSION['user'] = $row['id'];
        }
    } else {
        echo "Does not work.";
      return false;
    }

    return true;
}

提前谢谢

2 个答案:

答案 0 :(得分:1)

您需要将数据库连接参数传递给POST数组 您未执行的mysqli_real_escape_string($connection, $var) 必需 ,同时确保所有表单元素都包含匹配的名称属性,包括POST方法。

来自手册:

  

string mysqli_real_escape_string(mysqli $ link,string $ escapestr)

另外,我建议您在标题后添加exit;。否则,代码可能会继续执行。

您的条件声明

if (isset($_POST['submit']))

与您的提交按钮输入

不匹配
<input type="submit" name="login" value="Login">
                     ^^^^^^^^^^^^

应该命名为&#34;提交&#34;而不是&#34;登录&#34;

该条件语句中的任何内容都将执行

将其更改为:

<input type="submit" name="submit" value="Login">

error reporting添加到文件的顶部,这有助于查找错误。

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

// rest of your code

旁注:错误报告应仅在暂存时完成,而不是生产。

答案 1 :(得分:0)