вобщем поставьте диагноз и скажите в чем дело)):
preg_match_all("#<input.*name=\"(.*{$logins[$type][$l]}.*)\".*>#isU", $site, $username);
в в скобках находится слово "user" (т.е. в переменной $logins[$type][$l] находится слово "user")
но в $username[1][0] в итоге пустой. тоесть не находит он там такого слова
а если написать так:
preg_match_all("#<input.*name=\"(.*user.*)\".*>#isU", $site, $username);
то выводит всё правильно. почему??
я пробовал по разному записывать то что в скобках:
(.*?{$logins[$type][$l]}.*?)
(.*{$logins[$type][$l]}.*?)
([^<]*{$logins[$type][$l]}[^<]*)
(.*{$logins[$type][$l]}[^<]*)
даже просто вот так:
({$logins[$type][$l]})
но ничего не помогает. В чем же дело?
$logins[$type][$l] я проверял через echo, там есть слово user;
вот по-подробнее код:
for($l=0;$l<count($logins[$type]);){
#echo $logins[$type][$l]."!";
preg_match_all("#<input.*name=\"(.*{$logins[$type][$l]}.*)\".*>#isU", $site, $username);
$pos_un=stripos($username[1][0], $logins[$type][$l]);
if(empty($pos_un))$l++; else break;
}echo $logins[$type][$l]."!".$username[1][0];
где $type=0
и $logins[$type]=('user', 'name', 'login', 'username' и т.д.)
а в переменной $site:
<input type="text" name="user" size="10" />
<input type="password" name="passwrd" size="10" />
<input type="submit" value="Войти" />
<input type="hidden" name="hash_passwrd" value="" />
вместо слова "user" - preg_match_all почему-то определяет там слово "name" и выводит, после чего dв переменной $username[1][0] находится:
user" size="10" />
вот это:
#echo $logins[$type][$l]."!";
показывает вот что: 'user!name!'
тоесть останавливается на name
а вот это:
echo $logins[$type][$l]."!".$username[1][0];
показывает: 'name!user" size="10" />'+еще поле для ввода
Спустя 5 часов, 20 минут, 46 секунд (18.12.2010 - 23:43) inpost написал(а):
Выводе не в фигурных скобках, а так:
".$logins[][]."
фигурные скобки воспринимаются регуляркой как длина символов перед ней.
".$logins[][]."
фигурные скобки воспринимаются регуляркой как длина символов перед ней.
Спустя 58 минут, 25 секунд (19.12.2010 - 00:41) blase написал(а):
Цитата (inpost @ 18.12.2010 - 20:43) |
Выводе не в фигурных скобках, а так: ".$logins[][]." |
а, я так делал, тоже не получается
у меня еще есть второй код, только прег_матч_алл настроен под <form..action="%$logins[][]%" ...
так вот он работает, а написан точно также как и этот, точь в точь одинаково и тоже с фигурными знаками.
щас перепроверил - неполучается
Спустя 21 час, 22 минуты, 8 секунд (19.12.2010 - 22:03) inpost написал(а):
Покажи как ты исправил после моего замечания.
! |
inpost |
Спустя 49 минут, 52 секунды (19.12.2010 - 22:53) Winston написал(а):
Что у тебя находится в $site ? Судя по всему у тебя там присутствуют input'ы, чтобы у тебя в $username[1][0] было совпадение то нужно чтобы в $site был хотя бы один inp с именем которое содержится в $logins[$type][$l]. Может попробуй так:
Тогда в $username[1][0..N] будут имена. И почему у тебя в условии цикла нету $l++ ?
for($l=0;$l<count($logins[$type]); $l++){
#echo $logins[$type][$l]."!";
$site .= "<input name={$logins[$type][$l]}'>";
preg_match_all("#<input.*name=\"(.*)\".*>#isU", $site, $username);
$pos_un=stripos($username[1][0], $logins[$type][$l]);
if(empty($pos_un))$l++; else break;
}echo $logins[$type][$l]."!".$username[1][0];
Тогда в $username[1][0..N] будут имена. И почему у тебя в условии цикла нету $l++ ?
Спустя 5 часов, 3 минуты, 41 секунда (20.12.2010 - 03:57) blase написал(а):
Цитата (PHPprogramer @ 19.12.2010 - 19:53) |
Что у тебя находится в $site ? Судя по всему у тебя там присутствуют input'ы, чтобы у тебя в $username[1][0] было совпадение то нужно чтобы в $site был хотя бы один inp с именем которое содержится в $logins[$type][$l]. Может попробуй так:for($l=0;$l<count($logins[$type]); $l++){ Тогда в $username[1][0..N] будут имена. И почему у тебя в условии цикла нету $l++ ? |
$l++ в цикле присутствует: if(empty($pos_un))$l++; else break; ,
массив $logins[$type][$l] переберается циклом правильно. это работает.
вот инпуты:
<input type="text" name="user" size="10" />
<input type="password" name="passwrd" size="10" />
<input type="submit" value="Войти" />
<input type="hidden" name="hash_passwrd" value="" />
в промежутке цикла я поставил #echo $logins[$type][$l]."!";
что даёт видеть на странице браузера что цикл правильно и поочередно перебирает слова в массиве(слова менял местами, добавлял множество других), но останавливается он не на user а на name, и в итоге $username[1][0] показывает вот что:
echo $logins[$type][$l]."!".$username[1][0];

может ошибка где-то тут?:
$pos_un=stripos($username[1][0], $logins[$type][$l]);
if(empty($pos_un))$l++; else break;
потому что когда просто убрал цикл и перед preg'om поставил просто вот так: $logins[$type][$l]="user", оно срабатывает
Спустя 3 минуты, 10 секунд (20.12.2010 - 04:00) blase написал(а):
Цитата (inpost @ 19.12.2010 - 19:03) |
Покажи как ты исправил после моего замечания. [MOD]В смс-ках ссылку нельзя давать!inpost[/EX] |
ок, не знал. больше не буду
> Покажи как ты исправил после моего замечания.
честно-честно я так пробовал и после твоего замечания опять попробовал - не получается
Спустя 4 минуты, 30 секунд (20.12.2010 - 04:04) blase написал(а):
ц))) вот то даю)) оказалось неправильно тут:
изменил на
то есть опставил "!", и вооля - сработало)
сенькс за ответы! ошибки у меня как всегда из-за невнимательности))
if(empty($pos_un))$l++; else break;
изменил на
if(!empty($pos_un))$l++; else break;
то есть опставил "!", и вооля - сработало)
сенькс за ответы! ошибки у меня как всегда из-за невнимательности))