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

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

Thread Status:
Not open for further replies.
  1. Фараон

    Фараон коКотэ Of Antichat

    Joined:
    7 Nov 2010
    Messages:
    153
    Likes Received:
    105
    Reputations:
    83
    2Dimaus,
    PHP:
    if($_POST['ID'])
    {
    $db=new db();
    $result=$db->execute("SELECT * FORM user WHERE ID=".$_POST['ID']);
    Ето иънекция наглая.
    Правильнее будет так:
    PHP:
    if($_POST['ID'])
    {
    $db=new db();
    $id mysql_real_escape_string($_POST['ID']);
    $result=$db->execute("SELECT * FORM user WHERE ID='$id');
     
    2 people like this.
  2. Boolean

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

    Joined:
    5 Sep 2010
    Messages:
    147
    Likes Received:
    83
    Reputations:
    78
    тогда уж intval а не ескейп стринг
     
  3. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    Помогите(( написал код, суть такая : функция получает текст(число) и ей например из числа 123456 нужно сделать 1<b></b>23 45<i></i>6 тоесть случайным образом натыкать проблелов,тегов с определенным процентом вероятности..

    вот код :
    Прокомментировал почти все,чтоб знали что я хотел добиться в той или инной строке

    PHP:
    function rend($strIn){ 
    $array =  array ('<b></b>','<i></i>','<html></html>',' ',' ',' ');
       
    $chance 100//шанс замены в процентах
    $s =    strlen($strIn);
    echo 
    $s."<br>";    // выводим кол-во символов
       
    for($i 0$i $s$i++){  // в цикле пробегаем нужное кол-во раз

             
    if(rand(1,100) <= $chance) {
             
    $randd rand(0,6); // случайно выбираем какой эллемент массива будет вставлен
             
    if(intval($strIn[$i])) { // только для цифр
             
    $pos strpos($strIn,$strIn[$i]); // находим позицию этого символа, т.к при предыдущей замене по $i работать нельзя,пояляются лишние вставки
            
    if ($pos != false) { // если нашли
             ///////////////////////////////////////////////
             
    $replace $strIn[$pos].$array[$randd]; // создаем то чем заменим найденный символ
            
    $strIn str_replace($strIn[$pos],$replace,$strIn,$count); // заменяем
            ////////////////////////////////////////////////    
            
    }

    }        
            }
       } 
       return 
    $strIn
    }

    $s"123123[code]8626546[/code]";

    $source preg_replace"#\[code\](.+?)\[/code\]#ies""rend( '\\1' )"$s );
    echo 
    $source;


    Проблема в том,что заменяет только первое число (и одинаковые с ним две шестерки,три тройки и т.д) , тоесть при первой замене у нас допустим в строке становится не 6 символов а 12 а между уже вставленными тегами нельзя.
    Уже мозг кипит,но уверен решение под носом лежит(((( просто не тем методом может пошел
     
  4. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    -=Zhenek=-
    PHP:
    function rend($strIn)
    {
            
    $array =  array ('<b></b>','<i></i>','<html></html>',' ');
            
    $chance 100//шанс замены в процентах
            
    $s =    strlen($strIn);
            echo 
    $s."<br>";    // выводим кол-во символов 
            
    $strOut '';
            for (
    $i=1;$i<$s;$i++)
            {
                    if(
    rand(1,100) > $chance) continue;
                    
    $ins $array[array_rand($array)];
                    
    $strOut $ins.$strIn[$s-$i].$strOut;
            }
            return 
    $strIn[0].$strOut;
    }
    $s"123123[code]8626546[/code]";

    $source preg_replace"#\[code\](.+?)\[/code\]#ies""rend( '\\1' )"$s );
    echo 
    $source;

    Но я бы еще заменил preg_replace с флагом E на preg_replace_callback. Или же сделал регулярку более строгой, то есть принимающей только числа внутри
    Code:
    
    
     
    _________________________
    #17604 Gifts, 8 Feb 2011
    Last edited: 8 Feb 2011
    1 person likes this.
  5. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Загадка для профи.
    Мне нужна функция, допустим по вызову echo getNum(7); она бы мне вывела 12345677654321.
    Функция не должна в себя включать никакие while/for
     
  6. Chaak

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

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    и еще разрешено пользоваться только знаком +
    и никаким другим( - , *, /), а также аналогичными функциями.
     
  7. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Isis
    PHP:
    function getNum($val)
    {
    return 
    '12345677654321';
    }
    echo 
    getNum(7);
    Chaak
    PHP:
    function getNum($val)
    {
    $val $val 1;
    return 
    '12345677654321';
    }
    echo 
    getNum(7);
     
    _________________________
  8. Chaak

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

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    мда.. а по-нормальному, без return '123321';
     
  9. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    facepalm
    Так не интересно)
     
  10. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Isis, Chaak будьте более точны в написании задания. Мое решение ему не противоречит. Ну хотите можно сложным путем формировать палиндромы из чисел так:
    PHP:
    function getNum($val)
    {
    return 
    implode('',range(1,$val)+range($val+$val,1));
    }
    echo 
    getNum(7);
     
    _________________________
  11. Chaak

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

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Необходимо написать функцию, которая логически(без прямого вывода(echo '1234554321';))выводит на экран
    Без использования каких-либо посторонних функций и операторов.
    Разрешается пользоваться только операцией сложения, сравнения и функцией вывода.
     
    #17611 Chaak, 8 Feb 2011
    Last edited: 8 Feb 2011
  12. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    492
    Likes Received:
    186
    Reputations:
    5
    я бы так сделал

    PHP:
    <?php
        
    function getNum($count)
         {
            return  
    join(""array_merge(range(1$count), range($count1)));
         }
        echo 
    getNum(7);    
    ?>
     
  13. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66

    Code:
    def GetValue(f):
        mas = ['1','2','3','4','5','6','7','8','9']
        count = mas.index(f)
        new_one  = mas[:count]
        new_one.reverse()
        return mas[:count+1] + new_one
    
    print GetValue('3')
    #['1', '2', '3', '2', '1']
    print GetValue('9')
    #['1', '2', '3', '4', '5', '6', '7', '8', '9', '8', '7', '6', '5', '4', '3', '2', '1']
    

    ыыы), это для строкового варианта, с цифрами все гораздо легче, range,xrange
     
  14. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Раз нельзя использовать ни присвоения, ни конкатенации строк, то будет так
    PHP:
    function getNum($val1$val2=0)
    {
      if (
    $val1<=$val2) {echo $val1;return;}
      if (
    $val2!=0) echo $val2;
      echo 
    getNum($val1, ++$val2);
      echo 
    $val2;
      return;
    }
    echo 
    getNum(7);
    Сейчас окажется что и рекурсия чем-то не угодила.

    De-visible на пхп как-то не похоже, не находите? И функции использовать нельзя
     
    _________________________
    1 person likes this.
  15. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    Code:
    def Dex(txt):
       s = "123456789"
       return s[:s.find(txt)+1]+s[:s.find(txt)][::-1]
    
    
    print Dex('5')
    #123454321
    Без использования функций. =)
     
    1 person likes this.
  16. Chaak

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

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Gifts, можно, но сложно.
    De-Visible, ок, но были использованы сторонние функции... Немного не то.

    PHP:
    function aaa($a)
    {
        if(
    $a == 6)
            return;
        echo 
    $a;
        
    aaa($a 1);
        echo 
    $a;
    }
    aaa(0);
    :D
     
    1 person likes this.
  17. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Chaak по заданию в функцию передается не ноль, а 7. Вот только у меня ошибка, что использую прединкремент, сейчас исправлю и получится почти то же что у вас

    De-visible методы класса - это суть функции
     
    _________________________
    #17617 Gifts, 8 Feb 2011
    Last edited: 8 Feb 2011
  18. Chaak

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

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    PHP:
    <?php

    function aaa($a$b)
    {
        if(
    $a == $b)
            return;
        echo 
    $a;
        
    aaa($a 1$b);
        echo 
    $a;
    }

    aaa(06);


    ?>
    Заданием было написать функцию!
     
    1 person likes this.
  19. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    а я понял так, что может передаваться любая цифра из диапазона, вообщем я справился без использования сторонних функции.
    Алгоритм тоже прост.
     
  20. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    PHP:
    <?php
        
    function test($a 1)
        {
            if(
    $a == 50) return;
            
            for (
    $i 0$i $a;$i++)
                echo
    '.';
            echo 
    '<br/>';

            
    test($a 1);
            
            for (
    $b 0$b < ($a 1);$b++)
                echo
    '.';
            echo 
    '<br/>.';
        }

        
    test();
    PHP:
    .
    ..
    ...
    ....
    .....
    ......
    .......
    ........
    .........
    ..........
    ...........
    ............
    .............
    ..............
    ...............
    ................
    .................
    ..................
    ...................
    ....................
    .....................
    ......................
    .......................
    ........................
    .........................
    ..........................
    ...........................
    ............................
    .............................
    ..............................
    ...............................
    ................................
    .................................
    ..................................
    ...................................
    ....................................
    .....................................
    ......................................
    .......................................
    ........................................
    .........................................
    ..........................................
    ...........................................
    ............................................
    .............................................
    ..............................................
    ...............................................
    ................................................
    .................................................
    ..................................................
    ..................................................
    .................................................
    ................................................
    ...............................................
    ..............................................
    .............................................
    ............................................
    ...........................................
    ..........................................
    .........................................
    ........................................
    .......................................
    ......................................
    .....................................
    ....................................
    ...................................
    ..................................
    .................................
    ................................
    ...............................
    ..............................
    .............................
    ............................
    ...........................
    ..........................
    .........................
    ........................
    .......................
    ......................
    .....................
    ....................
    ...................
    ..................
    .................
    ................
    ...............
    ..............
    .............
    ............
    ...........
    ..........
    .........
    ........
    .......
    ......
    .....
    ....
    ...
    .
    Красота!
     
    #17620 banned, 8 Feb 2011
    Last edited by a moderator: 8 Feb 2011
Thread Status:
Not open for further replies.