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

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

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

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

    Joined:
    29 May 2006
    Messages:
    97
    Likes Received:
    19
    Reputations:
    0
    Добрый вечер. Подскажите пожалуйста какой командой иил связкой команд можно на php сделать страницу, которой задается id, и в соответствии с этим id, поисходит переход по соответствующему линку.... ? буду благодарен любым подсказкам
     
  2. 9822

    9822 Banned

    Joined:
    3 Aug 2005
    Messages:
    273
    Likes Received:
    29
    Reputations:
    8
    типо

    {
    printf("<a href='view_link.php?id=%s'>%s</a>",$myrow["id"],$myrow["title"]);
    }
    while()

    ты про это Gadik?
     
    1 person likes this.
  3. Gadik

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

    Joined:
    29 May 2006
    Messages:
    97
    Likes Received:
    19
    Reputations:
    0
    не совсем, к примеру вызывает юзер страницу с параметром script.php?id=50 и эта страница выбирает из массива линк, который соотвествует id = 50 и пересылает юзера на этот линк, т.е. чтобы происходил переход на линк, а не выводился на экран..
     
  4. SQLHACK

    SQLHACK Остались только слоны

    Joined:
    27 Sep 2006
    Messages:
    437
    Likes Received:
    372
    Reputations:
    407
    2 Gadik
    PHP:
    <?php
    if (isset($_GET['id']) && is_numeric($_GET['id'])){
        switch(
    $_GET['id']){
            case 
    1:
                
    redirect("тут твой линк 1");
                break;
            case 
    2:
                
    redirect("тут твой линк 2");
                break;
            default:
                
    redirect("тут твой линк, тот который выдаётся если ид ты не определил");
                break;
        }
    }else{
        
    redirect("а тут твой линк, который выдаётся если в ид запихали хрень какую то");
    }

    function 
    redirect($url){
        
    header('Location: '.$url);
        exit();    
    }
    ?>
     
    _________________________
  5. SQLHACK

    SQLHACK Остались только слоны

    Joined:
    27 Sep 2006
    Messages:
    437
    Likes Received:
    372
    Reputations:
    407
    вариант номер 2 для Gadik

    PHP:
    <?php
    $linkarray 
    = array(
                        
    => "http://www.yandex.com/1.php",
                        
    => "http://www.yandex.com/2.php"
                       
    );

    if (isset(
    $_GET['id']) && is_numeric($_GET['id'])){
        if(isset(
    $linkarray[$_GET['id']])){
            
    redirect($linkarray[$id]);
        }else{
            
    //не определено у тя такого
        
    }
    }else{
        
    redirect("а тут твой линк, который выдаётся если в ид запихали хрень какую то");
    }

    function 
    redirect($url){
        
    header('Location: '.$url);
        exit();
    }
    ?>
    Немного поменял скрипт , вот держи
     
    _________________________
    #9665 SQLHACK, 16 Apr 2009
    Last edited: 16 Apr 2009
    1 person likes this.
  6. Gadik

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

    Joined:
    29 May 2006
    Messages:
    97
    Likes Received:
    19
    Reputations:
    0
    а, пасибо, второй вариант мне более понятен, смогу доделать)) спс большое за помощь) буду пробовать



    ... не происходит переход по линкам.... скрипт не менял так и залил, должен же работать в таком виде? ..


    а именно срабатывает условие там где

    //не определено у тя такого

    вообщем false выдает, не могу понять почему...

    разобрался, исправил pos !== false на pos !== "" и вроде работает
     
    #9666 Gadik, 16 Apr 2009
    Last edited: 16 Apr 2009
  7. shellz[21h]

    shellz[21h] Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    311
    Likes Received:
    68
    Reputations:
    6
    Доброе время суток!
    Имеются записи в формате:

    site.com/?id=1&page=end
    site.com/?id=2&page=end
    site.com/?pp=1&page=main&sort=1
    site.com/?pp=2&page=main&sort=1
    etc...

    Подскажите пожалуйста, как убрать повторые записи, нужно чтоб вывдило, вот так:
    site.com/?id=1&page=end
    site.com/?pp=1&page=main&sort=1
    тоесть, чтоб переменные не повторялись. Заранее спасибо.
     
  8. 159932

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

    Joined:
    28 Sep 2007
    Messages:
    587
    Likes Received:
    462
    Reputations:
    5
    проще всего загнать в массив и заюзать ф-ию array_unique()
    напр. если это файл print_r(array_unique(file('a.txt')));
    ну или если уже стринг print_r(array_unique(explode("\n",$string)));
     
  9. Dr.Frank

    Dr.Frank Elder - Старейшина

    Joined:
    31 Jul 2002
    Messages:
    301
    Likes Received:
    72
    Reputations:
    12
    array_unique не справится с этой задачей, т.к. в приведенном примере не полностью одинаковые строки:
     
  10. shellz[21h]

    shellz[21h] Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    311
    Likes Received:
    68
    Reputations:
    6
    array_unique() , в этому случае не подходит.
    Dr.Frank, правильно понил вопрос)
     
  11. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Тогда лучше пример такого файла ТОЧНЫЙ (или сказать, что точно так, как в вопросе, только хост заменен) + идут ли такие вот записи подряд или нет (одна под другой, или может быть случайное расположение)

    PHP:
    <pre>
    <?php
    $str1 
    "site.com/?id=1&page=end";
    $str2 "site.com/?id=2&page=end";
    $var1 similar_text($str1$str2, &$tmp);
    echo 
    "Совпадение в процентах: $tmp\n"// примерно 95%, 
    //значит практически идентичны, для нас по условиям., идентичны

    //Если отличие больше - значит у нас новая ссылка:
    $str1 "site.com/?id=1&page=end";
    $str2 "site.com/?pp=1&page=main&sort=1";
    $var1 similar_text($str1$str2, &$tmp);
    echo 
    "Совпадение в процентах: $tmp\n"// примерно 70% 
    //разница большая, новая уникальная ссылка (по условиям)
    ?>
    </pre>
    но в данном случае лучше всего подойдет функция Левенштейна, которая просто показывает, сколько символов надо заменить, чтобы из первой строки получить вторую, т.е. если возвращает 1 - строки АБСОЛЮТНО ИДЕНТИЧНЫ по условию задачи:

    PHP:
    <?php
    $str1 
    "site.com/?id=1&page=end";
    $str2 "site.com/?id=2&page=end";
    $var levenshtein($str1,$str2);
    echo(
    $var); // вернет 1
    ?>
    </pre>
    если строки идут не подряд такого рода, а в разброс - то файл в массив и предварительная сортировка, потом обычное построчное чтение с помощью fgets() и сравнению по Левенштейну

    т.е. по задаче конкретно примерно так выглядеть будет по идее:

    PHP:
    <pre>
    <pre>
    <?php

    $file 
    'tema1.txt'// Файл с ссылками
    $res 'tema10.txt'// Результирующий файл

    // функция для сравнения по Левенштейну
    function lev($str1,$str2) {
     
    $a levenshtein($str1,$str2);
     if (
    $a!=1) return true;
     return 
    false
    }

    // Соритруем файл с сылками
    $sort file($file);
    sort($sort);
    file_put_contents($file,$sort);
    // Начинаем отбирать "уникальные" ссылки
    $hand1 fopen($res,'w');
    $hand fopen($file,'r');
    while(!
    feof($hand)) {
     
    $buf1 trim(fgets($hand));
     
    $buf2 trim(fgets($hand)); 
     if (
    lev($buf1,$buf2)) fwrite($hand1,$buf1"\n" .$buf2 ."\r\n");
     else 
    fwrite($hand1,$buf1 "\r\n");
    }
    fclose($hand);
    fclose($hand1);
    echo 
    'Done';
    ?>
    </pre>
    Погонял щаз, на самом деле и этот вариант неправильный, т.к. будет работать только для ДВУХ подряд идущих ссылок:))) А если их таких три и больше - не сработает. Поэтому вот ПРАВИЛЬНЫЙ вариант на любое кол-во таких ссылок:

    PHP:
    <pre>
    <?php

    $file 
    'tema1.txt'// Файл с ссылками
    $res 'tema10.txt'// Результирующий файл

    // функция для сравнения по Левенштейну
    function lev($str1,$str2) {
     
    $a levenshtein($str1,$str2);
     if (
    $a==or $a==0) return false;
     return 
    true
    }

    // А теперь сравниваем каждую строку 
    //со всеми при помощи функции выше
    function Ustr ($hand$str)
    {
       
    fseek($hand,0);
       while (!
    feof ($hand)) {
          
    $temp trim(fgets($hand));
          if (!
    lev($str,$temp))
          return 
    false;
       }
       return 
    true;
    }

    // Сортируем файл с сылками
    $sort file($file);
    sort($sort);
    file_put_contents($file,$sort);
    // Начинаем отбирать "уникальные" ссылки
    $hand1 fopen($res,'w+');
    $hand fopen($file,'r');
    while(!
    feof($hand)) {
     
    $buf trim(fgets($hand));
     if (
    Ustr($hand1,$buf)) {
       
    fseek ($hand10SEEK_END);
       
    fwrite($hand1,$buf ."\r\n");
     }
    }
    fclose($hand);
    fclose($hand1);
    echo 
    'Done';
    ?>
    </pre>
     
    #9671 Pashkela, 17 Apr 2009
    Last edited: 17 Apr 2009
    1 person likes this.
  12. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Pashkela Вы как бы заблуждаетесь, если строки идентичны - левенштейн вернет 0. А для id=2 и id=13 левенштейн вернет 2. И ваш скрипт вообще возвращает неожиданные результаты))

    Code:
    Вход:
    site.com/?id=1&page=end
    site.com/?id=5&page=end
    site.com/?id=4&page=end
    site.com/?id=3&page=end
    site.com/?id=2&page=end
    site.com/?id=6&page=end
    
    Выход:
    site.com/?id=1&page=end
    site.com/?id=3&page=end
    site.com/?id=5&page=end
    
     
    _________________________
    #9672 Gifts, 17 Apr 2009
    Last edited: 17 Apr 2009
  13. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    исправил выше в посте, когда

    id=2 и id=11111

    пока хз, можно ручками задать в условиях в первой функции, универсально как - хз пока, или от процентов прыгать (similar_text())

    Хм, не такая уж и тривиальная задачка:)
     
  14. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Если нужно сравнивать только окончания ссылок

    Входной файл:
    Code:
    site.com/?id=1&page=end
    site.com/?id=2&page=end
    site.com/?pp=1&page=main&sort=1
    site.com/?pp=2&page=main&sort=1
    site.com/?dd=1&page=old
    site.com/?dd=2&page=old
    site.com/?dd=3&page=old
    site.com/?dd=4&page=old
    PHP:
    <?php
    $file 
    'tema1.txt';

    $f file_get_contents($file)."\r\n";
    preg_match_all('~^[^\?]*\?[^=]+=([^&]+)(&.+)~mi',$f,$match);
    $arr=array_values(array_combine($match[2],$match[0]));
    print_r($arr);
    echo 
    'Done';
    ?>
    С учетом ниженаписанного SQLHACK регулярка будет такая (имхо проще и быстрее будет):
    PHP:
    <?php
    $file 
    'tema1.txt';

    $f file_get_contents($file)."\r\n";
    preg_match_all('~^.*/([^=]+)=[^&]+&.+~mi',$f,$match);
    $arr=array_values(array_combine($match[1],$match[0]));
    print_r($arr);
    echo 
    'Done';
    ?> 
     
    _________________________
    #9674 Gifts, 17 Apr 2009
    Last edited: 17 Apr 2009
  15. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Ну или вот с процентным совпадением, процент задаете сами в первой функции:

    PHP:
    <pre>
    <?php

    $file 
    'tema1.txt'// Файл с ссылками
    $res 'tema10.txt'// Результирующий файл


    // функция для процентного сравнения текста
    function lev($str1,$str2) {
         
    $a similar_text($str1$str2, &$tmp);
         if (
    round($tmp,0)>=86) return false// тут 86 - 
    // - процент совпадения строк, можно менять
         
    return true
    }


    // А теперь сравниваем каждую строку со всеми при помощи функции выше
    function Ustr ($hand$str)
    {
       
    fseek($hand,0);
       while (!
    feof ($hand)) {
          
    $temp trim(fgets($hand));
          if (!
    lev($str,$temp))
          return 
    false;
       }
       return 
    true;
    }

    // Соритруем файл с сылками
    $sort file($file);
    sort($sort);
    file_put_contents($file,$sort);
    // Начинаем отбирать "уникальные" ссылки
    $hand1 fopen($res,'w+');
    $hand fopen($file,'r');
    while(!
    feof($hand)) {
     
    $buf trim(fgets($hand));
     if (
    Ustr($hand1,$buf)) {
       
    fseek ($hand10SEEK_END);
       
    fwrite($hand1,$buf ."\r\n");
     }
    }
    fclose($hand);
    fclose($hand1);
    echo 
    'Done';
    ?>
    </pre>
     
    #9675 Pashkela, 17 Apr 2009
    Last edited: 17 Apr 2009
  16. SQLHACK

    SQLHACK Остались только слоны

    Joined:
    27 Sep 2006
    Messages:
    437
    Likes Received:
    372
    Reputations:
    407
    два с половиной часа себе мозг трахал , короче если я правильно понял, то надо было сделать так: ссылки где одинаковые параметры, но просто разные значения этим параметров, их надо было выкинуть, полезно это может быть только в парсере поисковиков, где они могут выдавать пути к одним и темже скриптам, но с разными параметрами, так вот этот скрипт делает именно это.

    Ссылки пихаем в c:/2.txt ну или указываем другой файл.

    то есть из такого
    http://site.com/index.php?id=1&page=end
    site.com/?id=2&page=end
    http://site.com/?pp=1&page=main&sort=1
    http://site.com/?pp=2&page=main&sort=1
    http://site.com/?pp=3&page=notmain&sort=1

    делает такое
    http://site.com/index.php?id=1&page=end
    http://site.com/?id=2&page=end
    http://site.com/?pp=1&page=main&sort=1

    PHP:
    <?php

    $urlarr 
    file("c:/2.txt");

    $site = array();
    //создаем массив с сылками и параметрами
    foreach($urlarr as $url){
        
    $url trim($url);
        if(
    $url != ""){
            if(
    substr($url,0,7) != "http://" && substr($url,0,8) != "https://"){
                
    $url "http://".$url;
            }
            
    $x parse_url($url);
            
    $newurl $x['scheme']."://".$x['host'].$x['path'];
            
    $params explode("&"$x['query']);
            
    $pp = array();
            foreach(
    $params as $param){
                
    $p strpos($param"=");
                if(
    $p>0){
                    
    $paramname strtolower(substr($param0$p));
                    
    $paramval  strtolower(substr($param$p 1strlen($param) - $p 1));
                    if (
    strlen($paramval) == 0){
                        
    $paramval chr(0);
                    }
                }
                
    $pp[$paramname] = $paramval;
            }
            
    $site[$newurl][] = $pp;
        }
    }
    //$siteclone = $site;

    $siteclone array_map("deepvalkill"$site);
    function 
    deepvalkill($value){
        
    $value is_array($value) ? array_map('deepvalkill'$value) : $value "";
        return 
    $value;
    }
    //чистим одинаковые
    foreach($siteclone as $key=>$st){
        for(
    $z=0;$z<=count($st);$z++){
            for(
    $y=$z+1;$y<=count($st);$y++){
                if(
    $st[$z] == $st[$y]){
                    unset(
    $site[$key][$y]);
                }
            }
        }
    }

    foreach(
    $site as $key=>$st){
        foreach(
    $st as $kk=>$vv){
            
    $par "";
            foreach(
    $vv as $kk2=>$vv2){

                
    $par .= $kk2."=".$vv2."&";
            }
            
    //echo $par;
            
    $url $key."?".substr($par,0,strlen($par)-1);
            
    //выводим ссылки
            
    echo $url."\r\n";;
        }
    }


    ?>
     
    _________________________
    2 people like this.
  17. Byrger

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

    Joined:
    7 Mar 2008
    Messages:
    521
    Likes Received:
    26
    Reputations:
    -4
    Как через <input type="file" name="file"> приняв фаил
    С помощью PHP залить его в нужную папку?
     
  18. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    гугл сломался?

    http://www.softtime.ru/scripts/upload.php
     
  19. heretic1990

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

    Joined:
    2 Jul 2008
    Messages:
    487
    Likes Received:
    182
    Reputations:
    5
    можно пример скрипта для залогинивания на сайте?
    чтоб скрипт висел на сайте как бот.
     
  20. Byrger

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

    Joined:
    7 Mar 2008
    Messages:
    521
    Likes Received:
    26
    Reputations:
    -4
    PHP:
       if($_FILES["90.jpg"]["size"] > 1024*3*1024)
       {
         echo (
    "Размер файла превышает три мегабайта");
         exit;
       }
       if(
    copy($_FILES["90.jpg"]["tmp_name"],
         
    "c:/temp/".$_FILES["90.jpg"]["name"]))
       {
         echo(
    "Файл успешно загружен <br>");
         echo(
    "Характеристики файла: <br>");
         echo(
    "Имя файла: ");
         echo(
    $_FILES["90.jpg"]["name"]);
         echo(
    "<br>Размер файла: ");
         echo(
    $_FILES["90.jpg"]["size"]);
         echo(
    "<br>Каталог для загрузки: ");
         echo(
    $_FILES["90.jpg"]["tmp_name"]);
         echo(
    "<br>Тип файла: ");
         echo(
    $_FILES["90.jpg"]["type"]);
       } else {
          echo(
    "Ошибка загрузки файла");
       }
    Ошибка загрузки файла
    Пробовал писать полный путь
     
Thread Status:
Not open for further replies.