За последние 24 часа нас посетили 15774 программиста и 1666 роботов. Сейчас ищет 831 программист ...

Хелп с ЧПУ

Тема в разделе "PHP для новичков", создана пользователем smoln86, 25 фев 2012.

  1. smoln86

    smoln86 Активный пользователь

    С нами с:
    4 апр 2011
    Сообщения:
    17
    Симпатии:
    0
    добрый день, не судите строго я еще только учусь и хочу создать чпу на сайте,
    .htaccess
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?alias=$1 [NC,L,QSA]

    в index.php
    Код (Text):
    1.  
    2. $result = $_SERVER['REQUEST_URI'];
    3.  
    4. if (preg_match ("/([^a-zA-Z0-9\.\/\-\_\#])/", $result)) {
    5. header("HTTP/1.0 404 Not Found");
    6. print "Недопустимые символы в URL";
    7. exit;
    8. $array_url = explode ("/",$result);
    9.  
    10. $pid = getpidbyurl('$rubr_url');
    11.  
    12. if (isset($_GET['pid'])){      
    13.                         $pid = (((int) $_GET['pid']) > 0) ? (int) $_GET['pid'] : 1;
    14.                 }
    15.                 else
    16.                 {
    17.                         $pid=1;
    18.                 }
    19.  
    в файле где функции
    Код (Text):
    1.  
    2. function getpidbyurl($rubr_url){
    3. $sql = "select  rubr_id
    4. from rubr
    5. where rubr_rubr_url='$rubr_url'";
    6. //print $sql;
    7. $result=mysql_query($sql,$db);
    8. $myrow = mysql_fetch_array($result,MYSQL_BOTH);
    9. return  $myrow[0];
    10. }
    вроде все правильно но когда нажимаю на ссылку где прописан rubr_url страница не выводиться.
    не пойму что еще не хватает и что еще нужно
    спс вам заранее!!!
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    $pid = getpidbyurl('$rubr_url');
    такой конструктив в любом случае не будет работать как хочется, т.к. в одинарных кавычках переменная не переменная. вы каким редактором пользуетесь?

    + не экранируется то что пишется в запрос. так можно пометь проблем =) мало ли кто что напишет в запрос, может напишет всю базу данных удалить...
     
  3. smoln86

    smoln86 Активный пользователь

    С нами с:
    4 апр 2011
    Сообщения:
    17
    Симпатии:
    0
    редактор notepad++ , кавычки убрал но результата ноль, а по поводу экранируеться можно подробнее..
     
  4. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    smoln86
    На тему экранирования и SQL-инъекций - почитай: http://phpfaq.ru/slashes . Там достаточно подробно и понятно описано, вроде.
     
  5. smoln86

    smoln86 Активный пользователь

    С нами с:
    4 апр 2011
    Сообщения:
    17
    Симпатии:
    0
    ладно я так понял с вопросами я не по адресу, спасибо!
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    просто суббота, народу мало на форуме.

    Добавлено спустя 10 минут 39 секунд:
    Код (PHP):
    1. function getpidbyurl($rubr_url) {
    2.   $sql = "SELECT `rubr_id` FROM `rubr` WHERE `rubr_rubr_url`='" . mysql_real_escape_string($rubr_url) . "'";
    3.   $result = mysql_query($sql, $db);
    4.   if ($result) {
    5.     $myrow = mysql_fetch_array($result, MYSQL_BOTH);
    6.     return $myrow[0];
    7.   }
    8.   return false;
    9. }
    10.  
    11.  
    12. $url = '';
    13. $pid = false;
    14. if (preg_match("/([^a-zA-Z0-9\.\/\-\_\#])/", $_SERVER['REQUEST_URI'])) {
    15.   header("HTTP/1.0 404 Not Found");
    16.   echo "Недопустимые символы в URL";
    17.   exit;
    18. }
    19. $url = explode('/', trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/'));
    20. if (!empty($url[0])) {
    21.   $pid = getpidbyurl($url);
    22. }
    23. if (!$pid) {
    24.   $pid = 1;
    25. } 
    Добавлено спустя 3 минуты 11 секунд:
    соотв, категория у тебя живет в $url[0], конкретный товар в $url[1] допустим. и т.п.
    /vodka/smirnoff

    Добавлено спустя 36 секунд:
    лично я для себя сделал такую штуку:

    Код (PHP):
    1. <?php
    2.  
    3. class URI {
    4.  
    5.   public static
    6.   $url = '',
    7.   $section = false,
    8.   $entry = false,
    9.   $action = false,
    10.   $param = false,
    11.   $shifted = false;
    12.   private static $shift = 1;
    13.  
    14.   public static function Init() {
    15.     $url = parse_url($_SERVER['REQUEST_URI']);
    16.     $url['path'] = trim($url['path'], '/');
    17.     self::$url = $url['path'];
    18.     $s = explode('/', $url['path'], self::$shift);
    19.     $path = explode('/', array_pop($s), 5);
    20.     self::$shifted = $s;
    21.     if (isset($path[0]))
    22.       self::$section = strtolower($path[0]);
    23.     if (isset($path[1]))
    24.       self::$entry = strtolower($path[1]);
    25.     if (isset($path[2]))
    26.       self::$action = strtolower($path[2]);
    27.     if (isset($path[3]))
    28.       self::$param = strtolower($path[3]);
    29.   }
    30.  
    31.   public static function Shift() {
    32.     self::$shift++;
    33.     self::Init();
    34.   }
    35.  
    36. }
    37.  
    38. URI::Init();
    39. ?>