|
|
|
| Здравствуйте!У меня такая проблема:как сравнить данные,ролучаемые на странице с полями для ввода имя и пароля с данными,хранящимися в файле?
Я подумал, что можно получить имя и пароль и на основе их создать строку,пример ИМЯ;ПАРОЛЬ, и в текстовом файле тож записать в столбик ИМЯ;ПАРОЛЬ для разных пользователей, и потом просто сравнить, есть ли такая же стока в этом файле, но у меня что-то не получается.
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 "Вы неправильно ввели имя и(или) пароль!";}
|
Он все время пишет, что неправильно.Почему такое и как это лучше сделать, чтобы скрипт находил строку, идентичную,которую ввел пользоватеоь? | |
|
|
|
|
|
|
|
для: Эдик12
(08.01.2010 в 20:55)
| | Вероятно, строчка с правильными аутентификационными данными стоит где-то посередине файла namepass.txt, а последняя его строка далека от идеала=)
Вывод: вы забыли написать условие выхода из FOREACH при совпадении. | |
|
|
|
|
|
|
|
для: Boeing
(08.01.2010 в 21:26)
| | а куда это условие поместить надо?и как его прописать?а то яникогда так не делал | |
|
|
|
|
|
|
|
для: Эдик12
(08.01.2010 в 21:38)
| | Капец у вас код в смятку..
<?php
foreach($file as $str) {
if($str == $string) {
$k=1;
break; // выход из цикла
}
}
|
| |
|
|
|
|
|
|
|
для: neadekvat
(08.01.2010 в 21:46)
| | что это изменит кроме кол-ва итераций? | |
|
|
|
|
|
|
|
для: neadekvat
(08.01.2010 в 21:46)
| | брэк только сокращает время цикла, но никак не влияет на результат, потому что нигде далее $k не переводится в иное значение.
а приходят ли вообще логин-пароль с формы? | |
|
|
|
|
|
|
|
для: GeorgeIV
(08.01.2010 в 21:51)
| | Если б не прииходили, тишина бы была, элса-то нет. | |
|
|
|
|
|
|
|
для: Boeing
(08.01.2010 в 21:53)
| | if($k==1){include("index.php");}else{ echo "Вы неправильно ввели имя и(или) пароль!";} | |
|
|
|
|
|
|
|
для: ride
(08.01.2010 в 21:55)
| | А первая строка ни о чём?:) | |
|
|
|
|
|
|
|
для: Boeing
(08.01.2010 в 22:02)
| | на скобки фигурные смотрели?:) | |
|
|
|
|
|
|
|
для: ride
(08.01.2010 в 22:04)
| | упс, да, моя вина))) | |
|
|
|
|
|
|
|
для: Boeing
(08.01.2010 в 21:53)
| | бывает, что приходит не то, что автор ждет. Но это так,варианты лечения по фотографии :-( | |
|
|
|
|
|
|
|
для: GeorgeIV
(08.01.2010 в 21:57)
| | да я вроде уже всосал, что произошло, просто код написан чуть ли не в одну строку. Кто ж так делает...
А приходит не то, чего ждёшь, практически всегда))) поэтому надо быть предусмотрительным))) | |
|
|
|
|
|
|
|
для: Эдик12
(08.01.2010 в 20:55)
| |
if(trim($str) == $string)
|
| |
|
|
|
|
|
|
|
для: Эдик12
(08.01.2010 в 20:55)
| | хааа..... стоп! У вас переменная $k определена в пределах форЫча, а вы пытаетесь ее вызвать извне... конечно вы попадёте в элс. | |
|
|
|
|
|
|
|
для: Boeing
(08.01.2010 в 22:05)
| | Спс всем,особенно Ride,все работает как надо | |
|
|
|
|
|
|
|
для: Boeing
(08.01.2010 в 22:05)
| |
foreach(array(1) as $b){$k=1;}
if($k == 1) echo '1' ; else echo '0';
|
| |
|
|
|
|
|
|
|
для: 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 'Вы неправильно ввели имя и(или) пароль!';
}
}
|
| |
|
|
|
|
|
|
|
для: kosta_in_net
(09.01.2010 в 00:23)
| | 1. по поводу file() из мануала:
Замечание: Каждая строка в полученном массиве будет завершаться символами конца строки, поэтому, если вам будет нужно избавиться от этих символов, вы будете должны использовать функцию trim().
поэтому своим "правильным кодом" вы автору врядли помогли бы.
2. я бы лучше добавил $k=0; перед foreach, чем писать @$k.
3. if(@$_POST['name'] && @$_POST['pass'])
а что если автор допускает пустые значения? | |
|
|
|
|
|
|
|
для: 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, чтобы не добавлялся перевод строки. Но у меня не заработало. | |
|
|
|
|
|
|
|
для: neadekvat
(09.01.2010 в 01:15)
| | почему именно \r ? | |
|
|
|
|
|
|
|
для: ride
(09.01.2010 в 10:50)
| | Работаю под виндоус, пробовал \n - не заработало. Как не заработало и с \r\n | |
|
|
|
|
|
|
|
для: 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 'Вы неправильно ввели имя и(или) пароль!';
}
}
|
| |
|
|
|
|
|
|
|
для: kosta_in_net
(09.01.2010 в 01:50)
| | > "\r\n"; // в зависимости от того, какие переносы
Пробовали? Работает? | |
|
|
|
|
|
|
|
для: kosta_in_net
(09.01.2010 в 01:50)
| | а когда в качестве логина (леший с ним с паролем) нолик - это пустой логин?
| |
|
|
|
|
|
|
|
для: Trianon
(09.01.2010 в 02:29)
| | Про "\r\n" вопрос не ясен. Я ж написал "в зависимости...".
Про нулевой логин... это исключительная ситуация. Я в своих скриптах просто игнорирую логины из нуля или пробела. если нужно предусмотреть возможность нулевого логина, тогда нужно проверять empty | |
|
|
|
|
|
|
|
для: kosta_in_net
(09.01.2010 в 01:50)
| | пустой пароль - вполне возможный вариант.
\r\n - зачем лишние проверки? | |
|
|
|