无法登录php会话未启动
有什么事吗?我无法使用php会话登录。密码和用户名都匹配,但不会创建会话。有什么问题吗无法登录php会话未启动,php,Php,有什么事吗?我无法使用php会话登录。密码和用户名都匹配,但不会创建会话。有什么问题吗 if (isset($_POST['submit'])) { $sql = "select * from user where email='" . fixstr($_POST['email']) . "' and password='" . fixstr($_POST['password']) . "' and active = 1 "; $res = mysql
if (isset($_POST['submit'])) {
$sql = "select * from user where email='" . fixstr($_POST['email'])
. "' and password='" . fixstr($_POST['password']) . "' and active = 1 ";
$res = mysql_query($sql);
$rs = mysql_fetch_array($res);
if ($rs) {
$_SESSION['user_id'] = $rs['user_id'];
$_SESSION['email'] = $rs['email'];
$_SESSION['type'] = $rs['type'];
if($_SESSION['type']=="Manager"){
updateLastSignIn();
redirect("");
} else if($_SESSION['type']=="Admin"){
updateLastSignIn();
redirect('main.php?status=open');
} else {
updateLastSignIn();
redirect('main.php?status=open');
}
} else {
$msg2 = 'Invalid email or password';
}
}
<table align="center" border="0" cellpadding="2" cellspacing="2" >
<tr valign="middle">
<td align="left" style="font-size:16px;"></td>
</tr>
</table>
<form id="form" method="post" class=''>
<table border="1" align="center" cellspacing="0" cellpadding="0">
<tr valign="top">
<td class="boxtitle" align="center">Login portal</td>
</tr>
<tr>
<td>
<table width="300" border="0" cellpadding="2" cellspacing="1">
<tr><td colspan="2"> </td></tr>
<tr><td align=right width="100">Username:</td><td align=left width="200"><input type="text" id="email" name="email" class="input-large" placeholder="Type email"/></td></tr>
<tr><td align=right>Password:</td><td align=left><input type="password" id="password" name="password" class="input-large" placeholder="Type password" /></td></tr>
<tr><td align="center"> </td><td><button type="submit" id="submit" name="submit" class=""> Sign in </button></td> </tr>
<tr><td colspan="2"> </td></tr>
<tr><td colspan="2" align="center">Registered users may sign in here.</td></tr>
<tr><td colspan="2" align="center">Register an account click <a href="http://live-freecams.com/sign_up-member.php">here</a></td></tr>
<tr><td colspan="2"> </td></tr>
</table>
</td>
</tr>
</table>
</form>
if(isset($\u POST['submit'])){
$sql=“从电子邮件地址为“”的用户中选择*”。fixstr($\u POST['email']))
“'and password='”。fixstr($_POST['password'])。“'and active=1”;
$res=mysql\u查询($sql);
$rs=mysql\u fetch\u数组($res);
如果有的话(卢比){
$\u会话['user\u id']=$rs['user\u id'];
$\会话['email']=$rs['email'];
$\会话['type']=$rs['type'];
如果($_会话['type']==“管理器”){
updateLastSignIn();
重定向(“”);
}else if($_会话['type']==“Admin”){
updateLastSignIn();
重定向('main.php?status=open');
}否则{
updateLastSignIn();
重定向('main.php?status=open');
}
}否则{
$msg2='无效的电子邮件或密码';
}
}
登录门户
用户名:
密码:
登录
注册用户可以在此登录。
注册帐户单击
只要添加一个连接,它就会工作。为什么我的代码不工作????可能是PHP无法自动启动会话。您需要做的是添加
session_start()
在编码标题处。在创建会话之前,首先启动会话
@session_start();
if(!isset($_SESSION['user_id'], $_SESSION['email'], $_SESSION['type'] ))
{
$_SESSION['user_id'] = $rs['user_id'];
$_SESSION['email'] = $rs['email'];
$_SESSION['type'] = $rs['type'];
}
试试这个,看看它是否有用,我希望它会有用。请别忘了开始这个环节
<?php
session_start();
if (isset($_POST['submit'])) {
$sql = "select * from user where email='" . fixstr($_POST['email'])
. "' and password='" . fixstr($_POST['password']) . "' and active = 1 ";
$res= mysql_query($sql);
$rs = mysql_fetch_array($res);
if ($_SESSION['user_id'] == $rs['user_id'] && $_SESSION['email'] == $rs['email'] && $_SESSION['type'] == $rs['type']){
if($_SESSION['type']=="Manager"){
updateLastSignIn();
redirect("");
} else if($_SESSION['type']=="Admin"){
updateLastSignIn();
redirect('main.php?status=open');
} else {
updateLastSignIn();
redirect('main.php?status=open');
}
} else {
$msg2 = 'Invalid email or password';
}
}
?>
您的代码有一些地方可以改进,另外,您至少应该使用一些var_dumps()来了解代码发生了什么
尝试对代码进行这几处更改,这会使代码更具可读性,并且能够更好地处理缺少结果的情况
// initialize variables
$email = false;
$password = false;
$user = false;
$sql = false;
$res = false;
$msg2 = false;
// if you are sure that you will get the whole set of results from the database, use this for $rs
$rs = false;
// if you may not get some of the results, or they may be null, use this for $rs
// $rs = array();
// $rs['user_id'] = false;
// $rs['email'] = false;
// $rs['type'] = false;
// var_dump( $_POST );
// var_dump( $_SESSION );
// Assign values if tey exist
if ( isset( $_POST['email'] ) !== false ) {
if ( empty( $_POST['email'] ) === false ) {
$email = $_POST['email'];
}
}
if ( isset( $_POST['password'] ) !== false ) {
if ( empty( $_POST['password'] ) === false ) {
$password = $_POST['password'];
}
}
// if you have something to look for, start working
if ( ( $email !== false ) && ( $password !== false ) ){
$sql = "select * from user where email='" . fixstr( $_POST['email'] ) . "' and password='" . fixstr( $_POST['password'] ) . "' and active = 1 ";
$res = mysql_query( $sql );
$rs = mysql_fetch_array( $res );
}
// If you have results from the query, do something with them
if ( $rs !== false ) {
// reconnect/start session
session_start();
// var_dump( $_POST );
// var_dump( $_SESSION );
// store values
if ( $rs['user_id'] !== false ) {
$_SESSION['user_id'] = $rs['user_id'];
}
if ( $rs['email'] !== false ) {
$_SESSION['email'] = $rs['email'];
}
if ( $rs['type'] !== false ) {
$_SESSION['type'] = $rs['type'];
switch ( $rs['type'] ) {
case "Manager":
updateLastSignIn();
redirect("");
break;
case "Admin":
updateLastSignIn();
redirect('main.php?status=open');
break;
default:
// whatever is right for you here
}
} else {
$msg2 = 'Invalid email or password';
}
}
// var_dump( $_POST );
// var_dump( $_SESSION );
当然,在数据库中使用之前,您仍然应该对从$\u POST接收的变量进行一些检查和清理。此外,还有其他方法可以改进代码,但我所写的只是一些可能有助于检测问题的小改动
关于课程的开始,您可以将其上移或下移,我们不知道您项目的全部代码,但考虑到您所拥有的,我把它放在哪里,似乎是一个不错的选择。我们没有majic glass来发现问题,所以发布您的代码……如果我不得不猜测,我会说是的。真的应该是这样的。为什么你不尝试设置另一个条件来检查这些值是否会出现?您只是获取了值,然后直接分配给它们,是吗right@user1844933“它不起作用”是什么意思?你能解释一下吗?尝试给我们一些调试错误或致命/警告异常?