2014-09-12 2 views
-3

그래서 내 PHP 로그인 시스템에 약간의 문제가 있습니다. 로그인하려고하면 데이터베이스에 저장되어 있지만 정의되지 않은 인덱스가 있지만 사용자 이름/비밀번호를 잘못 말합니다. 로그인 페이지PHP 로그인 시스템

<?php include("header.php"); ?> 
<?php 
if(isset($_POST["user_login"]) && isset($_POST["password_login"])){ 
$user_login = preg_replace('#[^A-Za-z0-9]#i', '', $_POST["user_login"]); 
$password_login = preg_replace('#[^A-Za-z0-9]#i', '', $_POST["password_login"]); 
$password_login_md5 = md5($password_login); 
$sql = mysql_query("SELECT id FROM `users` WHERE username='$user_login'AND  password='$password_login_md5' LIMIT 1"); 

$userCount = mysql_num_rows($sql); 
if($userCount == 1){ 
while($row = mysql_fetch_array($sql)){ 
    $id = $row["id"]; 
} 
if (isset($_SESSION["user_login"]) && isset($_POST["user_login"])){ 
$_SESSION["user_login"] = $user_login; 
header("Location: home.php"); 
exit(); 
} 
}else{ 
echo '<div class="echo">Username/Password is incorrect</div>'; 
exit(); 
} 
} 
?> 

헤더 페이지

<?php 
mysql_connect("localhost","root") or die("Couldnt connect"); 
mysql_select_db("pageslip") or die("Couldnt slect db"); 
?> 
<?php 
session_start(); 
if(isset($_SESSION['user_login'])){ 
$user = $_SESSION["user_login"]; 
} 
else 
{ 
//header("Location: home.php"); 
} 
?> 

로그 아웃 페이지

<?php 
session_start(); 
session_destroy(); 
header("Location: index.php"); 
?> 

홈 페이지 I 현재 암호 해시에 대해 걱정하고 있지 않다

<?php 
include("header.php"); 
if(isset($_SESSION["user_login"]) && isset($_POST["user_login"])){ 
echo $_SESSION["user_login"]; 
} 
?> 

다만 아직 문제의 주제에 머물러 있고 직접적인 해결책을 얻는 것이 도움이 될 것입니다.

+0

session_start 이전에 공백을 출력 할 때 헤더가 작동하는 이유는 무엇입니까? 이것은 당신의 문제 일 수 있습니다 – Kostronor

+0

그래서'A-Za-z0-9' 만 암호로 허용합니다 ... 사용자가 보안 암호를 사용하더라도 암호를 줄이십시오 ... – Class

+0

정확히 어떻게 구성 할 수 있습니까? –

답변

2

참고 :: 저는 mysql_ 대신 mysqli_을 사용하고 있습니다 만, mysqli_는 응용 프로그램을 자동으로 보호하지 않습니다. 더 많은 것을 배울 필요가 있습니다.

첫 번째 파일의 이름을 지정하지 않았으므로 login.php이라고 가정하고 내 양식을 보여주지 않으므로 내 자신의 짧은 양식을 만들었습니다. 당신이 그것을 이해하기 위해서는 당신의 필요에 따라 그것을 바꿀 수 있습니다.

내가 만든 정렬 형태 코드가 를 들어 Login.php

을 시작 여기에서 지금 여기

<form action="login.php" method="POST"> 
<!--As i gave the file name login.php, if your file name is different you 
can change it.--> 
    Username:<input type="text" name="user_login"><br/> 
    Password:<input type="password" name="password_login"><br> 
    <input type="submit"> 
</form> 

이다 (당신은 파일 이름을 변경할 수 있습니다. 당신이 원하는대로)

<?php include("header.php"); ?> 
<?php 
if(isset($_POST["user_login"]) && isset($_POST["password_login"])){ 
$user_login = preg_replace('#[^A-Za-z0-9]#i', '', $_POST["user_login"]); 
$password_login = preg_replace('#[^A-Za-z0-9]#i', '', $_POST["password_login"]); 
//$password_login_md5 = md5($password_login); i removed this line as you say you 
//are not worry about the security, at this time. 
$sql = mysqli_query($con,"SELECT id FROM `users` WHERE username='$user_login'AND password='$password_login' LIMIT 1")or die(mysqli_error($con)); 

$userCount = mysqli_num_rows($sql); 
if($userCount == 1){ 
while($row = mysqli_fetch_array($sql)){ 
    $id = $row["id"]; 

    $_SESSION['user_login']=$_POST['user_login']; 
} 
if (isset($_SESSION["user_login"]) && isset($_POST["user_login"])){ 
$_SESSION["user_login"] = $user_login; 
header("Location: home.php"); 
exit(); 
} 
}else{ 
echo '<div class="echo">Username/Password is incorrect</div>'; 
exit(); 
} 
} 
?> 

