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

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

Thread Status:
Not open for further replies.
  1. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Как узнать все название и значение элементов массива, и выписать их по отдельность???
     
  2. Deathdreams

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

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    PHP:
    $array = array('1' => '2');

    $keys array_keys($array);
    $values array_values($array);

    foreach( 
    $keys as $kn => $key )
          echo 
    "Название - {$key}, значение - {$values[$kn]}";
     
    1 person likes this.
  3. $now

    $now Member

    Joined:
    27 Apr 2009
    Messages:
    75
    Likes Received:
    9
    Reputations:
    3
    Deathdreams
    Зачем так сложно?
    PHP:
    foreach( $array as $key => $value ) {
             echo 
    "Ключ - $key, значение - $value"
    }
    По моему проще.
     
    #14903 $now, 23 Apr 2010
    Last edited: 23 Apr 2010
    1 person likes this.
  4. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    А где в PHP функция delete как в делфи???
     
  5. $now

    $now Member

    Joined:
    27 Apr 2009
    Messages:
    75
    Likes Received:
    9
    Reputations:
    3
    Заменяем на пусто с 3-го по 5-ый символы
    PHP:
    substr_replace($string""35);
     
  6. Gin

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

    Joined:
    11 Sep 2008
    Messages:
    133
    Likes Received:
    7
    Reputations:
    4
    Тема такая нужно написать чекер емалов для yahoo собстно написал, код но проблема в том что пост запрос не отправляеться. Я не давно только начал работать с курл. Есть две функции как видно из листинга первая получает значения вторая отправляет, но вот если первая работает нормально, то вторая отказываеться вообще. Да и в куки помоему вообще ничего не попадает.
    Собственно код не пинайте сильно
    Code:
    <?php
    $cookiefile = tempnam("/tmp", "cookies");
    $refer="https://login.yahoo.com/config/login_verify2?&.src=ym";
    $username="login";
    $password="pass;
    $url="https://login.yahoo.com/config/login?";
    $agent="Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
    
    function GetData($url){
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt($ch, CURLOPT_REFERER, $refer);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $result = curl_exec ($ch);
    $answer=preg_match("#hash2(.*?)\<table#is",$result,$match);
    preg_match_all('#name="(.*?)"#is',$match[0],$key_match);
    preg_match_all("#value=\"(.*?)\"#is",$match[0],$value_match);
    foreach($key_match[1] as $key)
    foreach($value_match[1] as $value)
    $post_array[$key]=$value;
    $post_array['login']=$username;
    $post_array['passwd']=$password;
    $post_array['.Save']="Sign+In";
    $post=http_build_query($post_array);
    curl_close ($ch); 
    return $post;	
    }
    function SendData($url,$post,$refer){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS,$post); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_REFERER, $refer);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $result = curl_exec ($ch);
    curl_close ($ch); 
    
    return $result;
    }
    $post=GetData(url);
    $data=SendData($refer,$post,$refer);
    echo $data;
    ?>
    
     
  7. Deathdreams

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

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    Gin, необходимо сделать global переменных.
    пример для твоего кода:

    Code:
    function SendData($url,$post,$refer){
    global $cookiefile, $agent;
    //code
    }
    Код кривой, на ачате я когда-то выкладывал класс для проверки мыл на валид, поищи.
     
  8. AtomoS

    AtomoS New Member

    Joined:
    17 Feb 2010
    Messages:
    88
    Likes Received:
    1
    Reputations:
    0
    Есть функция для запросов в БД:
    PHP:
    function sql($query ""$param = array())
    {
        if (!
    is_array($param) || count($param) == 0)
        {
            return 
    mysql_query($query);
        }
        else
        {
            foreach (
    $param as $key => $val)
            {
                
    $query str_replace("{".$key."}"$val$query);
            }
            return 
    mysql_query($query);
        }
    }
    также присутствуют 2 функции от инъекций:
    PHP:
    function phpInjection($data)
    {
        
    $filter = array("\\""'"","";""--""-""%20""%27"" ""`""=""%");
        
    $filter_data str_replace($filter""$data);
        return 
    $filter_data;
    }
    PHP:
    function sqlInjection($data)
    {
        
    $filter = array("select""delete""union""update""insert");
        
    $filter_data str_replace($filter""strtolower($data));
        return 
    $filter_data;
    }
    собственно возможно ли объеденить все функции в 1?
    чтобы запросы были с проверкой на безопастность...
     
  9. pento

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

    Joined:
    3 Jul 2006
    Messages:
    126
    Likes Received:
    24
    Reputations:
    -1
    Да, не изобретать велосипел и использовать встроенные механизмы нормальной работы с БД. google://php pdo mysql
    http://phpfaq.ru/slashes#prepared
     
  10. j0ker13

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

    Joined:
    28 Jul 2008
    Messages:
    199
    Likes Received:
    16
    Reputations:
    5
    PHP:
    function filtr($data)
    {
        
    $filter = array("select""delete""union""update""insert","\\""'"","";""--""-""%20""%27"" ""`""=""%");
        
    $filter_data str_replace($filter""strtolower($data));
        return 
    $filter_data;
    }  

     function 
    sql($query ""$param = array())
    {
        if (!
    is_array($param) || count($param) == 0)
        {
            return 
    mysql_query(filtr($query));
        }
        else
        {
            foreach (
    $param as $key => $val)
            {
                
    $query str_replace("{".$key."}"$val$query);
            }
            return 
    mysql_query(filtr($query));
        }
    }
    tak?
     
  11. wildshaman

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

    Joined:
    16 Apr 2008
    Messages:
    477
    Likes Received:
    483
    Reputations:
    99
    Такое обходится элементарно
    selselectect
    /*
    ()
     
  12. phpdreamer

    phpdreamer Member

    Joined:
    26 Jul 2009
    Messages:
    522
    Likes Received:
    86
    Reputations:
    19
    ну а также UnIoN , upDate и т.п.
    нольбайт тож пройдет...

    короче, mysql_real_escape_string() в помощь...
    только логику скрипта придется переделывать
     
  13. h00lyshit!

    h00lyshit! [From Nobody To Root]

    Joined:
    10 Sep 2009
    Messages:
    289
    Likes Received:
    290
    Reputations:
    195
    AtomoS, твоя защита легко обходится, зачем изобретать велосипед, для этого есть соотвествующие функции.
    Числовые поля int, текстовые mysql_real_escape_string() + обрамлять в кавычки. При выводе всех значений на экран обрабатывать htmlspecialchars, вот и все, и ненужно никаких str_replace.
     
    #14913 h00lyshit!, 24 Apr 2010
    Last edited: 6 Feb 2011
  14. Gin

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

    Joined:
    11 Sep 2008
    Messages:
    133
    Likes Received:
    7
    Reputations:
    4
    2Deathdreams and 2All
    Объявил как global так и не решило задачу. Проглядел все твои месаги так и не нашел класса для верификации мыл. Код я набросал за 15 мин, мог бы сделать и ООП, но для тмоей задачи это из пушки по воробъям, если криво-та еще где-то укажи, сам не люблю гавно код. Проблема все таже не отправляеться пост запрос, не получаю куки.
     
  15. wildshaman

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

    Joined:
    16 Apr 2008
    Messages:
    477
    Likes Received:
    483
    Reputations:
    99
    Смена регистра не пройдет, в коде strtolower
     
  16. phpdreamer

    phpdreamer Member

    Joined:
    26 Jul 2009
    Messages:
    522
    Likes Received:
    86
    Reputations:
    19
    упс, не заметил

    тогда пройдет uni/**/on
     
  17. Radical Edward

    Radical Edward New Member

    Joined:
    24 Jan 2010
    Messages:
    21
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте, наверняка этот вопрос уже задавался, однако, после двух часов поиска, мои успехи ни чуть не изменились.
    Заранее скажу, что есть два скрипта : "ВВод" и "Вывод"

    Проблемма стара как мир : вставить в MySQL базу кириллические символы.
    Суть в том, что я хочу вставить непосредственно со скрипта ВВОДА( написанном на php).

    Например, у меня есть "<input type='text'...>", откуда я хочу вытянуть строку и закинуть ее в таблицу.

    Кодировка таблицы : utf8_general_ci (пробовал и cp1251)
    Кодировка поля в таблице - такая же (Пробовал и cp1251)
    mysql_query('SET NAMES cp1251');(или utf8) - поставил сразу после подключения.

    если вставлять через PHPMyAdmin - все чудесно вставляется и отображается(как в самом админе, так и в скрипте вывода).

    Если вставлять через скрипт ввода, вытягивая строку из текстбокса, то админ отображает нечто такое : "&sup3;&sup3;&sup3;&sup3;", а скрипт вывода : "ûâàûâàûâ".


    ЧТО Я ДЕЛАЮ НЕ ТАК, на что обратить внимание и вообще...как справиться с проблеммой.

    ___
    version mysql 5,php 5
    __
    в му.ini везде кодировка стоит cp1251
     
    #14917 Radical Edward, 24 Apr 2010
    Last edited: 24 Apr 2010
  18. Failure

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

    Joined:
    21 Sep 2008
    Messages:
    179
    Likes Received:
    46
    Reputations:
    16
    PHP:
    <?php
    header
    ("Content-Type: text/html; charset=utf8");
    //....коннект к бд
    mysql_query("SET NAMES utf8");
    ?>
    <form action="<?=$_SERVER['PHP_SELF'];?>" method="POST">
    <input type=text name="str" value="" ><input type=submit value="В бд">
    </form>
    <?php
    if(!empty($_POST['str']) && !is_array($_POST['str'])) {
      
    $result mysql_query("INSERT INTO `table`(str) VALUES('".mysql_real_escape_string($_POST['str'])."')");
      if(
    $result == 1) echo "Успешно запостилось";
    }
    ?>
    не?
     
  19. phpdreamer

    phpdreamer Member

    Joined:
    26 Jul 2009
    Messages:
    522
    Likes Received:
    86
    Reputations:
    19
    снестите таблицу, создайте ее заново из бэкапа (пустую, с указаной кодировкой utf-8_general_ci).
    а дальше следуйте инструкциям:
    источник
     
  20. Failure

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

    Joined:
    21 Sep 2008
    Messages:
    179
    Likes Received:
    46
    Reputations:
    16
    не находишь бредом указывать кодировку 2 раза? =\
    это всеравно что
    PHP:
    <?php
    header
    ("Content-Type: text/html; charset=utf8");
    ?>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    ...
     
Thread Status:
Not open for further replies.