2010-08-01 3 views
0

필자가 필요로하는 기능을 수행하는 PHP 함수가 있지만 지금은 실패 할 가능성이 있음을 발견했습니다. 나는 모드 재 작성을 사용하여 URL을 재 작성하고이 함수가 작동하도록 URL을 다시 작성해야합니다. 두 페이지가 동일하지 않더라도 같은 페이지로 다시 작성되면 실패 할 수 있습니다.URL 및 쿼리 데이터베이스의 PHP breadcrumbs

이 함수는 url을 읽고 /를 구분 기호로 사용하여 부분으로 분할합니다.

내가 할 수 있기를 원하는 것은 URL에 'forum'이라는 단어가 있는지 확인하고 쿼리의 다음 url 부분을 사용하여 데이터베이스를 쿼리하는지 확인하는 것입니다.

http://www.mydomain.com/forum/1/2/6과 같은 URL이 있다고 말하면서 1과 2를 얻고 싶습니다. 내 질문은 boardid와 topicid가됩니다. 마지막 비트는 페이지 번호입니다.

이것은 일반적으로 http://www.mydomain.com/topic.php?boardid=1&topicid=2&pagenum=6처럼 보이지만 기능이 없으면 /를 사용할 수 없기 때문에 다시 쓸 수없는 URL입니다.

내가 할 수있는 일은 충분히 간단합니다. URL을 확인하고 '포럼'이 있는지 확인한 다음 쿼리를 수행합니다. 그것이 URL에 없다면 정상적으로 계속하십시오. 여기

내 PHP는 이동 경로

function breadcrumb(
        $home = 'Home', // Name of root link 
        $division = '/', // Divider between links 
        $hidextra = true, // Toggle hide/show get data and fragment in text 
        $index = false, // Toggle show/hide link to directory if it does not contain a file 
        $indexname = 'index.php' // The definition of the file the directory must contain 
     ) { 

      $breadcrumb=""; 

      // Requested addons... 
      $extension = '.php'; // Extension to cut off the end of the TEXT links 
      $ifIndex = 'index.php'; // Filename of index/default/home files to not display 
      // End requested addons 

      $whole = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 

      if(stristr($whole,"contact-bidder")) { 
       $whole = substr($whole,0,strrpos($whole,'/')); 
      } 

      $parts = explode('/', $whole); 
      $parts[0] = 'http://'.$parts[0]; 

      $array = array('-', '%20'); 

      $breadcrumb .= "<a href=\"{$parts[0]}\">{$home}</a>{$division}"; 
      $k = 1; 
      for ($i=1;$i < sizeof($parts);$i++) { 
       $uri = '/'; 
       while ($k <= $i) { 
         $uri .= $parts[$k]; 
         if ($k != (sizeof($parts)-1)) $uri .= '/'; 
         $k++; 
       } 
        if (($index && is_dir($_SERVER['DOCUMENT_ROOT'].$uri) && is_file($_SERVER['DOCUMENT_ROOT'].$uri.$indexname) 
       || !$index 
       || !is_dir($_SERVER['DOCUMENT_ROOT'].$uri)) && $parts[$i] != $ifIndex) { 
        $breadcrumb .= "<a href=\"$uri\">"; 
        if ($hidextra) { 
         $breadcrumb .= rtrim(preg_replace("/\?.*$/", '', ucwords(str_replace($array," ",$parts[$i]))), $extension); 
        } 
        else { 
         $breadcrumb .= rtrim(ucwords($parts[$i]), $extension); 
        } 
        $breadcrumb .= '</a>'; 
       } 
       else { 
        $breadcrumb .= ucwords(str_replace($array," ",$parts[$i])); 
       } 

        if (isset($parts[($i+1)])) { 
        $breadcrumb .= $division; 
       } 
        $k = 1; 
      } 
      return $breadcrumb; 
     } 

그것이 불가능하거나 쉽지 않은 경우 코드입니다, 내가에 분할 할 수있는 방법은 무엇입니까? 그리고 & 그리고 전에 무엇입니까? 및 이후 = URL의 각 변수에 대해

답변

0

나는 내가 필요한 해결 방법을 관리하고 그다지 열심히하지 않았다

