2013-08-01 5 views
0

Я пытаюсь войти на сайт, я сделал регистрационную форму, которая сохраняет данные в текстовом файле, тогда у меня есть PHP-код на моей странице login.php, чтобы открыть файл, разбить каждую строку, а затем проверить введенный пользователь соответствующий адрес электронной почты и пароль при входе в систему. Моя проблема. Я получаю сообщение с сообщением «undefined index: email», после чего оно неверно указывает имя пользователя или пароль, даже если они верны. Должен ли я объявлять переменную или использовать isset как-то для решения проблемы или что-то не так с моим кодом?Не можете войти в форму?

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 and debug] (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> 

Но вы проверки электронной почты

$_POST['email'] 

Попробуйте изменить

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

в

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

что вы установили во имя входа будет имя из POST.

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

+1 для приблизительного правильного ответа. вы также добавляете, чтобы проверить, что 'isset ($ _ POST ['username'])' в условии if. –

+0

Действительно, они должны также делать то же самое для каждой переменной, которую они используют. – Anigel

+0

Echo out $ email, $ userpass перед проверкой if и посмотреть, содержат ли они то, что, по вашему мнению, они делают. – Anigel

0

Похоже, ваша форма не посылает email и userpass поля к login.php. Или, по крайней мере, не с этими именами.

Убедитесь, что вы правильно указать имена ваших <input> тегов так:

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

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

Кроме того, вы должны проверить, если ключи email и userpass устанавливаются перед оценкой их (как вы это делали с submitBtn) ,

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

О, и последнее. Не сохраняйте пароли в незашифрованном текстовом файле. Используйте что-то вроде bcrypt или, по крайней мере, MD5 или SHA1.

+1

Пока вы говорите хотя бы, пожалуйста, не рекомендуем md5, вам было бы гораздо лучше сказать, по крайней мере, использовать crypt(), который является рекомендуемым методом хэширования для паролей, а не предлагать те, которые не рекомендуются - http://php.net/manual/en/faq.passwords.php – Anigel

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