2013-07-24 3 views
-1

Я изучаю PHP, и я создал простой скрипт для входа, но проблема в том, что он перенаправляет меня только на пустую страницу. Он предназначен для перенаправления на index.php, если учетные данные пользователя верны, но это, по-видимому, не так? Существуют также проверки, так что если пользователь вводит пустой, возвращается ошибка. Это, похоже, не было выполнено.Простой логин, возвращающий пустую страницу

login.php

<form id="login-form" method="post" action="logininc.php"> <fieldset> 
    <legend>Login </legend> 
    <p>Please enter your username and password to access the administrator's panel</p> 

    <label for="user"> <input type="text" name="user" placeholder="Type your username here" id="user" /></label> 
    <label for="password"> <input type="password" name="password" placeholder="Type your password here" id="password" /></label> 
    <label for="submit"> <input type="submit" class="btn btn-primary"name="submit" id="submit" value="Login" /> </label> </fieldset> </form> 

logininc.php // моя страница обработки

<?php 

require_once("assets/configs/db_config.php"); 
$user=$_POST['user']; 
$password=$_POST['password']; 

if(isset($_POST['login'])) 
{ 
//To ensure that none of the fields are blank when submitting the form if 
if($user || $password != NULL) 
    { 
     $user = stripslashes($user); 
     $password = stripslashes($password); 
     $user = mysqli_real_escape_string($user); 
     $password = mysqli_real_escape_string($password); 

     $sql="SELECT * FROM $test_db WHERE user='$user' and password='$password'"; 
     $result=mysqli_query($sql); 

     $row=mysql_fetch_array($result); 

     if($row['user'] == $user && $row['password'] == $password) 
     { 
      session_start(); 
      $_SESSION['user'] = $user; 
      $_SESSION['password'] = $password; 
      $_SESSION['loggedin'] = "true"; 
      header("location:index.php"); 
     } 
     else 
     { 
      print ('<div id="error">Computer says no.</div>'); 

     } 
      print ('<div id="error">Enter something!</div>'); 

} 
} 



    ?> 

index.php // успех страница

<?php //module to check logins 
session_start(); 

if(!isset($_SESSION["loggedIn"])){ 
    header("Location: login.php"); 
    exit; 
} 
Echo 'Congratulations <b>'.$_SESSION['user'].'</b> you successfully logged in!!<br /> 
     Your Password is: <b>'.$_SESSION['password'].'</b><br /> 
     <a href="login.php">Logout</a>'; 
?> 
+1

Правильные ответы уже были даны, но хотели прокомментировать ваш чек. Ваш условный - если $ user || $ password! = NULL. Это эквивалентно высказыванию, если $ user возвращает true ИЛИ, если пароль $ не равен NULL. Таким образом, он не проверяет, заполнены ли как $ user, так и пароль $. Вам нужно два отдельных условия, связанных с &&. (&& = оба должны возвращать true, || либо либо один из них должен возвращать true) Так что это должно быть ($ user! = NULL && $ password! = NULL) – vanamerongen

+2

U не должен хранить пароли как открытый текст. Никогда .. – DarkBee

+3

Отличный код для [SQL injection] (http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php). – jor

ответ

1

Что происходит, когда вы меняете if(isset($_POST['login'])) к if(isset($_POST['submit']))?

0

Проблема заключается в том if(isset($_POST['login']))

Вы никогда не устанавливали запись «login» в своей форме.

Вы можете сделать:

