Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Не выходит зарегистрироваться.
Форумы портала PHP.SU » PHP » Программирование на PHP » Не выходит зарегистрироваться.

Страниц (2): [1] 2 »
 

1. Инклуд - 30 Ноября, 2010 - 00:58:10 - перейти к сообщению
Собтвенно, проблема такова.
Некий кусочек кода:

PHP:
скопировать код в буфер обмена
  1. $url        = 'http://skdl.chatovod.ru/widget/register/?nick='.$nick;
  2. $chat_c   = tempnam('./cookies/', 'chat_');
  3. $headers = array('Host: skdl.chatovod.ru', 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)',
  4.         'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language: ru', 'Accept-Charset: utf-8',
  5.         'Connection: keep-alive', 'Referer: http://skdl.chatovod.ru/widget/', 'Cache-Control: max-age=0'
  6. );
  7.        
  8. $resp = curlStart($url, $chat_c, $headers, '', $proxy);
  9. preg_match('#<input type="hidden" name="fkey" value="([^"]*?)" />#i', $resp, $afkey);
  10. $fkey   = trim($afkey[1]);
  11. // погнали регаться
  12. $url     = 'http://skdl.chatovod.ru/widget/register/?';
  13. $headers = array(
  14. 'Host: skdl.chatovod.ru', 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)',
  15. 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language: ru', 'Accept-Charset: utf-8',
  16. 'Connection: keep-alive', 'Content-Type: application/x-www-form-urlencoded'
  17. );
  18. $post    = 'fact=registeruser&fkey='.$fkey.'&nick='.$nick.'&email='.$email.'&password='.$password.'&password2='.$password;
  19. echo curlStart($url, $chat_c, $headers, $post, $proxy);
  20.  
  21.  


Соответственно ,выводится опять форма регистрации. Меня смущет JS-код после формы, но я не шарю в JS и понять его не могу.

PHP:
скопировать код в буфер обмена
  1. function curlStart ($url, $cookie, $headers='', $post = '', $p = '', $timeout=10, $verbose = 0)
  2. {
  3.         $c = curl_init();
  4.        
  5.         curl_setopt($c, CURLOPT_URL, $url);
  6.         curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
  7.         curl_setopt($c, CURLOPT_COOKIEJAR, $cookie);
  8.         curl_setopt($c, CURLOPT_TIMEOUT, $timeout);
  9.         curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
  10.         if (!empty($p)) { curl_setopt($c, CURLOPT_PROXY, $p); }
  11.         if (!empty($headers)) { curl_setopt($c, CURLOPT_HTTPHEADER,$headers); }
  12.         if ($verbose) { curl_setopt($c, CURLOPT_VERBOSE, 1); }
  13.         if (!empty($post)) {
  14.                 curl_setopt($c, CURLOPT_POST, true);
  15.                 curl_setopt($c, CURLOPT_POSTFIELDS, $post);
  16.         }
  17.        
  18.         $resp = curl_exec($c);
  19.         curl_close($c);
  20.         return $resp;
  21.        
  22. }
2. OrmaJever - 30 Ноября, 2010 - 01:41:42 - перейти к сообщению
советую воспользоватся этой функцией.
PHP:
скопировать код в буфер обмена
  1. function curl($url='', $post='', $referer='')
  2. {
  3.         $cl = curl_init();
  4.         curl_setopt($cl, CURLOPT_URL, $url);
  5.         curl_setopt($cl, CURLOPT_RETURNTRANSFER,1);
  6.         curl_setopt($cl, CURLOPT_USERAGENT, 'Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.2.15 Version/10.10');
  7.     curl_setopt($cl, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
  8.     curl_setopt($cl, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
  9.     if(!empty($post)) {curl_setopt($cl, CURLOPT_POST, 1); curl_setopt($cl, CURLOPT_POSTFIELDS, $post);}else{curl_setopt($cl, CURLOPT_POST, 0);}
  10.     if(!empty($referer)){curl_setopt($cl, CURLOPT_REFERER, $referer);}else{curl_setopt($cl,CURLOPT_REFERER, 1);}
  11.     $ex=curl_exec($cl);
  12.     curl_close($cl);
  13.         return $ex;
  14. }


и вызывать её попроще Подмигивание
PHP:
скопировать код в буфер обмена
  1.  
  2. $url = 'http://skdl.chatovod.ru/widget/register/?nick='.$nick;
  3. $post = 'fact=registeruser&fkey='.$fkey.'&nick='.$nick.'&email='.$email.'&password='.
  4. echo curl($url, $post);
3. Инклуд - 30 Ноября, 2010 - 10:33:24 - перейти к сообщению
Эффект тот же.. Огорчение
4. DeepVarvar - 30 Ноября, 2010 - 10:41:48 - перейти к сообщению
Инклуд пишет:
Меня смущет JS-код после формы

где это такой код? на страничке? ну вот он значит и не дает )))
5. Инклуд - 30 Ноября, 2010 - 10:48:55 - перейти к сообщению
CODE (javascript):
скопировать код в буфер обмена
  1. <script type="text/javascript">
  2.     function chatcheckfieldvalue(t, method) {
  3.         var tt = $(t);
  4.         var tval = t.value;
  5.         $.ajax({
  6.             url: "/service/",
  7.             dataType: "json",
  8.             type: "POST",
  9.             data: {method: method, v: tval},
  10.             cache: false,
  11.             success: function(data){
  12.                 var am = tt.nextAll(".ajaxmsg");
  13.                 if (am.size() == 0) {
  14.                     var msg = $('<div class="ajaxmsg">'+data.msg+'</a>');
  15.                     tt.parent().append(msg);
  16.                     if (msg.prev().hasClass("error")) msg.prev().remove();
  17.                 } else
  18.                     am.html(data.msg);
  19.                 am = tt.nextAll(".ajaxmsg");
  20.                 if (data.status != "ok") {
  21.                     am.removeClass("ajaxok").addClass("ajaxerror");
  22.                 } else {
  23.                     am.removeClass("ajaxerror").addClass("ajaxok");
  24.                 }
  25.             },
  26.             error: function() {
  27.                 //
  28.             }
  29.         });
  30.     };
  31.     function chatcheckfieldremove(t) {
  32.         $(t).nextAll(".ajaxmsg").remove();
  33.     };
  34. </script>
  35.  


