Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сравнение текста из формы с текстом из файла
 
 автор: Эдик12   (08.01.2010 в 20:55)   письмо автору
 
 

Здравствуйте!У меня такая проблема:как сравнить данные,ролучаемые на странице с полями для ввода имя и пароля с данными,хранящимися в файле?
Я подумал, что можно получить имя и пароль и на основе их создать строку,пример ИМЯ;ПАРОЛЬ, и в текстовом файле тож записать в столбик ИМЯ;ПАРОЛЬ для разных пользователей, и потом просто сравнить, есть ли такая же стока в этом файле, но у меня что-то не получается.
if((isset($_POST['name'])) && (isset($_POST['pass']))){
$name=$_POST['name'];$pass=$_POST['pass'];
$string="$name".";"."$pass";
$txt="namepass.txt";
$open=fopen($txt,"r");
$file=file($txt);
foreach($file as $str){if($str==$string){$k=1;}}
if($k==1){include("index.php");}else{ echo "Вы неправильно ввели имя и(или) пароль!";}

Он все время пишет, что неправильно.Почему такое и как это лучше сделать, чтобы скрипт находил строку, идентичную,которую ввел пользоватеоь?

  Ответить  
 
 автор: Boeing   (08.01.2010 в 21:26)   письмо автору
 
   для: Эдик12   (08.01.2010 в 20:55)
 

Вероятно, строчка с правильными аутентификационными данными стоит где-то посередине файла namepass.txt, а последняя его строка далека от идеала=)

Вывод: вы забыли написать условие выхода из FOREACH при совпадении.

  Ответить  
 
 автор: Эдик12   (08.01.2010 в 21:38)   письмо автору
 
   для: Boeing   (08.01.2010 в 21:26)
 

а куда это условие поместить надо?и как его прописать?а то яникогда так не делал

  Ответить  
 
 автор: neadekvat   (08.01.2010 в 21:46)   письмо автору
 
   для: Эдик12   (08.01.2010 в 21:38)
 

Капец у вас код в смятку..


<?php
foreach($file as $str) {
 if(
$str == $string) {
  
$k=1;
  break; 
// выход из цикла
 
}
}

  Ответить  
 
 автор: ride   (08.01.2010 в 21:47)   письмо автору
 
   для: neadekvat   (08.01.2010 в 21:46)
 

что это изменит кроме кол-ва итераций?

  Ответить  
 
 автор: GeorgeIV   (08.01.2010 в 21:51)   письмо автору
 
   для: neadekvat   (08.01.2010 в 21:46)
 

брэк только сокращает время цикла, но никак не влияет на результат, потому что нигде далее $k не переводится в иное значение.

а приходят ли вообще логин-пароль с формы?

  Ответить  
 
 автор: Boeing   (08.01.2010 в 21:53)   письмо автору
 
   для: GeorgeIV   (08.01.2010 в 21:51)
 

Если б не прииходили, тишина бы была, элса-то нет.

  Ответить  
 
 автор: ride   (08.01.2010 в 21:55)   письмо автору
 
   для: Boeing   (08.01.2010 в 21:53)
 

if($k==1){include("index.php");}else{ echo "Вы неправильно ввели имя и(или) пароль!";}

  Ответить  
 
 автор: Boeing   (08.01.2010 в 22:02)   письмо автору
 
   для: ride   (08.01.2010 в 21:55)
 

А первая строка ни о чём?:)

  Ответить  
 
 автор: ride   (08.01.2010 в 22:04)   письмо автору
 
   для: Boeing   (08.01.2010 в 22:02)
 

на скобки фигурные смотрели?:)

  Ответить  
 
 автор: Boeing   (08.01.2010 в 22:08)   письмо автору
 
   для: ride   (08.01.2010 в 22:04)
 

упс, да, моя вина)))

  Ответить  
 
 автор: GeorgeIV   (08.01.2010 в 21:57)   письмо автору
 
   для: Boeing   (08.01.2010 в 21:53)
 

бывает, что приходит не то, что автор ждет. Но это так,варианты лечения по фотографии :-(

  Ответить  
 
 автор: Boeing   (08.01.2010 в 22:06)   письмо автору
 
   для: GeorgeIV   (08.01.2010 в 21:57)
 

да я вроде уже всосал, что произошло, просто код написан чуть ли не в одну строку. Кто ж так делает...

А приходит не то, чего ждёшь, практически всегда))) поэтому надо быть предусмотрительным)))

  Ответить  
 
 автор: ride   (08.01.2010 в 21:46)   письмо автору
 
   для: Эдик12   (08.01.2010 в 20:55)
 

if(trim($str) == $string)

  Ответить  
 
 автор: Boeing   (08.01.2010 в 22:05)   письмо автору
 
   для: Эдик12   (08.01.2010 в 20:55)
 