if(isset($_POSt["user"]) && isset($_POST["password"])) { 
$user=$_POST['user']; 
$password=$_POST['password']; 
//To ensure that none of the fields are blank when submitting the form if 
if($user && $password) { 
2

$row = mysql_fetch_array должен быть $row = mysqli_fetch_array

и как другие уже упоминалось, использовать

if(isset($_POST['user']) && isset($_POST['password'])) { 


// your code here 


} 

и BTW: с помощью сеанса, где вы только сказать "LoggedIn = истина" или "Логин = да" и т.д. ничего, кроме безопасного

EDIT (обсуждение безопасности):

пароли всегда должны быть сохранены в зашифрованном виде (Регистрация на):

function login($email, $password) { 
    $email = mysql_real_escape_string($email); 
    $q = "SELECT id, email, password, salt FROM members WHERE email='" . $email . "'"; 
    $result = mysql_query($q, $this->connection); 
     $output = mysql_fetch_assoc($result); 
     $user_id = $output['id']; 
     $database_username = $output['username']; 
     $database_email = $output['email']; 
     $database_password = $output['password']; 


     $password = hash('sha512', $password); 

      if($database_password == $password) { 
       $user_browser = $_SERVER['HTTP_USER_AGENT']; 
       $user_id = preg_replace("/[^0-9]+/", "", $user_id); 
       $_SESSION['user_id'] = $user_id; 
       $_SESSION['username'] = $email; 
       $login_hash = hash('sha512', $password.$user_browser); 
       $_SESSION['login_hash'] = $login_hash; 
     } else { 
      return false; 
     } 
} // function 

function login_check() { 
    $user_id = $_SESSION["user_id"]; 
    $login_hash = $_SESSION["login_hash"]; 
    $email = $_SESSION["username"]; 
    $user_browser = $_SERVER['HTTP_USER_AGENT']; 

    $q = "SELECT password FROM members WHERE id ='" . $user_id . "'"; 
    $result = mysql_query($q, $this->connection); 
    $output = mysql_fetch_assoc($result); 
    $database_password = $output['password']; 

    if(mysql_num_rows($result) == 1) { 

     $login_check = hash('sha512', $database_password.$user_browser); 
     if($login_check == $login_hash) { 
       return true; 
      } else { 
       return false; 
     } 
    } else { 
     return false; 
    } 
} 

Кроме того, вы можете создать случайную соль (регистрация) для каждого пользователя, чтобы установить уровень безопасности даже немного выше (Примечание: хэш (хэш (хэш (...))) фордуны ваш уровень безопасности, так как вы теряете информацию во время процесса хеширования)

ПРИМЕЧАНИЕ. Это всего лишь (рабочий) пример скрипта login/-check с высоким уровнем безопасности. Тем не менее этот скрипт можно улучшить (bruteforce, mysqli/подготовленные заявления, хеширование паролей непосредственно в формах, безопасный сеанс, ...)

+0

Не могли бы вы быть в безопасности на сессии, не будучи в безопасности? – DarkBee

+0

Кто-то может войти на ваш сайт с помощью сеансовой манипуляции или захвата сеанса, так как информация на вашем сеансе, которая проверена, только говорит «true», она не привязывается ни к какому пользователю вообще. – dabe

+0

Я соглашаюсь на захват сеанса, но как следует манипулировать объектом сеанса, который хранится на сервере (по умолчанию)? – DarkBee

0

Прежде всего, имя вашей кнопки отправки «отправить». И вы проверяете, является ли «логин» сообщением или нет.

if(isset($_POST['login'])) 
{ 

это должно было быть:

if(isset($_POST['submit'])) 
{ 

Вы писали:

if($user || $password != NULL) 
{ 

это должно было быть:

if($user != NULL || $password != NULL) 
{ 

Вы использовали MySQLi и MySQL команда, которая не является хорошей практикой

$result=mysqli_query($sql); 

    $row=mysql_fetch_array($result); 

Вместо

if($row['user'] == $user && $row['password'] == $password) 
    { 
//this code again check for condition which is already checked in the sql statement 

лучше практика, чтобы написать:

if($row->num_rows==1) 
    { 

в index.php вы написали

if(!isset($_SESSION["loggedIn"])){ 

это должно было быть

if(!isset($_SESSION["loggedin"])){ 

поскольку вы сохранили индекс нижнего регистра при хранении в сеансе.