Не могли бы вы переформатировать этот код? Это действительно трудно понять с отступами и пробелами. Как только он вернется, я сделаю все возможное, чтобы помочь вам.
Один совет: входная очистка!
Эти функции избавили меня от многих проблем:
function forceInteger($variable) {
return preg_replace("/[^0-9]/", "", $variable);
}
function forceAlpha($variable) {
return preg_replace("/[^A-Za-z]/", "", $variable);
}
function forceAlphaNum($variable) {
return preg_replace("/[^A-Za-z0-9 \-\.]/", "", $variable);
}
function forceAlphaNumNoSpace($variable) {
return preg_replace("/[^A-Za-z0-9\-\.]/", "", $variable);
}
Я обнаружил, что для большинства коротких строк достаточно тире и точек. Если вы берете текстовую область, запустите ее:
function forceNaturalLanguage($variable) {
return preg_replace("/[^A-Za-z0-9 \-\.\?\!]/", "", $variable);
}
Вот мое предложение:
login.php (скрипт, который обрабатывает аутентификацию)
session_start();
if ($_POST["submit"]) {
// query database for email and password, where email is posted email
$sql = "SELECT * FROM `accounts` WHERE `email` = '{$_POST[email]'}";
$query = mysql_query($sql) or die ("Error: ".mysql_error());
if (mysql_num_rows($query) == 1) {
// there's one result - we got it!
$result = mysql_fetch_assoc($query);
if ($_POST["password"] == $result["password"]) {
// Successful auth.
// Set session vars and redirect with header()
$_SESSION["Authenticated"] = true;
$_SESSION["FirstName"] = $result["FirstName"];
$_SESSION["Email"] = $result["Email"];
header("Location: /home.php?event=login");
// Don't forget to exit(), otherwise some other code may run, causing unintended behaviours
}
else {
// Password didn't match.
exit("Incorrect password");
}
}
}
else {
// No email match
exit("Email not found.");
}
Пара очков:
1. в строках с двойными кавычками, чтобы поместить значение массива в запрос, вы должны заключить его в {фигурные скобки} следующим образом: "Привет, {$ _SESSION [" FirstName "]}";
2. Не EVER не устанавливайте переменные сеанса непосредственно из пользовательского ввода. Если вы берете его из базы данных, сохраните его оттуда. Это самый безопасный способ.
3. Установка ваших собственных файлов cookie для входа в систему бессмысленна при использовании PHP-сессий Если вы хотите изменить имя, попробуйте что-то вроде этого:
ini_set("session.name","coolSession");