1

我正在开发一个基本的登录系统,该系统允许注册/登录将用户存储在 MySQL 数据库中。我有它,所以人们可以注册,它将用户名和散列密码存储在数据库中。当有人登录时,它会根据用户名和密码是否匹配显示成功消息或错误消息。

我的问题在于登录功能。我需要创建用户会话并将它们重定向到站点的仅登录部分,而不是显示当前存在的成功消息。我不确定该怎么做...

这是我的代码:

登录/注册功能

function login($username, $password) {
    $userpass = sha1($password);
    $result = mysqli_query($con, "SELECT * FROM members WHERE username='$username' AND password='$userpass'");
    while($row = mysqli_fetch_array($result)) {
        $success = true;
    }
    if($success == true) {
        echo 'Success!';
    } else {
        echo '<div class="alert alert-danger">Oops! It looks like your username and/or password are incorrect. Please try again.</div>';
    }
} // END LOGIN FUNCTION

function register($username, $password) {
    $userpass = sha1($password);

    // Check if Username Exists
    $result = mysqli_query($con,"SELECT * FROM members WHERE username='$username'");
    while($row = mysqli_fetch_array($result)) {
        $userexist = 1;
    }
    if($userexist > 0) {
        echo '<div class="alert alert-danger">Sorry, it looks like that username is already taken.</div>';
    } else {
        $newmember = "INSERT INTO members SET username='$username', password='$userpass'";
        if(mysqli_query($con,$newmember)) {
            echo '<div class="alert alert-success">Congrats! You can now log in using your username and password</div>';
        }
    }
}
4

5 回答 5

3

这样想

function login($username, $password) {
    $userpass = sha1($password);
    $result = mysqli_query($con, "SELECT * FROM members WHERE username='$username' AND password='$userpass'");
    while($row = mysqli_fetch_array($result)) {
        $success = true;
    }
    if($success == true) {
        $_SESSION['username']= $username; 
        //redirect to home page
    } else {
        echo '<div class="alert alert-danger">Oops! It looks like your username and/or password are incorrect. Please try again.</div>';
    }
} // END LOGIN FUNCTION
于 2013-08-22T13:25:20.253 回答
0
   session_start();

    if($_SERVER["REQUEST_METHOD"] == "POST") {

$myusername=addslashes($_POST['username']);
$mypassword=addslashes($_POST['password']); 

    $sql="SELECT id FROM admin WHERE username='$myusername' and passcode='$mypassword'";
$result=mysql_query($sql);
    $row=mysql_fetch_array($result);


$active=$row['active']; 
    $count=mysql_num_rows($result); 
       if($count==1) {
              session_register("myusername"); 
                  $_SESSION['login_user']=$myusername;

              header("location: welcome.php"); 
         } 
       else { 
              $error="Your Login Name or
          Password is invalid";
            }
   } 
于 2013-08-22T13:42:36.600 回答
0

这在很大程度上取决于您如何构建其余代码。如果您只是在构建 HTML 页面并在哪里添加 PHP 函数,那么您可以在代码的各个位置使用像这样简单的东西:

$loggedIn = login($username, $password)

然后你需要让登录返回真或假。然后你的路由结构可以根据 $loggedIn 做出不同的决定,你的页面可以显示不同的布局和内容。

就编程风格而言,这不是一种很好的风格,但它可能会给你一个想法。如果您添加有关如何构建代码的更多详细信息,您应该会得到更好的答案

于 2013-08-22T13:23:08.357 回答
0

为了给你一个 Usman Allam 答案的变体,我认为简单地检查 mysqli_num_rows($result) 是否 >= 1 会简单得多

function login($username, $password) {
    $userpass = sha1($password);
    $result = mysqli_query($con, "SELECT * FROM members WHERE username='$username' AND password='$userpass'");
    if(mysqli_num_rows($result) >= 1) {
        $_SESSION['username'] = $username; 
        //redirect to home page
    } else {
        echo '<div class="alert alert-danger">Oops! It looks like your username and/or password are incorrect. Please try again.</div>';
    }
} // END LOGIN FUNCTION
于 2019-07-08T19:05:54.830 回答
0

然后你需要让登录返回真或假。然后你的路由结构可以根据 $loggedIn 做出不同的决定,你的页面可以显示不同的布局和内容。

就编程风格而言,这不是一种很好的风格,但它可能会给你一个想法。如果您添加有关如何构建代码的更多详细信息,您应该会得到更好的答案

于 2021-10-13T07:04:45.943 回答