登录获取用户名而非电子邮件

时间:2014-11-09 13:25:19

标签: php html email

使用电子邮件登录后,我一直在努力获取用户名。登录后,我可以设法获取电子邮件的名称而不是用户名。

查看下面的login.php代码:

<form id="myForm" action="loginAction" name="login" method="POST">  
            <p> <label class="inputField" > Email Address : </label> </p>
            <p> <input class="registerField" id="emailid" name="email" required="required" type="text" placeholder="eg. john.wick@yahoo.com"/> <span class="warning" id="emailWarning"> </p>

            <p> <label class="inputField" > Password : </label> </p>
            <p> <input class="registerField" id="password" name="password" required="required" type="password" placeholder="Your password"/> </p>

            <p> <input name="submit" class="registerButton" type="submit" value="LOGIN"> </p>
        </form>

该操作将转至loginAction.php

if(isset($_POST['submit'])) {
    $username = trim($_POST['email']);
    $password = trim($_POST['password']);

    $username = $mysqli->real_escape_string($username);
    $password = $mysqli->real_escape_string($password);

    $salt = sha1(md5($password));
    $epwd = md5($password.$salt);

    $loginUser = "  SELECT registerPassword, emailAddress, firstName, lastName FROM register_user
                    WHERE emailAddress = '$username' AND registerPassword = '$epwd'";

    $loginSuccess = mysqli_query($mysqli, $loginUser) or die(mysqli_error($mysqli));
    $loginRow = mysqli_num_rows($loginSuccess);

    if($loginRow === 1) {

        session_start();
        $_SESSION['login'] = true;
        $_SESSION['username'] = $username;

        if ($_SESSION['login'] != '' || $_SESSION['login'] > 0 )

        echo $_SESSION['username'];
        echo $_SESSION['firstName'];
        echo $_SESSION['lastName'];

        header ("Location: index");
        } else {
            header ("Location: loginRegError");
        }
    mysqli_close($mysqli);
}

登录成功后,将转到此页面

<?php
                ini_set('display_errors',1); 
                error_reporting(E_ALL);
                include 'dbconnect.php';

                if(isset($_SESSION['login']) && !empty($_SESSION['login'] )) {
                    $firstName = $_SESSION['firstName'];

                    echo "<p> <a href=\"profileUser\"> $firstName </a>";
                    echo "<img src=\"images/logo/account.png\" /> </p>";
                        } else {
                        echo "<a href=\"loginReg\"> Login/Register </a>";
                        echo "<img src=\"images/logo/account.png\" /> </p>";
                    }
            ?>

错误显示注意:未定义索引:firstName 。如果我使用$_SESSION作为电子邮件,它可以工作,但我想显示用户的名字。任何的想法?

3 个答案:

答案 0 :(得分:3)

loginAction.php中,未分配$_SESSION['firstName']。这就是为什么稍后重定向后,它没有设置,所以试图访问它会给出未定义的索引错误。

如果您想稍后访问它,可能最好只保存用户信息行:

$loginSuccess = mysqli_query($mysqli, $loginUser) or die(mysqli_error($mysqli));
$loginRow = mysqli_num_rows($loginSuccess);

if($loginRow === 1) {

    session_start();
    $_SESSION['login'] = true;
    // fetch the values
    $user_info = $loginSuccess->fetch_assoc();
    $_SESSION['user_info'] = $user_info; // assign that row in the session for later use

然后在该重定向页面上:

if(isset($_SESSION['login'])) {

    echo $_SESSION['user_info']['firstName'];
    // and others

}

旁注:在这种情况下使用prepared statements要好得多,并使用PHP 5.5的password hashing而不是md5。对于较小版本(PHP <= 5.4)

,还有compatibility pack

答案 1 :(得分:1)

session_start();
    $_SESSION['login'] = true;
    $_SESSION['username'] = $username;

    if ($_SESSION['login'] != '' || $_SESSION['login'] > 0 )

    echo $_SESSION['username'];
    echo $_SESSION['firstName'];
    echo $_SESSION['lastName'];

您尝试输出$_SESSION['firstName'],但$_SESSION['firstName']不存在。

你设置$_SESSION['username']=$username(我认为$ username只是电子邮件) 但是你没有设置$_SESSION['firstName']

获取loginrow并设置$_SESSION['firstName']=$fetchedRow['firstName'];

答案 2 :(得分:0)

您在会话变量中存储的是$ username,它等于用户发送给您的输入。您只定义$ _SESSION ['username'],保留firstName和lastName undefined。如果我理解您想要正确执行的操作,则必须从数据库查询中获取结果并将其存储在这些变量上。

相关问题