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

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

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

    WNZRS Member

    Joined:
    3 Sep 2009
    Messages:
    294
    Likes Received:
    52
    Reputations:
    1
    PHP:
    $str'1,2,3,4,5,5,6,7,7,777,76';
    $need 777;
    $array explode(','$str);
    $size sizeof($array);
    $minus 0;
    for(
    $i=0$i<$size$i++)
    {
    if(
    $need == $array[$i])
    {
    unset(
    $array[$i]);
    $minus--;
    }
    else if(
    $minus 0)
    $array[$i+$minus] = $array[$i];
    }
    $return implode(','$array);
    echo 
    $return;  
     
  2. restart_05

    restart_05 Member

    Joined:
    5 May 2009
    Messages:
    164
    Likes Received:
    6
    Reputations:
    0
    Не работает
     
  3. WNZRS

    WNZRS Member

    Joined:
    3 Sep 2009
    Messages:
    294
    Likes Received:
    52
    Reputations:
    1
    Работает, но немного криво. Так лучше:
    PHP:
    <?php
        $str
    '1,2,3,4,5,5,6,7,7,777,76';
        
    $need 777;
        
    $array explode(','$str);
        
    $size sizeof($array);
        
    $minus 0;
        
        for(
    $i=0$i<$size$i++)
        {
            if(
    $need == $array[$i])
            {
                unset(
    $array[$i]);
                
    $minus--;
            }
            else if(
    $minus 0)
            {
                
    $array[$i+$minus] = $array[$i];
                unset(
    $array[$i]);
            }
        }
        
        
    $return implode(','$array);
        echo 
    $return;  
    ?>
    да я скрипт m0Hze тоже работает
     
  4. restart_05

    restart_05 Member

    Joined:
    5 May 2009
    Messages:
    164
    Likes Received:
    6
    Reputations:
    0
    m0Hze работает я не отрицаю, но вот последние чет не удаляет..
     
  5. restart_05

    restart_05 Member

    Joined:
    5 May 2009
    Messages:
    164
    Likes Received:
    6
    Reputations:
    0
    Поправил :) Спасибо всем!
     
  6. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    SeNaP Вообще-то второй вариант не выведет никогда строку хелло. Переменная $a не может быть больше либо равна 1 и при этом выполнится !isset()
     
    _________________________
  7. roxblnfk

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

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    ну вы даёте :)

    > Есть таблица со строкой name. В ней находятся числа через запятую 1,5,54,234 и т.д. Как средствами php можно удалить число 54 из данной строки.

    m0Hze, кодом
    PHP:
    $return str_replace($need.',','',$str); 
    ты можешь удалить что надо + обрезать похожее на него, например в строке $str='1,2,3,12,13,23'; надо удалить $need='2';
    В итоге будет 1,3,113,23 (откуда тут 113 оО? и почему вместо пяти чисел тут их четыре..)
    Ну и, как было замечено, число в конце строки не удаляет.

    WNZRS, ты вобще извращенец :) перевести строку в массив уже другая методика,
    но зачем перебирать массив и выравнивать ключи вручную, когда есть стандарные функции?
    зачем делать чтото типа
    $array[$i+$minus] = $array[$i]; , если после всех операций по удалению можно заюзать, например, array_values() и взять индексный массив
    (только зачем это надо, если implode() работает с ассоциативными массивами?)

    Можно исправить скрипт m0Hze, например, изменив так:
    было:
    PHP:
     $return str_replace($need.',','',$str); 
    стало:
    PHP:
    $return substr(str_replace(','.$need.',',',',','.$str.','),1,-1);
    (но в учёт того, что я не знаю, как работает str_replace на низком уровне, а разбираться лень, то для гарантии того, что будут вырезаны ВСЕ требуемые числа, даже записанные подряд, можно использовать функцию два раза сразу)
    PHP:
    $return substr(str_replace(','.$need.',',',',str_replace(','.$need.',',',',','.$str.',')),1,-1);
    (тут в кавычках 2 пробела сами появляются, их убить надо :) )
    или
    PHP:
    $return substr(str_replace(array(','.$need.',',','.$need.','),',',','.$str.','),1,-1);
     
    #15107 roxblnfk, 10 May 2010
    Last edited: 10 May 2010
  8. LStr1ke

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

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    А так можно?
    PHP:
    <?php
    $string 
    "1,5,154,32,123,132";
    $need "32";
    echo 
    preg_replace("#(^\d|\,|^)".$need."(\,|^|^\d)#",",",$string);
    ?>
     
  9. roxblnfk

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

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    да вы чё хоть...

    LStr1ke, не знаю, зачем ты полез в регулярки, это же всё медленнее работает.
    Но, если следовать твоим суждениям унифицировать алгоритм под любой разделитель, то проще написать в регулярках.
    Допустим. Даже не смотря на кривость того, что если разделитель будет не запятой, то при замене числа на его месте появится именно запятая :)
    Признаюсь, я плохо шарю в регулярках, поэтому, если это твой код, задам тебе вопрос:
    из твоей регулярки "#(^\d|\,|^)".$need."(\,|^|^\d)#"
    что означает |^ во второй скобке? т.е. неэкранированный символ ^ в начале выбора без дальнейших символов.. (в первой скобке такой вариант чудом помогает убить нужное число в начале строки :) )
    в первых скобках у тебя ^\d для чего? :) возьми строку $string = "132,1,5,154,32,123,32"; и эта последовательность уничтожит 132
    В конце строки число 32 твоим алгоритмом не убивается.

    На мой взгляд, регулярки надо использовать только тогда, когда без них никак (т.е. можно, но не выгодно ни по времени коддинга ни по производительности)
    Вобщем, вот мой вариант, где разделяющие символы - любые, кроме десятичных цифр, и заменено оно будет на левый разделитель от данного числа
    PHP:
    echo substr(preg_replace("/(\D)".intval($need)."(\D)/","\${1}",'®'.$string."\n"),1,-1);
    И опять же, функцию надо будет взять не один раз, т.к. строку $string = "1^5^154^32^32^123^132"; полностью от числел 32 она не очистит за 1 раз
    (либо править регулярку на подобные нонсенсы, либо брать функцию дважды, а то и трижды :) вобщем по циклу через while... но это если число более 3х раз подряд в строке, тут проще разбить на массив)
    так на строку $string = "32б1^5-154^32 32,32х32 32=32_32!32й123^132ы32"; нужно применить функцию 4 раза :)

    остался ещё вариант перебора строки по байтам, этого ещё ни кто не предложил :) хотя самый эффективный метод, имхо
     
    #15109 roxblnfk, 10 May 2010
    Last edited: 10 May 2010
  10. AtomoS

    AtomoS New Member

    Joined:
    17 Feb 2010
    Messages:
    88
    Likes Received:
    1
    Reputations:
    0
    существует алгоритм, который добавляет в переменную данные:
    после добавление всё это дело выводится через echo и получается следушая картина:
    а теперь вопрос как мне вывести только 1ую надпись?
     
  11. zavra

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

    Joined:
    12 Mar 2008
    Messages:
    87
    Likes Received:
    48
    Reputations:
    23
    привет! мне нужно сделать, чтобы когда человек заходил на страницу, отправлялся бы запрос на другой сервер, и действие на том сервере приосходило бы от его имени. например, в случае с ГЕТом, можно добавить ссылку на изображение вида "vk.com/change_settings.php?name=lol". можно как-то так же просто сделать это через ПОСТ, будет ли CURL работать в данном случае (ведь вроде как тогда запрос будет идти от сервера, а не от пользователя)?
     
  12. wildshaman

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

    Joined:
    16 Apr 2008
    Messages:
    477
    Likes Received:
    483
    Reputations:
    99
    Курл не пройдет.
    Обычный гет тоже не пройдет, везде нужны хеши.
    Надо иметь пассивную XSS и написать скрипт, который сам будет выдирать хеш, подставлять и делать запрос - все через пассивку.
     
  13. zavra

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

    Joined:
    12 Mar 2008
    Messages:
    87
    Likes Received:
    48
    Reputations:
    23
    там нету хэша, я не про контакт, просто для примера.
    есть вариант сделать флешку, впринципе просто, но слишком палевно
     
  14. Kusto

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

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    блин ты спрашиваеш про обыкновенное csrf здесьб почитай что умные люди пишут)))) http://www.inattack.ru/article/552.html
     
  15. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    zavra, попробуй создай форму с экшном куда тебе нужно. И в событии onload страницы делай сабмит этой формы...
     
  16. foxxx1234

    foxxx1234 Member

    Joined:
    26 Nov 2008
    Messages:
    0
    Likes Received:
    7
    Reputations:
    0
    Копирование альбомов из группы

    В общем есть скрипт который копирует альбомы из группы вк. Проблема в том, что копирует он только первые 20 фотографий из каждого альбома.
    Помогите подправить чтобы копировал весь альбом.

    Вот ссылка на сам скрипт.

    http://slil.ru/29109993
     
    #15116 foxxx1234, 10 May 2010
    Last edited: 10 May 2010
  17. SeNaP

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

    Joined:
    7 Aug 2008
    Messages:
    378
    Likes Received:
    69
    Reputations:
    20
    Почему вот этот код в Ubuntu через php-cli выполняется нормально
    PHP:
    <?php
    set_time_limit
    (0);
    $file file("basewebstream.txt");
    $fp fopen("result.txt","a");

    function 
    chek($exp){
        global 
    $expl;
        global 
    $i;
        global 
    $fp;
        global 
    $s;
    $ch curl_init("http://crackfor.me");
    curl_setopt($chCURLOPT_POST1);
    curl_setopt ($chCURLOPT_USERAGENT"Извените но я бот :)"); 
    $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_POSTFIELDS'hash='.$exp.'&act=find');
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    $result curl_exec($ch);
    preg_match('#<b>(.*)</b>#iU',$result,$res[$i]);
    if(!
    preg_match("#-#i",$res[$i][1])){
    print 
    $expl[2].":".$res[$i][1]."\n";
    print 
    "Всего Гудов:".$s."\n";
    $s++;
    fwrite($fp,$expl[2].":".$res[$i][1]."\n");
    }

    curl_close($ch);

    }
    /////////////////////////////////////
    $i 0;
    $r 0;
    $s 1;
    foreach(
    $file as $pass){
    $expl explode(":",$pass);

    $expl[2] = str_replace("\n","",$expl[2]);
    $expl[2] = str_replace("\r","",$expl[2]);
    $expl[2] = str_replace("\t","",$expl[2]);

    chek($expl[1]);
    $i++;
    }
    fclose($fp);

    ?>
    А в Windows7 через php-cli просто не хочет.
    Пробую запускаю
    Code:
    C:\Users\Senap\>php pars.php
    
    И возвращает
    Code:
    C:\Users\Senap\>
    
    И result.txt пустой
    то время как
    PHP:
    <?php echo "TEST CLI"?>
    Выодит TEST CLI
    Т.е. php-cli работает, а скрипт запускаться не чохет :(
     
  18. Failure

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

    Joined:
    21 Sep 2008
    Messages:
    179
    Likes Received:
    46
    Reputations:
    16
    курл на винде установлен?
     
    1 person likes this.
  19. z-kzn-z

    z-kzn-z New Member

    Joined:
    17 Apr 2010
    Messages:
    28
    Likes Received:
    4
    Reputations:
    0
    SeNaP, а в Windows 7 в php расширение curl стоит/включено? и включен ли вывод ошибок в php.ini? (странно, что в таком случае нет ошибок даже)..
     
    1 person likes this.
  20. SeNaP

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

    Joined:
    7 Aug 2008
    Messages:
    378
    Likes Received:
    69
    Reputations:
    20
    http://localhost/tes.php
    PHP:
    <?php
    $ch 
    curl_init('http://php.su');
    curl_exec($ch); // выполняем запрос curl - обращаемся к сервера php.su
    curl_close($ch);
    ?>
    Работет.
    И ошибки тоже выводятся.
    :confused:
     
Thread Status:
Not open for further replies.