2013-08-01 3 views
0

사이트에 로그인하려고합니다. 등록 양식을 텍스트 파일에 저장 한 다음 login.php 페이지에서 PHP 코드를 사용하여 파일을 열고 각 행을 폭발시킨 다음 입력 한 사용자를 확인합니다. 로그인 할 때 이메일과 비밀번호가 일치해야합니다. 내 문제 나는 그것이 맞지만 "정의되지 않은 색인 : 이메일"이라고 쓰여진 다음 사용자 이름이나 비밀번호가 틀렸다는 표시로 끝나는 것입니까? 문제를 해결하기 위해 변수를 선언하거나 사용하는 것이 필요합니까? 아니면 코드에 문제가 있습니까?양식에 로그인 할 수 없습니까?

Login.php :

<?php 
if (isset($_POST['submitBtn'])){ 
$file = explode("PHP_EOL", file_get_contents("users.txt")); 

foreach($file as $line) { 
list($fname, $lname, $email, $userpass) = explode("||", $line); 

if($_POST['email'] == $email && $_POST['userpass'] == $userpass) { 
// User authenticated correctly 
echo "You've successfully logged in!"; 
echo "<br>"; 
echo '<a href="home.php">Member\'s Only Site!</a>'; 
} else { 
// User did not authenticate 
echo "Invalid Username or Password"; 
} 
} 
} 
?> 

Regform.php

else { 
    $userpass = md5($pass1); 
    $fp = fopen("Text_Database\users.txt", "a"); 
    $savestring = $fname . "||" . $lname . "||" . $email . "||" . $userpass . "||" .PHP_EOL; 
    fwrite($fp, $savestring); 
    fclose($fp); 
    echo 'You have successfully registered!'; 
    } 
    } 
?> 

로그인 양식 :

<form action="" method="post" name="loginform"> 
    <table width="100%"> 
     <tr><td>Username:</td><td> <input class="text" name="username" type="text" /></td></tr> 
     <tr><td>Password:</td><td> <input class="text" name="password" type="password" /></td></tr> 
     <tr><td colspan="2" align="center"><input class="text" type="submit" name="submitBtn" value="Login" /></td></tr> 
    </table> 
    </form> 
+0

[READ 및 디버그] (http://stackoverflow.com/questions/12769982/reference-what-does-this-error-mean-in-php) 오류 메시지를 알아야합니다. 문제를 해결하는 데 필요한 모든 것이 오류 메시지에있었습니다. $ _POST [ 'email']이 (가) 설정되지 않았습니다 – Anigel

+2

양식 입력란이 제대로 작성되지 않은 것으로 의심됩니다. 로그인 양식 마크 – Dale

답변

3

당신은 사용자 이름과 암호

<tr><td>Username:</td><td> <input class="text" name="username" type="text" /></td></tr> 
    <tr><td>Password:</td><td> <input class="text" name="password" type="password" /></td></tr> 
을 보내는 0

하지만 이메일을 확인하는

$_POST['email'] 

의 이름이됩니다 당신이 입력의 이름으로 설정 한 것을

if($_POST['username'] == $email && $_POST['password'] == $userpass) { 

if($_POST['email'] == $email && $_POST['userpass'] == $userpass) { 

을 변경해보십시오 POST 변수. 양식이 Login.php에 emailuserpass 필드를 보내지 않습니다처럼

name="username" will be $_POST['username'] 
+0

+1을 입력하여 정답을 입력하십시오. 또한 if 조건에'isset ($ _ POST [ 'username'])'을 추가하도록 추가합니다. –

+0

실제로 그들은 또한 그들이 사용하는 모든 변수에 대해 동일한 작업을 수행해야합니다. – Anigel

+0

if 검사 전에 $ email, $ userpass를 반향하고 사용자가 생각하는 내용이 포함되어 있는지 확인하십시오. – Anigel

0

는 것 같습니다. 적어도 그 이름은 아닐 것입니다. emailuserpass 키가 (당신이 submitBtn와 함께했던 것처럼)를 평가하기 전에 설정되어있는 경우, 당신은 확인해야합니다,

<form method="post" action="Login.php"> 
    <input type="text" name="email" /> 
    <input type="password" name="userpass" /> 

    <input type="submit" name="submitBtn" value="Submit" /> 
</form> 

을 또한 :

가 올바르게과 같이 당신의 <input> 태그의 이름을 지정해야합니다 .

if (isset($_POST['email']) && isset($_POST['userpass'])) { 
    // ... 
} 

오, 그리고 마지막으로 한 가지. 암호를 암호화되지 않은 텍스트 파일에 저장하지 마십시오. bcrypt 또는 적어도 MD5 또는 SHA1과 같은 것을 사용하십시오.

+1

일 것입니다. 적어도 말하지만, 적어도 사용을 말하면 훨씬 좋을 것입니다. crypt()는 권장되지 않는 암호를 권장하기보다는 암호에 권장되는 해싱 방법입니다. - http://php.net/manual/en/faq.passwords.php – Anigel

관련 문제