** 이유 : ** 사용자 이름/비밀번호가 잘못되었음을 항상 나타내는이 메시지는 012입니다.코딩 방법은 쿼리가 어떤 것을 반환하지 않는다는 것을 의미하기 때문입니다. 양식에 잘못된 사용자 이름이나 비밀번호를 입력했기 때문이 아닙니다. 그게 당신이 제대로 쿼리를 실행하지 않은 것을 의미합니다.

** 헤더 페이지를 참조하십시오. **

<?php 
$con= mysqli_connect('localhost', 'root', '', 'pageslip') or die(mysqli_error($con)); 

?> 
<?php 
session_start(); 
if(isset($_SESSION['user_login'])){ 
$user = $_SESSION["user_login"]; 
} 
else 
{ 
//header("Location: home.php"); 
} 
?> 

로그 아웃 페이지를 참조하십시오.

<?php 
session_start(); 
session_destroy(); 
header("Location: index.php"); 
?> 

홈 페이지.

<?php 
include("header.php"); 
if(isset($_SESSION["user_login"])){ 
echo $_SESSION["user_login"]; 
} 

?> 

//**Note: ** I change this line 
//if(isset($_SESSION["user_login"]) && isset($_POST["user_login"])){ 
//to this if(isset($_SESSION["user_login"])){ 
//Means i removed this part && isset($_POST["user_login"]) 
//Reason i am explaining below 

이유 :: 홈 페이지 당신은 $ _POST, 변수, POST 요청에 액세스하지 못할 양식 조치가 = "loging.php는"당신이 그것을에 액세스 할 수없는 경우 등의 작업 페이지에서만 사용할 수 있습니다 다른 페이지.

당신이 세션을 시작했기 때문에 제 생각에 당신은 포스트 요청에 액세스 할 수 있다는 것을 의미합니다.이것은 세션 작동 방식이 아닙니다. 세션에서 값을 저장할 수 있으며 다른 페이지에서 액세스 할 수 있습니다. 게시물 요청은 아닙니다. 당신이 페이지를 떠난 후에 파괴된다는 것을 의미합니다. 귀하의 경우에는 홈 페이지로 사용자를 리디렉션하고 있으므로 $ _post에 아무것도 표시되지 않습니다. 그래서 내가 그것을 제거한 thats.

홈 페이지에서 두 가지 작업을 더 잘 수행하려면 먼저 을 사용하십시오. var_dump ($ _ session); 그리고 배열을 생성 할 결과를 확인하고 var_dump ($ _ post); 이렇게하면 array (0) {}와 같은 결과는 홈페이지의 $ _post에 아무것도 없다는 것을 의미합니다.

희망을 얻으십시오.

그리고 정의되지 않은 색인이 하나 더 있습니다.

큰 문제는 아닙니다. 나는 당신이 폼 섹션에서이 문제가 있다고 가정하고있다. 단순히 색인을 정의하지 않았 음을 의미합니다. 간단한이 같은 폼의 맨 위에 추가하십시오. $ _ 게시 [ 'user_login'] = "";

정의되지 않은 모든 색인 오류에 대해이 작업을 반복합니다.

+0

그것은 여전히 ​​동일한 errors.But을 가지고 다시 작동하지 않았어. –

+0

Nope @ Arif_suhail_123 –

+0

@BrendanOggeri 그것이 재미 있어야하는 동일한 코드를 사용하는 경우 그 웃긴다. 문제가 데이터베이스에있을 수 있습니다. 당신은 우리에게 당신의 데이터베이스 구조를 줄 수 있습니까? 감사합니다 –

0

세션을 설정하지 않았습니다. 너는 단지 그것을 읽었다. 이 때문에 if식이 false를 반환하고 오류 메시지가 표시됩니다.

+0

어떻게 해결할 수 있습니까? –

+0

if (! isset (sessionxyz) & & postxyz)! 이를 부정하고 로그인하지 않은 사용자에 대해서만 세션 변수를 설정합니다. 현재 코드에서 이미 로그인 한 사용자 만 로그인 할 수 있습니다. 분명히 작동하지 않습니다 ... – Kostronor

+0

헤더 또는 홈 페이지에 포함되어 있습니까? –