2014-11-09 3 views
1

Я пытался получить имя пользователя после входа в систему, используя электронную почту. Я сумел получить имя электронной почты, но не имя пользователя после того, как вошли вВойти, чтобы получить имя пользователя не по электронной почте

Посмотрите на код для 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. [email protected]"/> <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

где вы назначили '$ _SESSION ['firstName'];'? – itachi

+0

Это внизу ** loginAction.php **. @itachi – Anthosiast

+0

Я не вижу ни одной строки выше, где вы ее назначили. – itachi

ответ

3

В вашем loginAction.php, $_SESSION['firstName'] не назначен. То почему более поздно после перенаправления, его не установлено так пытаясь достигнуть его дало бы undefined ошибку индекса.

Это может быть лучше просто сохранить информации пользователя строку вместо этого, если вы хотите, чтобы позже получить доступ к нему:

$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 

} 

Sidenote: Кроме того, его много лучше использовать prepared statements в этом случае и использовать password hashing из PHP 5.5 вместо md5. Существует также compatibility pack для меньших версий (PHP < = 5.4)

+1

+1 очень хорошо объяснено –

+0

Да, это очень хорошо объяснено, я пытаюсь использовать этот ответ, но все же я его не понимаю. Ну, я собираюсь получить значения для 'firstName' и' lastName', где я должен добавить его? я должен просто поместить '$ _SESSION [firstName] = $ firstName' после' $ _SESSION ['user_info'] '? @Ghost – Anthosiast

+0

@Anthosiast, так как этот '$ user_info' будет хранить эти значения' registerPassword, emailAddress, firstName, lastName'. ну нет причин назначать их. его массив уже. получить доступ к этим значениям вместе с приведенным выше примером.'echo $ _SESSION ['user_info'] ['lastName']; // и другие' – Ghost

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 (я думаю, $ имя пользователя было только по электронной почте) , но вы не установите $_SESSION['firstName']

принести вам loginrow и установить $_SESSION['firstName']=$fetchedRow['firstName'];

+0

спасибо, ребята, я заработал, я ценю это! – Anthosiast

0

То, что вы сохраняете в переменной сеанса, - это $ username, которое равно вводимому пользователю пользователю. Вы определяете только $ _SESSION ['username'], оставляя firstName и lastName неопределенными. Если я понимаю, что вы хотите сделать правильно, вам нужно будет получить результат из запроса базы данных и сохранить его на этих переменных.

+1

Добро пожаловать в stackoverflow. вы можете улучшить качество своего ответа, добавив фрагменты кода (например, другие ответы). тогда это будет более полезно. – itachi

Смежные вопросы