我已经为用户创建了一个数据库和一个用户名和密码的表。我想用简单的HTML
和PHP
创建一个登录页面,但是我无法找到解决PHP问题的任何解决方案code.So有一个登录页面(index.html)
和Chklogin.php
以及login_success.php.
当我输入已插入到users表中的用户名和密码之前,它不会显示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");
?>
答案 0 :(得分:3)
将AND username != '' AND username IS NOT NULL LIMIT 1
添加到您的SQL语句中。否则,在某些情况下,有人可能无法使用正确的凭
session_start()
和header()
需要在所有echo
,print
等输出(也是空白空间)之前放置。为什么?会话通常以浏览器的cookie开头,cookie在标题内发送。标题需要在实际有效载荷之前。
不要仅检查会话中是否存在用户名,检查整个登录凭据是否正确。某些会话仍保存在某人可能能够操作这些
将exit;
放在header()
之后 - 并非所有客户都遵循标题信息,并且您的脚本可能会在某些情况下继续导致奇怪的效果
进行调试,将error_reporting(E_ALL);
和ini_set('display_errors', true);
置于一切之上
答案 1 :(得分: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");