2014-12-08 6 views
-2

Я совершил ОГРОМНЫЙ грех и сделал некоторые программы для копирования и вставки. Знаю, знаю. BAD программист! К сожалению, я не очень хорошо разбираюсь в PHP и MySQL (хотя я зарегистрировался в нескольких классах Udemy, чтобы исправить это), и мне сразу нужна система входа в систему. Итак, я использовал tut found here. Теперь он отлично работает, но мне нужно, чтобы страница перенаправлялась на пользовательскую страницу при входе в систему, а не на одну статическую страницу, найденную в tut.Перенаправление на определенную страницу пользователя

Я добавил колонку в мою базу данных в конце страницы и заполнил ее полным URL-адресом, который я хочу для каждого пользователя, и попытался изменить код, чтобы получить значение столбца страницы вместе с несколькими другими решениями из моего небольшое знание PHP и вещей, которые я нашел в Интернете и на SO, но я не могу получить значение из столбца базы данных «страница» для перенаправления. Он просто показывает пустую страницу.

Вот код, который, кажется уместным:

<?php 
include_once 'db_connect.php'; 
include_once 'functions.php'; 

sec_session_start(); 

if (isset($_POST['email'], $_POST['p'])) { 
$email = $_POST['email']; 
$password = $_POST['p']; 

if (login($email, $password, $mysqli) == true) { 
    // Login success   
    header('Location: ../selection.php'); 
exit(); 

} else { 
    // Login failed 
    header('Location: ../error.php?error=1'); 
} 
} else { 
// The correct POST variables were not sent to this page. 
echo 'Invalid Request'; 
} 

и (я на самом деле не уверен, если это уместно, но я не хочу, чтобы кто-нибудь должен идти к учебнику, если я мог предотвратить его)

<?php 
include_once 'psl-config.php'; 

function sec_session_start() { 
$session_name = 'sec_session_id'; // Set a custom session name 
$secure = SECURE; 
// This stops JavaScript being able to access the session id. 
$httponly = true; 
// Forces sessions to only use cookies. 
if (ini_set('session.use_only_cookies', 1) === FALSE) { 
    header("Location: ../error.php?err=Could not initiate a safe session (ini_set)"); 
    exit(); 
} 
// Gets current cookies params. 
$cookieParams = session_get_cookie_params(); 
session_set_cookie_params($cookieParams["lifetime"], 
    $cookieParams["path"], 
    $cookieParams["domain"], 
    $secure, 
    $httponly); 
// Sets the session name to the one set above. 
session_name($session_name); 
session_start();   // Start the PHP session 
session_regenerate_id(); // regenerated the session, delete the old one. 
} 

