Добрый день. Я только начал изучать PHP и возникли некоторые трудности. Я создал функцию , которая с двух полей textbox берет эти данные, слепливает их в одну строку , записывает в текстовый файл и так каждый раз с новой строки. Но, при создании данной функции возникли проблемы : PHP: <?php $name=$_POST['name']; $pass=$_POST['pass']; $ud=$name.$pass; $f=file('1.txt', 'rt'); if (in_array($ud, $f)) { echo 'yes'; } else { echo "no"; } fclose('1.txt'); ?> Здесь я хотел, чтобы брать из других двух полей textbox, склеивать их воедино (переменная $ud) и пробежавшись по строкам файла, при точном совпадении $ud с элементом внутри выдавало "yes" , а если элемент не совпал точно - "no". Подскажите, что я не так сделал.
file() - открывает текстовый файл для чтения и делает из него массив fclose - закрывает файл При этой функции у меня постоянно "no" выпадает
file — Читает содержимое файла и помещает его в массив Это fopen - открывает. Попутал --- Добавлено --- Ну так моим способом можно как-то найти совпадения в файле ? Или может еще через file_get_contents() ?
У тебя логика правильная. Прочитал файл построчно в массив, поискал свою строку в этом массиве. Проблема в том, что в файле существуют переводы строк. И при чтении в массив - каждый элемент будет строкой с последовательностью перевода строки. И ты потом попытаешься искать строку без перевода среди строк с переводом. И естественно обломаешься. Почитай внимательнее мануал, как избавиться от перевода строк. Ты на верном пути. А fclose() тебе и не нужен, раз ты не открываешь файловый дескриптор.
Спасибо большое за помощь. Доделал , с удалением пробелов и переносов, но в любом случаи вывод "no". PHP: $f=file('1.txt', 'r'); $os=str_replace(array("\n","\r"), '', $f); if (in_array($ud, $os)) { echo 'yes'; } else { echo "no"; }
Эм... Ты всё же сходи в манаул, почитай, а? Что это за флаг 'r' у функции file()? Зачем этот вызов str_replace()? Если в следующем сообщении не опубликуешь готовый код - загноблю
Загнобишь не загнобишь , а я напишу, учиться-то все ровно хочеться ) Вот такой код получился , но в этот раз пустоту выдало. PHP: $f=file("1.txt"); $dn=trim( $f [ "\n" ] ); if (in_array($ud, $dn)) { echo 'yes'; } else { echo "no"; }
Ну ты пишешь чушь. Тебе говорят: сходи мануал почитай. А ты снова пишешь другую чушь. https://secure.php.net/manual/ru/function.file.php
И нахер ты вот этот высер сюда публикуешь? Что делает этот код? Давай построчно прочитаем результат работы твоей прямой извилины. 1. читаем файл в массив, сохраняем в переменной эф. 2. к индексу с именем "перевод строки" массива хранящегося в массиве в переменной эф применяем функцию обрезки пробельных символов. результат записываем в переменную диэн. нет такого индекса на входе. не будет такой строки на выходе. а дальше ты ищешь строку в массиве. но у тебя в переменной диэн не массив а строка. я тебя пару раз отправил в мануал почитать про функции которые ты сам же использовал. почему ты так и не заметил про тот флаг, про который тебе @mkramer написал? флаги выделены жирным в тексте. если текст читать. а ты стало быть текст не читал. наверное даже вообще мануал не открывал. и чего ты хочешь добиться при таком объеме "усилий"? белый экран - самое правильно наказание тебе. нифига не сделал и получил нифига. лузер по жизни. сойдет?
Ну вот если такие умные, то напиши как на самом деле код должен выглядеть, это три строчки. Я хоть увижу что все-таки не так !
Да мы-то умные. Тебе что мешает зайти в мануал и прочитать один раз? Уже пяток раз тебе сказали. Почему ты ни разу не сделал? Сейчас на полном серьезе стану тебя аутистом считать. Что это такое-то? В новичках у нас тут люди читают мануал и пишут код. Не умеешь срать - не мучай жопу. Разместись в "за меня" если бомж или "фрилансе" если готов рублём оплатить эти три строчки. Пока ты всё ближе и ближе к разделу "блондинок". Давай еще разок. Есть функция file. У нее есть аргументы. Читай. Делай.
@АлексейКоваль если читаешь документацию и в ней что-то не понятное, то можешь тут спросить, любую мелочь. Если нужен готовый код, можно тему перенести в раздел "сделайте за меня", но так ты ничего не научишься, если это цель.
PHP: <?php $name=$_POST['name']; $pass=$_POST['pass']; $ud=$name.$pass; $lines = file("1.txt", FILE_IGNORE_NEW_LINES); if ( in_array($ud, $lines) ) { echo 'yes'; } else { echo "no"; } возможны ошибки
@АлексейКоваль А я бы подругому сделал например PHP: $name = $_POST['name']; $pass = $_POST['pass']; $ud = $name.$pass; $text = file_get_contents('1.txt'); // Необходимо указать полный путь к файлу $pos = strpos($ud, $text); // Заметьте, что используется ===. Использование == не даст верного // результата, так как $text находится в нулевой позиции. if ($pos === false) { echo "NO'"; } else { echo "YES"; } //или ещё пример $text = 'Привет я псих'; $ud = 'При'; if (preg_match('/'.$ud.'/', $text)) { echo "YES"; } else { echo "NO"; }
@pinokio да, ты псих. Ты упустил одну маленькую деталь. Но это упущение тут же указало какой ты специалист. Нулевой.
@Ganzal не кичись, то что умнее, к твоей карме от этого не прибавится, лучше скажи в чём ошибся я на коленке быстро написал. Какую деталь я не учёл, то что там может быть не одно вхождение? Ну так я подозреваю у него это форма логина и пароля, и двойных вхождений и не должно быть, то есть он должен хранить там только уникальные записи, если я прованговал правильно то сделал бы именно так. Если искать несколько вхождений то у Php даже функция такая магическая есть для этого. Чувак там борется с массивами, а у него задача искать в файлике логин и пароль ну сто пудово и сказать если он там или нет. Я уж не хотел его огорчать и писать ему, чтобы он взял и шёл читать что такое бд (mysql) и pdo или mysqli пусть вон балуется с файликами на балуется мож пойдёт к бд, зато лучше будет понимать как она работает... Но наверно я бы вообще в принципе подругому сделал я бы всё ещё при записи в файл бы делил вот так имя и пароль 'login : password;' и так бы записывал. После считал бы всё это в строку. так же. А потом разделил эту строку explode по ; И там бы каждую итерацию ещё на explode по : Ну а уже тут бы сверял всё это дело, с тем что у меня поступило из инпутов без всякого клея вот этого точкой. Мне кажется так я сделаю точно без промахов. И можно даже ещё подумать о защите какой нибудь... Но это всё бред есть БД Та же файловая система, только уже со всем умным и подготовленным.... Но чё пусть занимается ему полезно.
@pinokio ну вот, теперь ты подтвердил утверждение о твоей некомпетенции. Давай еще разок. Перечитай свой код. Активно подумай головой. Ты ж в неё не только ешь, верно? Что не так с кодом?
@Ganzal какую деталь я там упустил, покажи мне я в свою голову только ем и я жираф долго доходит, обезъяна анекдоты рассказывает всю ночь потом смеюсь. Я у себя всё от тестил у меня работает я не врубаюсь в твоё замечание, у меня работает так как я написал, прекрасно без ошибок. --- Добавлено --- Ладно хрен с ним напишем на верху <?php, так и быть этого точно там не хватает .
@pinokio ты не меняй на переправе условия задачи. У ТС вполне рабочий алгоритм. А вот у тебя - нет. И ты как змея на сковородке пытаешься выкрутиться. То формат данных поменять, в базу всё запихнуть. Речь ведь не о том, как изменить условия задачи, а о том, что твоё решение исходной задачи неверно.
@Ganzal ммм..... Если я правильно понял задачу... То я верное решение скинул.... Что он не так сделал да всё... Так бред делать... Я написал как бы решил эту задачу я. Я не сказал что так правильно... Я на 80% уверен что он делает форму логина и пароля с хранением этого в файлике. Автор если я не прав кинь в меня камнем.
@pinokio ладно-понятно. Придется на пальцах объяснять тебе неверность твоего верного решения. Итак. Ты ищешь подстроку во всём тексте. То есть для успешного прохождения теста нужно всего лишь либо логин, либо даже часть логина. Она как пить дать будет в тексте и стрпоз вернет ненулевой результат. И добро пожаловать. Автор такой ошибки не делает. Он разбивает файл на строки и ищет конкретно состряпанную строку. Если злодей не указал какие-то данные - опустил пароль и/или часть логина - то проверка не найдет такой недоделанной строки. В твоем же случае очень легко найдет. Удивительно, как ты этот момент упустил. Похоже реально жираф. Если уж и предлагать патчи текущего решения, то я бы держал список сразу массивом в пхп-файле. Апи на обновление простое, загрузка данных в память ускоряется за счёт кэша опкода. --- Добавлено --- @pinokio и да, коммент к коду у тебя неправильный. Вводит в заблуждение незнающего человека.
@Ganzal АААА Внатуре.... Ну я просто не делал таких вещей.... Ну я же говорю выше пост писал про explode ну вот код... PHP: if(isset($_POST('submit'))){ $login = $_POST['login']; $password = $_POST['password']; $result = ''; // Что хранится в нашей log.txt //Jasket:111111;Maska:124124124;GooglePlus:21rgwrg124; // // $log = file_get_contents('log.txt'); $arrNew = explode(';', $log); foreach($arrNew as $key => $value){ $val = explode(':', $value); if($value[0] == $login ) { if ($value[1] == $password) { $result = 'Поздравляем мы вошли в систему'; echo $result; } } } }; } Таким же макером можно и регистрацию сделать тока видом сбоку... --- Добавлено --- это я с мана скопипастил этот кусок кода....