хааа..... стоп! У вас переменная $k определена в пределах форЫча, а вы пытаетесь ее вызвать извне... конечно вы попадёте в элс.

  Ответить  
 
 автор: Эдик12   (08.01.2010 в 22:14)   письмо автору
 
   для: Boeing   (08.01.2010 в 22:05)
 

Спс всем,особенно Ride,все работает как надо

  Ответить  
 
 автор: ride   (08.01.2010 в 22:39)   письмо автору
 
   для: Boeing   (08.01.2010 в 22:05)
 


foreach(array(1) as $b){$k=1;}
if($k == 1) echo '1' ; else echo '0';

  Ответить  
 
 автор: kosta_in_net   (09.01.2010 в 00:23)   письмо автору
 
   для: ride   (08.01.2010 в 22:39)
 

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

if(@$_POST['name'] && @$_POST['pass']){ 
    $string=$_POST['name'].';'.$_POST['pass']; 
    $file=file('namepass.txt'); 
    foreach($file as $str){
        if($str==$string){
            $k=true;
            break;
        }
    } 
    if(@$k){
        include('index.php');
    }else{
        echo 'Вы неправильно ввели имя и(или) пароль!';
    }
}

  Ответить  
 
 автор: ride   (09.01.2010 в 00:57)   письмо автору
 
   для: kosta_in_net   (09.01.2010 в 00:23)
 

1. по поводу file() из мануала:
Замечание: Каждая строка в полученном массиве будет завершаться символами конца строки, поэтому, если вам будет нужно избавиться от этих символов, вы будете должны использовать функцию trim().
поэтому своим "правильным кодом" вы автору врядли помогли бы.
2. я бы лучше добавил $k=0; перед foreach, чем писать @$k.
3. if(@$_POST['name'] && @$_POST['pass'])
а что если автор допускает пустые значения?

  Ответить  
 
 автор: neadekvat   (09.01.2010 в 01:15)   письмо автору
 
   для: ride   (09.01.2010 в 00:57)
 

<?php
if((isset($_POST['name'])) && (isset($_POST['pass']))){

$name $_POST['name'];
$pass $_POST['pass'];

$string $name ";" $pass "\r"// раз приходит с переносом - его мы и добавим
$file file('namepass.txt');
if ( 
in_array($string$file) ) echo 'ok!';
}

Кстати, у file, по мануалу, можно добавить флаг FILE_IGNORE_NEW_LINES, чтобы не добавлялся перевод строки. Но у меня не заработало.

  Ответить  
 
 автор: ride   (09.01.2010 в 10:50)   письмо автору
 
   для: neadekvat   (09.01.2010 в 01:15)
 

почему именно \r ?

  Ответить  
 
 автор: neadekvat   (09.01.2010 в 12:48)   письмо автору
 
   для: ride   (09.01.2010 в 10:50)
 

Работаю под виндоус, пробовал \n - не заработало. Как не заработало и с \r\n

  Ответить  
 
 автор: kosta_in_net   (09.01.2010 в 01:50)   письмо автору
 
   для: ride   (09.01.2010 в 00:57)
 

на счет trim() я не учел. Но это ж все по-быстрому пишется и не проверяется в действии ;)
В остальном логика правильная. Пустой логин и пароль - это нонсенс. Разве нет? Есть инцинденты?
Неадекват подсказывает вариант с in_array($string, $file) - тоже очень хорошее решение и в даном случае, лучшее.

if(@$_POST['name'] && @$_POST['pass']){  
    $string=$_POST['name'].';'.$_POST['pass']."\r\n"; // в зависимости от того, какие переносы
    $file=file('namepass.txt');  
    if(in_array($string, $file)){ 
        include('index.php'); 
    }else{ 
        echo 'Вы неправильно ввели имя и(или) пароль!'; 
    } 
}

  Ответить  
 
 автор: neadekvat   (09.01.2010 в 02:06)   письмо автору
 
   для: kosta_in_net   (09.01.2010 в 01:50)
 

> "\r\n"; // в зависимости от того, какие переносы
Пробовали? Работает?

  Ответить  
 
 автор: Trianon   (09.01.2010 в 02:29)   письмо автору
 
   для: kosta_in_net   (09.01.2010 в 01:50)
 

а когда в качестве логина (леший с ним с паролем) нолик - это пустой логин?
0

  Ответить  
 
 автор: kosta_in_net   (09.01.2010 в 02:54)   письмо автору
 
   для: Trianon   (09.01.2010 в 02:29)
 

Про "\r\n" вопрос не ясен. Я ж написал "в зависимости...".
Про нулевой логин... это исключительная ситуация. Я в своих скриптах просто игнорирую логины из нуля или пробела. если нужно предусмотреть возможность нулевого логина, тогда нужно проверять empty

  Ответить  
 
 автор: ride   (09.01.2010 в 10:56)   письмо автору
 
   для: kosta_in_net   (09.01.2010 в 01:50)
 

пустой пароль - вполне возможный вариант.
\r\n - зачем лишние проверки?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования