Идет проверка данных авторизации. Данные хранятся в текстовом файле. Логин записан на первой строке файла, пароль на второй. К тому же при регистрации логин дает еще и имя файлу. То есть, если пользователь регистрируется с логином "admin1" и паролем "12345", в каталоге создается файл admin1.txt, с содержимым (admin1\n12345). При авторизации, пользователь вводит данные в поле "Логин". Функция is_file - проверяет на наличае файла с именем $login.txt, если условие срабатывает, то в ход идет вторая функция - file, которая, разбивает данные файла на элементы массива и в случае если элемент массива(отвечающий за логин) равен логину, происходят дальнейшие действия. Так вот проверочка, почему-то не находит равенства в условии if ('текст введенный в поле логин' == 'элемент массива(отвечающий за логин)'). Почему так? понять не могу. Прилагаю код. Также в каталоге со скриптом, нужно создать текстовый файл, c логиным и паролем на каждой строке. Код (Text): <?php if (isset($_POST['send'])) { $login = $_POST['login']; $pass = $_POST['pass']; $provfaila = is_file ("$login.txt"); if ($provfaila == false) echo "Такого логина не существует"; if ($provfaila == true) { $provdannyh = file ("$login.txt"); } foreach ($provdannyh as $k=>$v) {} $provlogin = $provdannyh[0]; $provpass = $provdannyh[1]; echo "login ($login) == provlogin ($provlogin)<br />"; echo "pass ($pass) == provpass ($provpass)<br />"; if ($provlogin == $login) { echo "Go"; } else echo "No"; } ?>
PHP: foreach ($provdannyh as $k=>$v) { у тебя в каждой итерации цикла есть $k и $v, а используешься ты: PHP: $provlogin = $provdannyh[0]; $provpass = $provdannyh[1]; И вообще, покажи что у тебя храниться в $provdannyh PHP: var_dump($provdannyh); если я правильно понял, то цикл то и не нужен здесь совсем
не храните пароли пользователей в открытом виде, не храните пароли пользователей в открытом виде, не храните пароли пользователей в открытом виде, не храните пароли пользователей в открытом виде, не храните пароли пользователей в открытом виде, не храните пароли пользователей в открытом виде, не храните пароли пользователей в открытом виде, не храните пароли пользователей в открытом виде, не храните пароли пользователей в открытом виде,
это самый адекватный совет. по теме выше написали уже. но могу и по пунктам: 1. не храните пароли пользователей в открытом виде 2. Реализация хранения логинов и паролей в отдельном файле для каждого логина мягко говоря не оптимальная 3. admin1\n12345 - в файлике именно две строки? а то всякое может быть. 4. зачем создавать лишние переменные, когда прекрасно можно пользоваться элементами массива? 4. Если что то не работает то в первую очередь идет вывода а) массива, в случае сравнения переменных б) vardump() для каждой из сравниваемых переменных 5. foreach для массива из одного элемента, либо для массива из заранее известного количества переменных не требуется. 6. если остались вопросы то для дальнейшего обсуждения нужен хотя бы оригинальный файлик который формируется у автора темы. Штатные телепаты, к сожалению, как всегда в отпуске. Уважаемый модератор этот пост соответствует высоким стандартам форума или не достаточно подробно и адекватно?
@Amperandus что с тобой не так? Ты 10 раз написал "не храните пароли пользователей в открытом виде", но ни слова не сказал про то же хеширование паролей. Когда тебя попросили дать чуть более адекватный ответ ты вдруг перешел на линчевание говнокода с лишними переменными и форматом хранения данных. Ну от тебя-то ждали, что же делать НАДО, если ОДНОЗНАЧНО НЕ НАДО хранить пароли в открытом виде. Человек новый в программировании. Ну не знает он еще про базы данных и хранит пользователей в файликах. Он придёт ко всему со временем. Если ты взялся 10 раз написать "не храните пароли пользователей в открытом виде", то надо было сразу давать информацию по грамотным альтернативам. И да, второй ответ был такой же неадекватный как и первый. Концовочка подпортила.
ну ок. я стараюсь не давать полные ответы на очень простые вопросы. это вредит человеку который его задает. одно дело подробно ответить на вопрос, для решения которого надо неделю просидеть зарывшись в документацию и второе на что то такое: php как хранить пароли после прочтения n первых ссылок выдачи гугл у человека отпадет необходимость решать возникшую проблему в принципе. и в следующий раз он столкнется с функцией file() я так думаю очень и очень не скоро. Естественно если он вообще заглянет в этот самый гугл, после того как увидит сообщение, что не надо хранить пароли в открытом виде. Если не заглянет - то возможно вообще нет смысла что то объяснять дальше. Возможно я не прав, но за последнее время пришлось по работе общаться со значительным количеством выпускников "лучших вызов страны", которые не могут решить проблему, которая описывается в первой строке выдачи гугла (не будем обращать внимания на то, что этому их должны были 4 года учить). И да, со мной все просто прекрасно. Улыбайтесь, людей это раздражает.
Вы правы, цикл foreach, залез по ошибки. Он не выполняет ни каких функций и не нужен. Хватает: PHP: $provlogin = $provdannyh[0]; $provpass = $provdannyh[1]; $provdannyh - содержит в себе массив, содержащий в себе в свою очередь - содержимое файла. В данном случае в нулевом элементе массива сохранен логин, в первом пароль. Нет, это ошибка. Спасибо за еще один совет по данному вопросу. Но это я знаю. Сохранение данных пользователя в массив нужен лишь для набора опыта работы с файлами. Конечно в идеале буду хранить пароли пользователей в таблицах баз данных. Согласен, спасибо за поддержку. Но на счет файлов, мне самому не очень приятно работать с ними, но это дз, которое к счастью придется выполнить именно таким извращенным способом. Когда я прочитал задание, меня аж в дрожь бросило от возможности регистрации пользователей с сохранением пароля и логина в обычном текстовом файле, но чуть поковырявшись, картина начала налаживаться. Видимо не с проста дано данное задание.
сделай var_dump($provdannyh);, посмотри, что у тебя реально храниться в массиве. Потом можно будет двигаться дальше
Все разобрался. В условии с логином, было не соответствие, по той причине, что в файле слово admin, находящееся в первой строке было с пробелом - "admin " (о чем проинформировал var_dump), еще и состоящее из 7 символов. А пароль находящийся на второй строке состоит из пяти символов, без пробелов, что также проиллюстрировано var_dump(-ом). Потому в условие с паролем выводится true. Теперь осталось понять, как сохраняя значение переменной в файл, не допустить добавления пробелов. Ведь задание задано для практики работы с файлами и эту брешь нужно разобрать.
Отлично. Спасибо, заработало, за счет функции trim, очищающей строку от пробелов и остальных символов.