2016-08-01 50 views
1

我最近學會了如何使用PHP和MYSQL創建登錄系統。我決定爲我的網站製作一個。用戶用電子郵件,密碼,名字和姓氏報名。我想打個招呼說「我的問候」,然後是他們的名字。我可以在會話中保存名稱,但我想知道爲什麼我的方法不能完全工作。它在註冊後每次都有效。這是完整的註冊代碼:爲什麼數據庫在註冊後不返回關於用戶的數據?

$error = ""; 

include("loginsession.php"); 


    if(array_key_exists("id", $_SESSION)){ 

     header("Location: index.php"); 

    } 

if(array_key_exists("submit", $_POST)){ 

    include("connection.php");//database connection 



    $email = $_POST['email']; 

    $password = $_POST['password']; 

    $firstName = $_POST['firstname']; 

    $lastName = $_POST['lastname']; 

    $query = "SELECT * FROM users WHERE email='".mysqli_real_escape_string($link, $email)."'"; 

    $result = mysqli_query($link, $query); 

    if(mysqli_num_rows($result) > 0){ 

     $error = "<div class='alert alert-danger' role='alert'><strong>Error:<br><br></strong>This email already exists.<hr></div>"; 

    }else{ 

     $query = "INSERT INTO users(firstname, lastname, email, password) VALUES('".mysqli_real_escape_string($link, $firstName)."', '".mysqli_real_escape_string($link, $lastName)."', '".mysqli_real_escape_string($link, $email)."', '".mysqli_real_escape_string($link, $password)."')"; 

     mysqli_query($link, $query); 

     $query = "UPDATE users SET password = '".md5(md5(mysqli_insert_id($link)).$password)."' WHERE id=".mysqli_insert_id($link).""; 

     mysqli_query($link, $query); 


    $_SESSION['id'] = mysqli_insert_id($link);//where the issue originates 
    if(isset($_POST['check']) && $_POST['check']=='true'){ 

     setcookie("id", mysqli_insert_id($link), time() + 60*60*24*365); 

    } 
    header("Location: index.php"); 

    }   

} 

在索引頁,這是我做的:

session_start(); 
    if(array_key_exists('id', $_COOKIE)){ 

     $_SESSION['id'] = $_COOKIE['id']; 

    } 


    $greeting = ""; 

     if(array_key_exists('id', $_SESSION)){ 

      include("connection.php");//just the login to the database 

      $query = "SELECT * FROM users WHERE id = ".$_SESSION['id']; 

      $results = mysqli_query($link, $query); 

      $row = mysqli_fetch_array($results); 

     $greeting = "My greetings, ".$row['firstname']." ".$row['lastname'];//add name to greeting variable 

     } 

在後面的代碼:

<p id="greeting"> 
    <?php echo $greeting; ?> 
</p> 

正確的名稱後顯示出來登錄,但從未註冊後,即使我重新加載頁面。什麼顯示,而不是「我的問候,姓氏姓」是「我的問候」。這就像數據庫找不到該特定ID的名稱。

如何在註冊後獲得正確的結果。如果您需要註冊或登錄過程中的任何其他代碼,請告訴我,我會發布它。如果有人想爲自己嘗試這個,我的網站是here

+0

@ chris85不是mysqli_insert_id做到了嗎?糾正我,如果我錯了 - 它存儲最近添加的用戶的ID。我將最近的ID保存到會話中。如果我現在正在做的事情不起作用,我可能會爲該名稱進行會話。 –

+1

是的,錯過了這個代碼在第一次閱讀時的結構。儘管如此,我仍然不確定。雖然這對SQL注入開放。 cookie中的任何內容都可以由用戶更改。 – chris85

+0

db中插入的值是什麼,並且與您發佈的第一個代碼體中的值相比較,那麼對於另一個會話數組,值又是多少?爲兩者發佈var_dump,通過錯誤報告和可能的MySQL檢查錯誤。 –

回答

1

我沒有測試你的代碼,但我認爲這是因爲在註冊後會話還沒有開始。嘗試在第一個代碼的第一行添加session_start();

+1

好吧,我認爲問題是'mysqli_insert_id'返回的值。按照PHP手冊的狀態,_it返回最後一個query_中使用的自動生成的id。在數據庫中插入數據後,請檢查執行的其他查詢。 – someone

+1

請閱讀[this one](http://stackoverflow.com/questions/15332250/why-is-mysqli-insert-id-always-returning-0)。 – someone

+0

我發佈了完整的註冊碼。好像我設置id到會話之後,我在更新語句中散列用戶的密碼。我對第一個insert_id沒有問題,但第二個不起作用。 –