[Генератор Рендомных чисел] Сервис сокращения ссылок

Тема в разделе "PHP", создана пользователем AsanBosam, 28 окт 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. AsanBosam

    AsanBosam Постоялец

    Регистр.:
    1 мар 2009
    Сообщения:
    139
    Симпатии:
    11
    Доброе время суток!
    Я бы хотел прикрутить генератор рендомных чисел к этому скрипту
    Перейти по ссылке
    Так как по умолчанию скрипт генерирует ссылки подобного вида "http://site.ru/77/" а хотелось бы 5-6 рендомных число\буквенных значений (Перейти по ссылке).
    Вот часть кода.
    PHP:
    <?php
        define
    ('mysql_hostname''localhost');
        
    define('mysql_username''XXXXX');
        
    define('mysql_password''XXXXX');
        
    define('mysql_database''XXXXX');
        
    ob_start('relink');
        
    $root "http://$_SERVER[HTTP_HOST]ereg_replace('/$'''dirname($_SERVER['PHP_SELF'])) . '/';
        
    $action $_GET['action'] ? $_GET['action'] : ($_POST['action'] ? $_POST['action'] : '');
        
    $connection = @mysql_connect(mysql_hostnamemysql_usernamemysql_password) && @mysql_select_db(mysql_database) || die('<code>' mysql_error() . '</code>');
        switch (
    $action) {
            case 
    'generate_url':
                
    $parsed = @parse_url($_POST['url']);
                if (
    $parsed && strlen($_POST['url']) && ereg('\.'$_POST['url'])) {
                    if (
    eregi('^[a-z0-9-]+$'$_POST['tag'])) {
                        
    $tag $_POST['tag'];
                        
    $sql "SELECT * FROM `urls` WHERE `url_tag` = '$tag' OR `url_id` = '$tag'";
                        
    $q mysql_query($sql);
                        
    $n mysql_fetch_assoc($q);
                        if (
    $n) {
                            
    $cancel true;
                        }
                    }
                    if (!
    $cancel) {
                        
    $url = ($parsed['scheme'] ? '' 'http://') . (get_magic_quotes_gpc() ? mysql_real_escape_string(stripslashes($_POST['url'])) : mysql_real_escape_string($_POST['url']));
                        
    $sql "INSERT INTO `urls` (`url_location`, `url_tag`) VALUES ('$url', '$_POST[tag]')";
                        
    $q mysql_query($sql);
                        
    $id mysql_insert_id();
                        if (!
    $tag) {
                            
    $result 'Ваш <strong>новый URL</strong>: <a href="' $root $id '/">' $root .  $id '/</a> !';
                        } else {
                            
    $result 'Ваш <strong>новый URL</strong>: <a href="' $root $tag '/">' $root .  $tag '/</a> !';
                        }
                    } else {
                        if (
    ereg('^[0-9]+$'$_POST['tag'])) {
                            
    $result 'Этот тег зарезервирован системой!';
                        } else {
                            
    $result 'Тег недоступен!';
                        }
                    }
                } else {
                    
    $result 'Вставьте <strong>реальный URL</strong> пожалуйста!';
                }
                if ((bool) 
    $_POST['javascript']) {
                    
    header('Content-Type: text/plain');
                    die(
    $result);
                }
            break;
            case 
    'redirect':
                if (
    is_numeric($_GET['id']) || eregi('^[a-z0-9-]+$'$_GET['tag'])) {
                    if (!
    $_GET['tag']) {
                        
    $sql "SELECT * FROM `urls` WHERE `url_id` = $_GET[id]";
                    } else {
                        
    $sql "SELECT * FROM `urls` WHERE `url_tag` = '$_GET[tag]'";
                    }
                    
    $q mysql_query($sql);
                    
    $r mysql_fetch_assoc($q);
                    
    header("Location: $r[url_location]");
                    exit;
                } else {
                    
    header("Location: $root");
                    exit;
                }
            break;
        }
    ?>
    Скажите пожалуйста в каком месте мне нужно подредактировать код?
     
  2. nittis

    nittis Постоялец

    Регистр.:
    21 апр 2009
    Сообщения:
    68
    Симпатии:
    29
    примерно так

    PHP:
    ...
    $url = ($parsed['scheme'] ? '' 'http://') . (get_magic_quotes_gpc() ? mysql_real_escape_string(stripslashes($_POST['url'])) : mysql_real_escape_string($_POST['url']));
    $tag substr(md5($url), 06);
    $sql "INSERT INTO `urls` (`url_location`, `url_tag`) VALUES ('$url', '$tag')";
    ...
    при этом исчезнет возможность задавать пользовательские теги.

    кроме того надо добавить проверку на то, что такого тега нет (она есть в коде чуть выше).
     
    AsanBosam нравится это.
  3. AsanBosam

    AsanBosam Постоялец

    Регистр.:
    1 мар 2009
    Сообщения:
    139
    Симпатии:
    11
    Как должна писаться проверка на существование тега в базе?
     
  4. nittis

    nittis Постоялец

    Регистр.:
    21 апр 2009
    Сообщения:
    68
    Симпатии:
    29
    PHP:
    $sql "SELECT * FROM `urls` WHERE `url_tag` = '$tag' OR `url_id` = '$tag'";
    $q mysql_query($sql);
    $n mysql_fetch_assoc($q);
    if (
    $n) {
      
    $cancel true//если попали сюда, значит такой tag уже есть

    этот кусок осуществляет проверку.
     
    AsanBosam нравится это.
  5. AsanBosam

    AsanBosam Постоялец

    Регистр.:
    1 мар 2009
    Сообщения:
    139
    Симпатии:
    11
    В итоге должно получиться так?

    PHP:
    <?php
        define
    ('mysql_hostname''localhost');
        
    define('mysql_username''XXXX');
        
    define('mysql_password''XXXX');
        
    define('mysql_database''XXXX');
        
    ob_start('relink');
        
    $root "http://$_SERVER[HTTP_HOST]ereg_replace('/$'''dirname($_SERVER['PHP_SELF'])) . '/';
        
    $action $_GET['action'] ? $_GET['action'] : ($_POST['action'] ? $_POST['action'] : '');
        
    $connection = @mysql_connect(mysql_hostnamemysql_usernamemysql_password) && @mysql_select_db(mysql_database) || die('<code>' mysql_error() . '</code>');
        switch (
    $action) {
            case 
    'generate_url':
                
    $parsed = @parse_url($_POST['url']);
                if (
    $parsed && strlen($_POST['url']) && ereg('\.'$_POST['url'])) {
                    if (
    eregi('^[a-z0-9-]+$'$_POST['tag'])) {
                        
    $tag $_POST['tag'];
                        
    $sql "SELECT * FROM `urls` WHERE `url_tag` = '$tag' OR `url_id` = '$tag'";
                        
    $q mysql_query($sql);
                        
    $n mysql_fetch_assoc($q);
                        if (
    $n) {
                            
    $cancel true;
                        }
                    }
                    if (!
    $cancel) {
                        
    $url = ($parsed['scheme'] ? '' 'http://') . (get_magic_quotes_gpc() ? mysql_real_escape_string(stripslashes($_POST['url'])) : mysql_real_escape_string($_POST['url']));
                        
    $tag substr(md5($url), 06);

                        
    $sql "SELECT * FROM `urls` WHERE `url_tag` = '$tag' OR `url_id` = '$tag'";
                        
    $q mysql_query($sql);
                        
    $n mysql_fetch_assoc($q);
                        if (
    $n) {
                          
    $cancel true//если попали сюда, значит такой tag уже есть
                        
    }  

                        
    $sql "INSERT INTO `urls` (`url_location`, `url_tag`) VALUES ('$url', '$tag')";
                        
                        
    $q mysql_query($sql);
                        
    $id mysql_insert_id();
                        if (!
    $tag) {
                            
    $result 'Ваш <strong>новый URL</strong>: <a href="' $root $id '/">' $root .  $id '/</a> !';
                        } else {
                            
    $result 'Ваш <strong>новый URL</strong>: <a href="' $root $tag '/">' $root .  $tag '/</a> ! <br><br> <TEXTAREA rows="1" cols="27"  readonly="readonly" onclick="select(this)" scrolling="no">' $root $tag '</TEXTAREA>';
                        }
                    } else {
                        if (
    ereg('^[0-9]+$'$_POST['tag'])) {
                            
    $result 'Этот тег зарезервирован системой!';
                        } else {
                            
    $result 'Тег недоступен!';
                        }
                    }
                } else {
                    
    $result 'Вставьте <strong>реальный URL</strong> пожалуйста!';
                }
                if ((bool) 
    $_POST['javascript']) {
                    
    header('Content-Type: text/plain');
                    die(
    $result);
                }
            break;
            case 
    'redirect':
                if (
    is_numeric($_GET['id']) || eregi('^[a-z0-9-]+$'$_GET['tag'])) {
                    if (!
    $_GET['tag']) {
                        
    $sql "SELECT * FROM `urls` WHERE `url_id` = $_GET[id]";
                    } else {
                        
    $sql "SELECT * FROM `urls` WHERE `url_tag` = '$_GET[tag]'";
                    }
                    
    $q mysql_query($sql);
                    
    $r mysql_fetch_assoc($q);
                    
    header("Location: $r[url_location]");
                    exit;
                } else {
                    
    header("Location: $root");
                    exit;
                }
            break;
        }
    ?>
     
  6. nittis

    nittis Постоялец

    Регистр.:
    21 апр 2009
    Сообщения:
    68
    Симпатии:
    29
    кусок с генерацией тэга должен выглядеть примерно вот так

    PHP:
        case 'generate_url'
            
    $parsed = @parse_url($_POST['url']); 
            if (
    $parsed && strlen($_POST['url']) && ereg('\.'$_POST['url'])) { 
                
    $tag  $url;
                
    $stop false;
                  while (!
    $stop
                  { 
                      
    $url = ($parsed['scheme'] ? '' 'http://') . (get_magic_quotes_gpc() ? mysql_real_escape_string(stripslashes($_POST['url'])) : mysql_real_escape_string($_POST['url'])); 
                      
    $tag substr(md5($tag), 06); 

                      
    $sql "SELECT * FROM `urls` WHERE `url_tag` = '$tag' OR `url_id` = '$tag'"
                      
    $q mysql_query($sql); 
                      
    $n mysql_fetch_assoc($q); 
                      if (
    $n
                      { 
                         
    //если попали сюда, значит такой tag уже есть 
                      
    }
                      else
                      {
                        
    $stop true;
                      }   
                  }
                  
    $sql "INSERT INTO `urls` (`url_location`, `url_tag`) VALUES ('$url', '$tag')"
                   
                  
    $q mysql_query($sql); 
                  
    $id mysql_insert_id(); 
                  if (!
    $tag) { 
                      
    $result 'Ваш <strong>новый URL</strong>: <a href="' $root $id '/">' $root .  $id '/</a> !'
                  } else { 
                      
    $result 'Ваш <strong>новый URL</strong>: <a href="' $root $tag '/">' $root .  $tag '/</a> ! <br><br> <TEXTAREA rows="1" cols="27"  readonly="readonly" onclick="select(this)" scrolling="no">' $root $tag '</TEXTAREA>'
                  } 
            } else { 
                
    $result 'Вставьте <strong>реальный URL</strong> пожалуйста!'
            } 
            if ((bool) 
    $_POST['javascript']) { 
                
    header('Content-Type: text/plain'); 
                die(
    $result); 
            } 
        break; 
    , а остальное можно без изменений оставить.
     
    AsanBosam нравится это.
  7. AsanBosam

    AsanBosam Постоялец

    Регистр.:
    1 мар 2009
    Сообщения:
    139
    Симпатии:
    11
    Скрипт работает не совсем корректно, при генераций ссылок с тегом состоящим полностью из цифр он выдает просто пустую страницу.
    Для примера пример: http://massava.ru/035477
    В БД все прописано как нужно:
    [​IMG]
     
  8. nittis

    nittis Постоялец

    Регистр.:
    21 апр 2009
    Сообщения:
    68
    Симпатии:
    29
    PHP:
            case 'redirect'
                if (
    is_numeric($_GET['id']) || eregi('^[a-z0-9-]+$'$_GET['tag'])) { 
                    if (!
    $_GET['tag']) { 
                        
    $sql "SELECT * FROM `urls` WHERE `url_id` = $_GET[id]"
                    } else { 
                        
    $sql "SELECT * FROM `urls` WHERE `url_tag` = '$_GET[tag]'"
                    } 
                    
    $q mysql_query($sql); 
                    
    $r mysql_fetch_assoc($q); 
                    
    header("Location: $r[url_location]"); 
                    exit; 
                } else { 
                    
    header("Location: $root"); 
                    exit; 
                } 
            break;
    меняем на

    PHP:
        case 'redirect'
            if (
    eregi('^[a-z0-9-]+$'$_GET['tag'])) 
            { 
                
    $sql "SELECT * FROM `urls` WHERE `url_tag` = '$_GET[tag]'"
                
    $q mysql_query($sql); 
                
    $r mysql_fetch_assoc($q);
                if(isset(
    $r[url_location]))
                {
                  
    header("Location: $r[url_location]"); 
                  exit; 
                } 
            }
            
    header("Location: $root"); 
            exit; 
        break;
    P.S. Недавно писал аналогичный скрипт без использования БД. На тот случай если кому-то нужно - лежит здесь Перейти по ссылке
     
    AsanBosam нравится это.
  9. AsanBosam

    AsanBosam Постоялец

    Регистр.:
    1 мар 2009
    Сообщения:
    139
    Симпатии:
    11
    Теперь при переходе по ссылке
    http://massava.ru/035477
    редиректит на index.php

    P.S. Попытался использовать ваш скрипт но почему-то не генерируются файлы ссылок в папке urls
    http://search.warezoff.net/tinyurl/
     
  10. nittis

    nittis Постоялец

    Регистр.:
    21 апр 2009
    Сообщения:
    68
    Симпатии:
    29
    странно попробуйте убрать первую проверку

    PHP:
        case 'redirect':
                
    $tag $_GET['tag'];
                
    //echo "*$tag*"; 
                
    $sql "SELECT * FROM `urls` WHERE `url_tag` = '$tag'"
                
    $q mysql_query($sql); 
                
    $r mysql_fetch_assoc($q);
                if(isset(
    $r[url_location]))
                {
                  
    header("Location: $r[url_location]"); 
                  exit; 
                } 
            
    header("Location: $root"); 
            exit; 
        break;
    если поможет, то раскоментируйте строку с echo, посмотрите, что у вас в переменной ханится.

    права на запись на папку не забыли выставить? вот, что отвечает ваш сервер

     
    AsanBosam нравится это.
Статус темы:
Закрыта.