无法登录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

有什么事吗?我无法使用php会话登录。密码和用户名都匹配,但不会创建会话。有什么问题吗

   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">&nbsp;</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">&nbsp;</td><td><button type="submit" id="submit" name="submit" class="">&nbsp;&nbsp;&nbsp;&nbsp;Sign in&nbsp;&nbsp;&nbsp;&nbsp;</button></td>   </tr>
    <tr><td colspan="2">&nbsp;</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">&nbsp;</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“它不起作用”是什么意思?你能解释一下吗?尝试给我们一些调试错误或致命/警告异常?