使用电子邮件登录后,我一直在努力获取用户名。登录后,我可以设法获取电子邮件的名称而不是用户名。
查看下面的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
作为电子邮件,它可以工作,但我想显示用户的名字。任何的想法?
答案 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。如果我理解您想要正确执行的操作,则必须从数据库查询中获取结果并将其存储在这些变量上。