我最近學會了如何使用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。
@ chris85不是mysqli_insert_id做到了嗎?糾正我,如果我錯了 - 它存儲最近添加的用戶的ID。我將最近的ID保存到會話中。如果我現在正在做的事情不起作用,我可能會爲該名稱進行會話。 –
是的,錯過了這個代碼在第一次閱讀時的結構。儘管如此,我仍然不確定。雖然這對SQL注入開放。 cookie中的任何內容都可以由用戶更改。 – chris85
db中插入的值是什麼,並且與您發佈的第一個代碼體中的值相比較,那麼對於另一個會話數組,值又是多少?爲兩者發佈var_dump,通過錯誤報告和可能的MySQL檢查錯誤。 –