function breadcrumb(
       $home = 'Home', // Name of root link 
       $division = '/', // Divider between links 
       $hidextra = true, // Toggle hide/show get data and fragment in text 
       $index = false, // Toggle show/hide link to directory if it does not contain a file 
       $indexname = 'index.php' // The definition of the file the directory must contain 
    ) { 
     global $host,$dbUser,$dbPass,$dbName; 

     require_once("php/database/connection.php"); 
     require_once("php/database/MySQL.php"); 

     // Connect to the database and grab the email 
     $db = & new MySQL($host,$dbUser,$dbPass,$dbName); 

     $breadcrumb=""; 

     // Requested addons... 
     $extension = '.php'; // Extension to cut off the end of the TEXT links 
     $ifIndex = 'index.php'; // Filename of index/default/home files to not display 
     // End requested addons 

     $whole = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 

     $parts = explode('/', $whole); 
     $parts[0] = 'http://'.$parts[0]; 

     $array = array('-', '%20'); 

     $breadcrumb .= "<a href=\"{$parts[0]}\">{$home}</a>{$division}"; 
     $k = 1; 
     for ($i=1;$i < sizeof($parts);$i++) { 
      $uri = '/'; 
      while ($k <= $i) { 
        $uri .= $parts[$k]; 
        if ($k != (sizeof($parts)-1)) $uri .= '/'; 
        $k++; 
      } 
       if (($index && is_dir($_SERVER['DOCUMENT_ROOT'].$uri) && is_file($_SERVER['DOCUMENT_ROOT'].$uri.$indexname) 
      || !$index 
      || !is_dir($_SERVER['DOCUMENT_ROOT'].$uri)) && $parts[$i] != $ifIndex) { 
       $breadcrumb .= "<a href=\"$uri\">"; 
       if ($hidextra) { 
        if($parts[$i-1]=="forum") { 
         $board = substr($parts[$i],6); 
         $sql = "SELECT boardname FROM boards WHERE boardid='".$board."'"; 
         $result = $db->query($sql); 

         while($row=$result->fetch()) { 
          extract($row, EXTR_PREFIX_INVALID, '_'); 
          $breadcrumb .= $boardname; 
         } 
        } 
        else if($parts[$i-2]=="forum") { 
         $topic = substr($parts[$i],10); 
         $sql = "SELECT topicname FROM topics WHERE topicid='".$topic."'"; 
         $result = $db->query($sql); 

         while($row=$result->fetch()) { 
          extract($row, EXTR_PREFIX_INVALID, '_'); 
          $breadcrumb .= $topicname; 
         } 
        } 
        else { 
         $breadcrumb .= rtrim(preg_replace("/\?.*$/", '', ucwords(str_replace($array," ",$parts[$i]))), $extension); 
        } 
       } 
       else { 
        $breadcrumb .= rtrim(ucwords($parts[$i]), $extension); 
       } 
       $breadcrumb .= '</a>'; 
      } 
      else { 
       $breadcrumb .= ucwords(str_replace($array," ",$parts[$i])); 
      } 

       if (isset($parts[($i+1)])) { 
       $breadcrumb .= $division; 
      } 
       $k = 1; 
     } 
     return $breadcrumb; 
    } 

내가 previ ous는 '포럼'이었고, 데이터베이스에 연결하고, 필요한 정보를 얻어 그 시점의 현재 위치에있는 빵 부스러기를 교체했습니다. 그것은 다음 빵 부스러기에서 동일했습니다.

이제는 어떻게 작동해야합니다.

1

URL 뒤의 변수 문자열을 쿼리 문자열이라고합니다. 쿼리 문자열에 변수가 있는지 확인하는 가장 좋은 방법은 $ _GET 배열을 보는 것입니다.

그래서 ... 당신이있는 경우 :

http://google.com/?key=value&another_key=another_value&forum=22

당신은이 같은 변수 '포럼'을 확인 할

:

if (isset($_GET['forum'])){ 

    // 'forum' has been set in the query string, do something... 

} else { 

    // 'forum' has NOT been set. 
} 
+0

감사합니다 ... 나는 쿼리 문자열에서 얻는 방법에 대해 알고 있습니다. 쿼리 문자열에있는 내용을 데이터베이스에있는 내용으로 바꿉니다. 나는 당신의 아이디어와 비슷한 체크 아웃 이론을 가지고 있습니다. – AdRock