[php] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. Houze

    Houze New Member

    Joined:
    16 May 2009
    Messages:
    65
    Likes Received:
    4
    Reputations:
    0
    Писал регер яндекс почты...
    Сделал на курле - в общем

    PHP:
    <html> 
    <?php
    $idkey
    ="";
    $step="one";
    $filled="yes";
    $fresh="3";
    $iname="jkljl";
    $fname="jkljkl";
    $login="jkpkj7oi97";
    $done="";
    $user_cookie_file $_SERVER['DOCUMENT_ROOT'].'/cookies.txt'
    function 
    auth() {
        
    $url "http://passport.yandex.ru/passport?mode=register&ncrnd=641490";
        global 
    $user_cookie_file$idkey$step$filled$fresh,$iname,$fname,$login,$done
        
    $ch curl_init($url);
        
    curl_setopt($chCURLOPT_URL,$url);
        
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
        
    curl_setopt($chCURLOPT_USERAGENT"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
        
    curl_setopt($chCURLOPT_COOKIEFILE$user_cookie_file);
        
    curl_setopt($chCURLOPT_COOKIEJAR,  $user_cookie_file);
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
        
    curl_setopt($chCURLOPT_POST,1); //Будем отправлять POST запрос
        
    curl_setopt($chCURLOPT_POSTFIELDS,"idkey=$idkey&step=$step&filled=$filled&fresh=$fresh&iname=$iname&fname=$fname&login=$login&done=$done");
        
    $html curl_exec($ch);
        
    curl_close($ch);
        
    $html2 preg_match('#\?idkey=(.*?)"#i',$html,$m);
    echo 
    "<img src=\"http://passport.yandex.ru/digits?idkey=$m[1]\"  />";
        return 
    $html;
    }
    auth();
    echo 
    '<form action="1.php" method=POST> Капча <br><input type=text name="name"  value=""><br>';
    echo 
    'логин <br><input type=text name="name2" value="'.$login .' "><br>';
    echo 
    '<input type=submit value="Отправить"> </form>';
    ?>  
    </html>
    и файл 1.php

    PHP:
    <?
    $u_name $_POST['name'];
    $u_name2$_POST['name2'];
    echo 
    "<b>Ваше имя:".($u_name)."<br>";
    $login $u_name2;
    echo 
    "login:".($login)."<br>";
    $url="http://passport.yandex.ru/passport?mode=register";
    function 
    browser($url$login$u_name) {
        
    $user_cookie_file $_SERVER['DOCUMENT_ROOT'].'/cookies.txt'//Получаем сохраненный после авторизации файл с куками.
        
    $ch curl_init($url);
        
    curl_setopt($chCURLOPT_URL,$url);
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
        
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
        
    curl_setopt($chCURLOPT_USERAGENT"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
        
    curl_setopt($chCURLOPT_COOKIEFILE$user_cookie_file); //Подставляем куки раз
        
    curl_setopt($chCURLOPT_COOKIEJAR,  $user_cookie_file); //Подставляем куки два
        
    curl_setopt($chCURLOPT_POSTFIELDS,"idkey=&step=two&filled=yes&login=$login&fname=jkljkl&iname=jkljl&time=1290841802745&gmt_offset=&passwd=G5871G5871&passwd2=G5871G5871&hintq=2&udhintq=&hinta=&email=&phonenumber=&code=$u_name&agreed=yes&_weakpass_warn=1");
        
    $html curl_exec($ch);
        
    curl_close($ch);
        return 
    $html//Возвращаем ответ
    }
    echo 
    browser($url$login$u_name);
    ?>

    первый запрос отправляет значение логина и еще что-то, после чего мы передаем 1.php
    значение выдернутой капчи и логин. А он в свою очередь отправляет данные опять пост запросом и должен переадресовать на страничку где написано о успешной реге... он пост запрос отправляет - но толку неттт....

    Короче расскажите болбесу что не так??? (регер у меня и так есть - просто учусь...) - могу ++наставить за помощь((
     
  2. je0n

    je0n Elder - Старейшина

    Joined:
    14 May 2006
    Messages:
    345
    Likes Received:
    96
    Reputations:
    41
    не очень понял что нужно. Это не то?
    Code:
    echo "<b>$text[0]</b><br>";
    echo "<b>$text[1]</b><br>";
    echo "<b>$text[2]</b><br>";
    
    (вставить сразу после строчки $text=explode(" ",$search);
     
  3. randman

    randman Members of Antichat

    Joined:
    15 May 2010
    Messages:
    1,366
    Likes Received:
    610
    Reputations:
    1,101
    Просто скрипт устарел - нало писать новый, времени 3 часа, но так просто кто то врят ли будет это делать. А антикапча наверно уже не работает, и её распознование - вобще платная вещь, очень дорогая.
     
  4. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Это осуществить с помощью php-сокетов/cURL и эмуляции действий пользователя, т.е. отсылать те же запросы на тот самый определенный URL, которые отсылаются при нажатии на кнопку submit руками. Подробнее не пояснить, данных мало.
     
  5. je0n

    je0n Elder - Старейшина

    Joined:
    14 May 2006
    Messages:
    345
    Likes Received:
    96
    Reputations:
    41
    если у "определенного адреса" форма с методом GET, то можно передать все параметры в адресе страницы. Тогда получить текст нужной страницы можно этим - fread().
    Если "определонному адресу" передаются POST параметры, то наверное, нужно сокеты юзать или curl
     
  6. !Knyaz2010!

    !Knyaz2010! Member

    Joined:
    24 Jun 2010
    Messages:
    57
    Likes Received:
    5
    Reputations:
    5
    je0n, надо сделать посдветку слов, которые будут найдены в БД
     
  7. Houze

    Houze New Member

    Joined:
    16 May 2009
    Messages:
    65
    Likes Received:
    4
    Reputations:
    0
    Антикапчи здесь нет и близко.
    скрипт писал я. мне нужно понять ошибку...
    Читайте пожалуста сначала сообщения - потом отвечайте.
     
  8. je0n

    je0n Elder - Старейшина

    Joined:
    14 May 2006
    Messages:
    345
    Likes Received:
    96
    Reputations:
    41
    Code:
    $text=explode(" ",$search);
    
    $a=mysql_query("SELECT * FROM books WHERE bname LIKE '%$text[0]%' AND bname LIKE '%$text[1]%' AND bname LIKE '%$text[2]%'",$session) or die (mysql_error());
    $b=mysql_query("SELECT * FROM books WHERE (bname LIKE '%$text[1]%' AND bname LIKE '%$text[2]%') OR (bname LIKE '%$text[0]%' AND bname LIKE '%$text[2]%') OR (bname LIKE '%$text[0]%' AND bname LIKE '%$text[1]%')",$session) or die (mysql_error());
    $c=mysql_query("SELECT * FROM books WHERE (bname LIKE '%$text[0]%') OR (bname LIKE '%$text[1]%') OR (bname LIKE '%$text[2]%')",$session) or die (mysql_error());
    
    while($b1=mysql_fetch_row($a)){
    			print "$i. <b style='color:red'>$b1[1]</b><br>";
    		$i++;			     } 
    
    		while($b2=mysql_fetch_row($b)){
    			print "$i. <b style='color:red'>$b2[1]</b><br>";
    		$i++;			     } 
    
    		while($b3=mysql_fetch_row($c)){
    			print "$i. <b style='color:red'>$b3[1]</b><br>";
    		$i++;			     }
    
    так чтоле? не очень пойму понятия "подсветка слов"
     
  9. Edward

    Edward Banned

    Joined:
    11 Feb 2010
    Messages:
    329
    Likes Received:
    21
    Reputations:
    -1
    Метод POST, Спасибо, буду пытаться разобраться.

    А если через Human Emulator попробовать. Сначала 1 раз проделать свои действия, оно их запишет, потом взять PHP код, который получился и просто сделать цикл дополнительно?
     
  10. !Knyaz2010!

    !Knyaz2010! Member

    Joined:
    24 Jun 2010
    Messages:
    57
    Likes Received:
    5
    Reputations:
    5
    je0n, щас я наведу пример: есть БД и форма поиска. Припустим я ищу в БД bname LIKE '%слово%'. Надо чтобы при принтовании результатов поиска вместо обычних слов писало например <b>слово с поиска</b>. Ну как у гугле. Я что то ищу, и все совпадения слов виводит жирными, а остальные нормальние.

    Есть так: "Дискретная математика". Ввел для поиска слово "дискретн", значит результатом принтования должно бить: Дискретная математика.
     
  11. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    !Knyaz2010! попробуй:
    $text = preg_replace("#$keyword#","<b>$keyword</b>",$text,$matches);
     
  12. je0n

    je0n Elder - Старейшина

    Joined:
    14 May 2006
    Messages:
    345
    Likes Received:
    96
    Reputations:
    41
    вроде понял. Копай функцию str_replace()
    Например в переменной $text у тебя хранится весь текст, а в переменной $replace - текст, который нужно подсвечивать. Тогда вывести $text с подсветкой слов $replace будет так:
    Code:
    echo str_replace($replace,"<b>$replace</b>",$text);
    
    Кстати, обрати внимание на то,что эта функция работает и с текстовыми массивами. Думаю в твоем случае - это будет удобно.
     
  13. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75

    я вот уже ознакомился с курлом

    ну вот скрипт

    PHP:
    <?PHP 

    $ch 
    curl_init('http://mai1-ru.h2m.ru/wap/login.php');


    curl_setopt($chCURLOPT_POST1);



    curl_setopt ($chCURLOPT_USERAGENT"Mozilla/5.0 (бла бла бла..) "); 



    $headers = array
    (
        
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*;q=0.8',
        
    'Accept-Language: ru,en-us;q=0.7,en;q=0.3',
        
    'Accept-Encoding: deflate',
        
    'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7'
    ); 

    curl_setopt($chCURLOPT_HTTPHEADER,$headers); 

    curl_setopt($chCURLOPT_REFERER"http://php.su/forum/loginout.php");


    curl_setopt($chCURLOPT_POSTFIELDS'action=username=1krisa&ipassword=250792&submit=%C2%F5%EE%E4');


    curl_setopt($chCURLOPT_COOKIEJAR"my_cookies.txt");  
    curl_setopt($chCURLOPT_COOKIEFILE"my_cookies.txt");  

    curl_setopt($chCURLOPT_RETURNTRANSFER1); 


    $result curl_exec($ch); 
    curl_close($ch);
    ?>



    скрипт брал из примера, и по етому пару вопросов
    плыз ответте на все вопросы , понятным для ламера языком
    1)

    curl_setopt($ch, CURLOPT_REFERER, "http://php.su/forum/loginout.php");

    и

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);


    зачем нужны ети функции?? скажите руским языком, ато в книге непонять

    2)

    curl_setopt($ch, CURLOPT_POSTFIELDS, 'action=username=1krisa&ipassword=250792&submit=%C2%F5%EE%E4');

    што значат ети символы после сумбит?
    %C2%F5%EE%E4

    3)
    как вы уже поняли, я хотел написать флудер, как мне заставить скрипт написать сообщение в теме???
    например тут http://mai1-ru.h2m.ru/wap/viewtopic.php?t=1
    используя ету фунцыю curl_setopt($ch, CURLOPT_POSTFIELDS,
    да???
     
  14. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    CURLOPT_REFERER - реферер, тут мы говорим серверу адрес УРЛа откуда пришли.
    CURLOPT_RETURNTRANSFER - вывод результат в буфер или переменную.
    Это имя кнопки, которую мы как бы нажали, в расшифрованном выглядит как Вход
     
  15. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    спасибо, а как насчот третьего вопроса?
     
  16. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Тебе нужно узнать, какие именно поля ты должен добавить к своему POST запросу, какие поля отвечают за названние темы, сообщение и т. д. Самый простой способ: скачай какой нибудь сниффер HTTP пакетов или плагин-сниффер для своего браузера, который тебе наглядно покажет, какие именно поля должны использоваться в твоем запросе. Потом просто добавляй эти поля со своими значениями с помощью
    PHP:
    curl_setopt($chCURLOPT_POSTFIELDS'твои_данные');
    и отправляй на сервер.
     
  17. return

    return New Member

    Joined:
    23 Oct 2010
    Messages:
    125
    Likes Received:
    3
    Reputations:
    1
    Не могу понять что с сессией. Вот код:
    Code:
    <?php
    require_once("/admin/config.php"); 
    session_start(); 
    $login=$_SESSION['login'];
    $pass=$_SESSION['pass'];
    $query="select*from applicant where mail='$login' and pass='$pass'"; 
    $res=mysql_query($query); 
    if(mysql_num_rows($res)>=1)
    { 	
         echo "<a href='exit.php'>Exit</a>"; 
    } 
    else 
    { 	
         $query="select*from applicant where mail='$login' and pass='$pass'"; 	
         $res=mysql_query($query);
         if(mysql_num_rows($res)>=1) 
         { 		
              echo "<a href='exit.php'>Exit</a>"; 
         } 	
    else input(); 
    }
    Выдаёт ошибку
    Code:
    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at Z:\home\test.ru\www\index.php:10) in Z:\home\test.ru\www\loginform.php on line 3
     
  18. roxblnfk

    roxblnfk Elder - Старейшина

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    return
    сессию надо начинать до вывода в браузер (либо буферизуй вывод)
    отсюда:
    либо require_once("/admin/config.php"); чего-то выводит (для этого можешь session_start поставить второй строкой),
    либо ты пишешь скрипт в UTF-8 с BOM (нужно без BOM)
     
    #17078 roxblnfk, 30 Nov 2010
    Last edited: 30 Nov 2010
  19. return

    return New Member

    Joined:
    23 Oct 2010
    Messages:
    125
    Likes Received:
    3
    Reputations:
    1
    roxblnfk спс ... Сначала думал что дело в кодировке и прогонял через прогу utf8-bom-remover, но потом поставил session_start() в самый-самый верх (ещё до загрузки всех скриптов и html) и всё ок!
     
  20. bad_boy

    bad_boy Elder - Старейшина

    Joined:
    30 Dec 2004
    Messages:
    187
    Likes Received:
    33
    Reputations:
    3
    Это mime кодировка, смотри функции
     
Thread Status:
Not open for further replies.