2016-11-27 5 views
0

Я пытаюсь получить идентификатор пользователя зарегистрированного пользователя и сохранить его в сеансе, так что когда пользователь отправляет что-то, я могу добавить свой идентификатор пользователя к представлению на база данных. У меня очень грубая страница входа, пожалуйста, будьте добры, поскольку я очень новичок в этом! Я пробовал много разных комбинаций вещей, но, исходя из ответов, которые я видел в Интернете, то, что у меня сейчас, должно быть довольно близко. Если кто-то может дать мне какие-либо указания, это будет большой помощью. Спасибо!Не удается сохранить идентификатор пользователя в сеансе

Войти страница

<?php 

session_start(); 

//Connection and select database go in here 

// username and password sent from form 
$myusername=$_POST['Email']; 
$mypassword=$_POST['User_Password']; 

// To protect MySQL injection 
$myusername = stripslashes($myusername); 
$mypassword = stripslashes($mypassword); 
$myusername = mysql_real_escape_string($myusername); 
$mypassword = mysql_real_escape_string($mypassword); 

$sql="SELECT User_ID, Email, User_Password FROM $tbl_name WHERE Email='$myusername' and User_Password='$mypassword'"; 
$result=mysql_query($sql); 

// Mysql_num_row counts table row 
$count=mysql_num_rows($result); 

// If result matched $myusername and $mypassword, table row must be 1 row 
if($count==1){ 

// is_auth to make sure they can view other pages that need credentials. 
$_SESSION['is_auth'] = true; 
$_SESSION['User_ID'] = $result->User_ID; 

// Once the sessions variables have been set, redirect them to the landing page/home page. 
header('location: ../View/main.php'); 
exit; 
} 

else { 
$error = "Please enter an email and password to login."; 
} 
header("location:../View/mainUnauthenticated.php"); 

страница, которая проверяет, является ли проверка подлинности пользователя. Я называю это в начале каждой соответствующей страницы

<?php 

    session_start(); 
echo $_SESSION['User_ID']; 

// Test the session to see if is_auth flag was set (meaning they logged in successfully) 

// If test fails, send the user to homepage and prevent rest of page being shown. 

if (!isset($_SESSION["is_auth"])) { 
header("location: ../View/mainUnauthenticated.php"); 
exit; 
    } 
else if (isset($_REQUEST['logout']) && $_REQUEST['logout'] == "true") { 
// At any time we can logout by sending a "logout" value which will unset the "is_auth" flag. 
// We can also destroy the session if so desired. 
unset($_SESSION['is_auth']); 
session_destroy(); 
// After logout, send them back to homepage 
header("location: ../View/mainUnauthenticated.php"); 
exit; 
} 
?> 

Это отрывок из одной из страниц, где я хотел бы быть в состоянии захватить идентификатор пользователя, который я (думал, что я был!), Хранящимся. Пока я просто пытаюсь отобразить его в текстовом поле, чтобы показать, что он работает.

<?php include('../Controller/is_auth.php') 

?> 


<p> 
<input type="text" name="User_ID" id="User_ID" value="<?php echo $_SESSION['User_ID'];?>"/> 
</p> 
+1

Не используйте mysql 'mysqli' или' PDO', вы также открыты для 'mysql injection'. – Nytrix

+0

Думаю, теперь у меня есть работа. Проблема заключалась в позиции начала сеанса, я поставил ее наверху моей страницы входа, но переместил ее после запроса sql, и он работает! Спасибо за помощь и комментарии Нитрикс и Филип Мачек. –

ответ

0

Прежде всего, я рекомендую вам использовать PDO вместо старого mysql_query. Я безопаснее до SQL injection.

К ошибке: будет полезно создать простую функцию «отладки», чтобы увидеть выходные данные из переменных. Например, в вашем скрипте входа вы используете var $ result-> User_ID. Вы уверены, что переменная существует? Вот моя простая функция отладки вы можете использовать:

function debug ($var, $name = "Debug") { 
    echo "<h2>$name</h2><pre>"; 
    var_dump($var); 
    echo "</pre>"; 
} 

С помощью этой функции вы можете просто проверить, если вы получите то, что вы кроме и нашли проблему. Просто позвоните

debug($result, "Database output");//or without 2nd parameter 

PS: создайте несколько functions.php, которые вы будете включать в каждый код. Когда вы меняете какую-то функцию, вам не нужно переписывать каждый файл.