1

我已经为具有用户名和密码的用户创建了一个数据库和一个表。我想创建一个简单的登录页面,HTMLPHP我找不到任何解决我的 PHP 代码问题的方法。所以有一个登录页面(index.html)Chklogin.php一个login_success.php. 当我键入时在不会显示 login_success 页面之前,我已插入用户表的用户名和密码。

这是我的 Chklogin.php 代码:

<?php

$host="localhost"; // Host name
$username="root"; // username
$password="root"; // password
$db_name="TA"; // Database name
$tbl_name="user"; // Table name

mysql_connect("$host", "$username", "$password");
mysql_select_db("$db_name");


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

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1){
  // Register $myusername, $mypassword and redirect to file "login_success.php"
  session_start();
  $_SESSION['username'] = $myusername;
  $_SESSION['password'] = $mypassword; 
  header("location: login_success.php");
} 
    else {
        echo "Wrong Username or Password";
}

?>

login_success.php 的代码:

<?php 
session_start(); 

if(!$_SESSION['username']){ 
    header("Location: index.html"); 
    exit; 
} 
echo 'Welcome, '.$_SESSION['username']; 
header("Location: student-page.html");
?>
4

2 回答 2

3
  1. 添加AND username != '' AND username IS NOT NULL LIMIT 1到您的 SQL 语句中。否则,在某些情况下,有人可能会在没有正确凭据的情况下登录。

  2. session_start()并且header()需要放在所有echo,print等输出之前(也是空格)。为什么?会话通常以浏览器的 cookie 开始,cookie 在标头内发送。标头需要在实际有效负载之前。

  3. 不要只检查用户名是否存在于会话中,检查整个登录凭据是否正确。一些会话仍然保存在有人可能能够操纵它们的位置

  4. 放在exit;后面header()- 并非所有客户端都遵循标头信息,并且您的脚本在某些情况下可能会继续导致奇怪的效果

  5. 用于调试,放在error_reporting(E_ALL);一切ini_set('display_errors', true);之上

于 2013-06-13T11:18:14.413 回答
1

你需要检查的东西

1.
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
echo $sql; // Because you have to be sure the query is correct


2.
$count=mysql_num_rows($result);
echo $count; // Because the number can be > 1
or add LIMIT 1 to the query

3.
if($count==1){
echo 'ok'; // to see if everything is okay
}

4. If all 3 of the above are True then check the path to this file
header("location: login_success.php"); 
于 2013-06-13T11:25:49.240 回答