function login($email, $password, $mysqli) { 
// Using prepared statements means that SQL injection is not possible. 
if ($stmt = $mysqli->prepare("SELECT id, username, password, salt 
    FROM members 
    WHERE email = ? 
    LIMIT 1")) { 
    $stmt->bind_param('s', $email); // Bind "$email" to parameter. 
    $stmt->execute(); // Execute the prepared query. 
    $stmt->store_result(); 

    // get variables from result. 
    $stmt->bind_result($user_id, $username, $db_password, $salt); 
    $stmt->fetch(); 

    // hash the password with the unique salt. 
    $password = hash('sha512', $password . $salt); 
    if ($stmt->num_rows == 1) { 
     // If the user exists we check if the account is locked 
     // from too many login attempts 

     if (checkbrute($user_id, $mysqli) == true) { 
      // Account is locked 
      // Send an email to user saying their account is locked 
      return false; 
     } else { 
      // Check if the password in the database matches 
      // the password the user submitted. 
      if ($db_password == $password) { 
       // Password is correct! 
       // Get the user-agent string of the user. 
       $user_browser = $_SERVER['HTTP_USER_AGENT']; 
       // XSS protection as we might print this value 
       $user_id = preg_replace("/[^0-9]+/", "", $user_id); 
       $_SESSION['user_id'] = $user_id; 
       // XSS protection as we might print this value 
       $username = preg_replace("/[^a-zA-Z0-9_\-]+/", 
                  "", 
                  $username); 
       $_SESSION['username'] = $username; 
       $_SESSION['login_string'] = hash('sha512', 
          $password . $user_browser); 
       // Login successful. 
       return true; 
      } else { 
       // Password is not correct 
       // We record this attempt in the database 
       $now = time(); 
       $mysqli->query("INSERT INTO login_attempts(user_id, time) 
           VALUES ('$user_id', '$now')"); 
       return false; 
      } 
     } 
    } else { 
     // No user exists. 
     return false; 
    } 
} 
} 

function checkbrute($user_id, $mysqli) { 
// Get timestamp of current time 
$now = time(); 

// All login attempts are counted from the past 2 hours. 
$valid_attempts = $now - (2 * 60 * 60); 

if ($stmt = $mysqli->prepare("SELECT time 
         FROM login_attempts 
         WHERE user_id = ? 
         AND time > '$valid_attempts'")) { 
    $stmt->bind_param('i', $user_id); 

    // Execute the prepared query. 
    $stmt->execute(); 
    $stmt->store_result(); 

    // If there have been more than 5 failed logins 
    if ($stmt->num_rows > 5) { 
     return true; 
    } else { 
     return false; 
    } 
} 
} 

function login_check($mysqli) { 
// Check if all session variables are set 
if (isset($_SESSION['user_id'], 
        $_SESSION['username'], 
        $_SESSION['login_string'])) { 

    $user_id = $_SESSION['user_id']; 
    $login_string = $_SESSION['login_string']; 
    $username = $_SESSION['username']; 

    // Get the user-agent string of the user. 
    $user_browser = $_SERVER['HTTP_USER_AGENT']; 

    if ($stmt = $mysqli->prepare("SELECT password 
            FROM members 
            WHERE id = ? LIMIT 1")) { 
     // Bind "$user_id" to parameter. 
     $stmt->bind_param('i', $user_id); 
     $stmt->execute(); // Execute the prepared query. 
     $stmt->store_result(); 

     if ($stmt->num_rows == 1) { 
      // If the user exists get variables from result. 
      $stmt->bind_result($password); 
      $stmt->fetch(); 
      $login_check = hash('sha512', $password . $user_browser); 

      if ($login_check == $login_string) { 
       // Logged In!!!! 
       return true; 
      } else { 
       // Not logged in 
       return false; 
      } 
     } else { 
      // Not logged in 
      return false; 
     } 
    } else { 
     // Not logged in 
     return false; 
    } 
} else { 
    // Not logged in 
    return false; 
} 
} 

function esc_url($url) { 

if ('' == $url) { 
    return $url; 
} 

$url = preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%@$\|*\'()\\x80-\\xff]|i', '', $url); 

$strip = array('%0d', '%0a', '%0D', '%0A'); 
$url = (string) $url; 

$count = 1; 
while ($count) { 
    $url = str_replace($strip, '', $url, $count); 
} 

$url = str_replace(';//', '://', $url); 

$url = htmlentities($url); 

$url = str_replace('&amp;', '&#038;', $url); 
$url = str_replace("'", '&#039;', $url); 

if ($url[0] !== '/') { 
    // We're only interested in relative links from $_SERVER['PHP_SELF'] 
    return ''; 
} else { 
    return $url; 
} 
} 

Я посмотрел на документы PHP.net, и попробовал несколько решений, которые я нашел в Интернете, но я ничего не нашел, кажется, работает. Мне нужно создать функцию для этого? Я знаю, что мне нужны более глубокие знания PHP и MySQL.

Дайте мне знать, если вам нужна дополнительная информация об этом.

Спасибо!

+0

где находится эта страница, где вы пытаетесь получить страницу из БД ...? – webeno

+1

Пустая страница обычно означает проблему с кодом, информация о котором записана в журнале ошибок сервера. Начните там. –

+0

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

ответ

1

Измените login функцию, чтобы также получить страницу-столбец (SELECT id, ..., page FROM ...)

Далее измените bind_result: добавить параметр после $salt: ..., $salt, $page

Изменение return true к return $page;

Теперь назад в вашем скрипте, который вызывает функцию login, изменить

if (login($email, $password, $mysqli) == true) { 
    // Login success   
    header('Location: ../selection.php'); 

в

$page = login($email, $password, $mysqli); 
if ($page !== false) { 
    // Login success   
    header('Location: '. $page); 

Убедитесь, что ваша страница-столбец содержит действительные значения во все времена, хотя.

+0

ОК, я внес изменения и все еще получил пустую страницу. Может быть, столбец страницы содержит недопустимые значения? У меня есть http: //www.mysite/selection.php и http: //www.mysite/admin.php для значений в этом столбце. –

+1

ОК, можете ли вы добавить 'error_reporting (E_ALL);' в начало вашего скрипта? – jabbink

+0

Примечание: Неопределенная переменная: страница в/home/mysite/public_html/includes/process_login.php on line 14 Предупреждение: невозможно изменить информацию заголовка - уже отправленные заголовки (вывод запущен в /home/mysite/public_html/includes/process_login.php:14) в /home/mysite/public_html/includes/process_login.php on строка 14 –

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