помогите найти ошибку в скрипте авторизации

  • Автор темы Гавриил
  • Дата начала

Гавриил

Guest
помогите найти ошибку в скрипте авторизации

Господа опытные программисты! Возможно вам мой вопрос покажется ламерским, но тем не менее, возьму на себя смелость задать его...

вот фрагмент моего кода:
PHP:
<?php
$usernames = file("files\usernames_database.php"); // этот массив действительно существует, я проверял
$nArraySize = count($usernames); 

// если сюда вставить echo $_POST['user_name']; то на выходе будет логин

for ($index=0; $index < $nArraySize; $index++)
{ 
if (($_POST['user_name']) == usernames[$index]))

// а если сюда вставить echo $_POST['user_name']; то на выходе ничего не будет

	{
          $passwords = file("files\passwords_database.php");
           if (($_POST['user_pass']) == ($passwords[$index]))
	{echo "Добро пожаловать!";
           exit;
          }
    							
    	echo "Неверный пароль!;
    	exit;
	}
}
echo "Такой пользователь еще не зарегистрирован!";
exit;
Проблема заключается в том, что даже когда вводишь в форму правильные логин и пароль, все равно получаешь на выходе "Такой пользователь еще не зарегистрирован!". Видимо с циклом я где-то напутал..
 

DimbIch

Новичок
if (($_POST['user_name']) == usernames[$index]))

это не правильно

if (($_POST['user_name']) == $usernames[$index]))
вот так надо - опечатка наверное
 

Tor

Новичок
вместо
if (($_POST['user_name']) == usernames[$index]))

напиши для проверки

var_dump($_POST['user_name'],usernames[$index],($_POST['user_name'] == usernames[$index]));

з.ы. у тебя точно ДВА знака равно здесь?
 

DimbIch

Новичок
if (($_POST['user_name']) == usernames[$index]))

тут еще количество открытых скобок не соответствует количеству закрытых...
как не выдает ошибку не понимаю.....
 

Гавриил

Guest
сделал так, кк посоветовал Tor, в ответ получил

Parse error: syntax error, unexpected '[' in C:\Program Files\Apache Group\Apache\htdocs\localhost\authorize.php on line 27

ЗЫ: знаков равенства точно два
 

Tor

Новичок
в смысле так?
var_dump($_POST['user_name'],$usernames[$index],($_POST['user_name'] == $usernames[$index]));
 

Гавриил

Guest
для Tor: естественно... именно так, как написано в последнем сообщении

для DimbIch: это я здесь, на форуме опечатался.. в коде эта строка выглядит:
PHP:
 if (($_POST['user_name']) == $usernames[$index])
 

Tor

Новичок
Гавриил
хватит отсебятины

копировать в форум нужно ИМЕННО ТОТ КОД, КОТОРЫЙ НЕ РАБОТАЕТ

а не нести отсебятину, перенабирать руками и т.д.
ясно?
 

Гавриил

Guest
для Фанат:
за свое (весьма недолгое) изучение PHP, я все ошибки отлаживал сам, руководствуясь, кстати, именно этой инструкцией... и впервые я столкнулся с проблемой, которая мне не по зубам. А понял я это, пытаясь самомстоятельно отладить эту программу в течение нескольких часов. Я уже испробовал все доступные мне варианты.

И специально для этого я зарегился на этом форуме, чтобы посоветоваться с более опытными людьми которые, возможно мне помогут...

А что еще делать, когда сам уже никак не можешь решить проблему?? Попросить кого-нибудь о помощи... по моему это естесвенно...

-~{}~ 19.04.05 18:02:

для Krisha: не знаю... первое решение, которое мне пришло в голову, то и реализовал. а как лучше?

для Tor: это именно тот код, который не работает
 

Tor

Новичок
Гавриил

1) вырежи этот кусок кода в отдельный файл
2) вместо файлов руками набери массив из двух трех значений
3) разберись с синтаксическими ошибками
 

Aknichy

Новичок
на выходе "Такой пользователь еще не зарегистрирован!".
и прально - у тебя в любом случае выводиться будет эта строка. даже если пользователь существует. логику свою проверь.
вообще не понимаю - зачем тебе циклы устраивать? (in_array)
хотя если уж изврат, так по полной :)
 

Krisha

pain in the neck
Гавриил
Если уж ты хочешь хранить их в файле, то во-первых просто хранить их в одном файле в виде: username:userpassword, а во-вторых не хранить пароль в чистом виде, а хранить его хэш.

Дальше читаешь следующие разделы мануала:

[m]array[/m]
[m]fgetcsv[/m]
[m]md5[/m]
 

DimbIch

Новичок
Aknichy
проверь ты свою логику...
у него как раз высветить все что положено согласно логике
 

sakon

П..и.н..ок
Мм-да...
PHP:
if (($_POST['user_name']) == trim($usernames[$index]))
должно помочь. Если все, что ты написал правда...
 

CCCP_MOCKBA

Новичок
PHP:
<?php

$login = file('files\usernames_database.php');

foreach ($login as $value) {
  if ($_POST['user_name'] == $value) {
    $pass = file('files\passwords_database.php');
    foreach ($pass as $value) {
      if ($_POST['user_pass'] == $value) {
        exit ('Welcome!');
      } else {
        exit ('Access denied!');
      }
    }
  }
}
?>
вот так должно работать.
юзать нужно базу )
 

Фанат

oncle terrible
Команда форума
Эх молодёжь-молодёжь
всему вас учить надо.
циклы пишут, ошибки ищут.
скрипт проверки пароля пишется в одну строчку
PHP:
<?php
if (!strstr(file_get_contents('pass.txt'),$_POST['login'].":".$_POST['pass']."\n")) { 
  echo "Begone, unwanted!";
} else {
  echo "You're welcome!";
}
И ВСЁ.
надо всего лишь соблюдать формат записи:
логин:пароль
строка должна заканчиваться на "\n", а не на "\r\n"
ну, и ни в логине ни в пароле не должно быть двоеточия :)
 
Сверху