Вот такой код, идёт сразу после формы.
6. Coder1994 - 30 Ноября, 2010 - 10:49:35 - перейти к сообщению
этот ява-скрпит проверяет на правильность регистрации,а в частности вам мешает - url: "/service/"
Функции curl передавайте параметр REFERER, и всё должно работать.
7. Инклуд - 30 Ноября, 2010 - 11:00:43 - перейти к сообщению
Coder1994, если не трудно, скажите, что именно передать как REFERER.
8. Coder1994 - 30 Ноября, 2010 - 11:20:25 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. <?
  2. curl_setopt($cl, CURLOPT_REFERER , "http://http://skdl.chatovod.ru/service/");
  3. ?>
9. Инклуд - 30 Ноября, 2010 - 11:22:35 - перейти к сообщению
Coder1994, у Вас работает?
У меня всё так же, выводит страничку регистрации.
(я учёл, что там http:// один раз нужно)
10. OrmaJever - 30 Ноября, 2010 - 11:23:15 - перейти к сообщению
Инклуд а пост запрос верный? Там как я глянул есть 2 поля под пароль, а у вас в запросе только 1...
11. Инклуд - 30 Ноября, 2010 - 11:27:59 - перейти к сообщению
OrmaJever, у меня POST-запрос выглядит так:
PHP:
скопировать код в буфер обмена
  1. $post    = 'fact=registeruser&fkey='.$fkey.'&nick='.$nick.'&email='.$email.'&password='.$password.'&password2='.$password;

Вроде верный...
12. DeepVarvar - 30 Ноября, 2010 - 11:44:56 - перейти к сообщению
Ага, а вам строчка

ни о чем не говорит??? Формат данных учитывать надо, и никаких там полей нет - есть JSON-строка передаваемая методом POST и в индексном файле в папке /service/ она разбирается с json_decode(); а вы ему обычный пост пихаете...
13. Инклуд - 30 Ноября, 2010 - 13:56:30 - перейти к сообщению
DeepVarvar, я же предупредил, что не шарю в JS... Недовольство, огорчение
Спасибо, попробую разобраться: )
(Добавление)
Я правильно понял, что:
PHP:
скопировать код в буфер обмена
  1. $url     = 'http://skdl.chatovod.ru/widget/register/?';
  2. $headers = array(
  3.         'Host: skdl.chatovod.ru', 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)',
  4.         'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language: ru', 'Accept-Charset: utf-8',
  5.         'Connection: keep-alive', 'Content-Type: application/x-www-form-urlencoded'
  6. );
  7. $post = array('fact'=>'registeruser', 'fkey'=>$fkey, 'nick='=>$nick, 'email'=>$email, 'password'=>$password, 'password2'=>$password);
  8. $post = json_encode($post);
  9. echo curlStart($url, $chat_c, $headers, $post, $proxy);

?
или там всё-таки url будет "http://skdl.chatovod.ru/service/"?
14. OrmaJever - 30 Ноября, 2010 - 14:19:18 - перейти к сообщению
javascript здесь совсем не причём. Он проверяет логин на правельность...
А не регистрирует потому что там капча есть!
15. Инклуд - 30 Ноября, 2010 - 14:20:21 - перейти к сообщению
OrmaJever, капча появляется не сразу, а через несколько попыток с одного ip, я делаю проверку на это и, соответственно, юзаю прокси. Так что дело не в этом...

 

Powered by ExBB FM 1.0 RC1