2012-05-04 5 views
0

今は、.htaccessやモジュールを使用せずに、動的URLとそのパスを生成しようとしています。基本的には、Apacheが提供するさまざまなローカルホスト上でステートレスに動作するURLパスを書き換えて出力しようとしています。動的URLパスをmod_rewriteなしで記述する

私はこのようなクエリ文字列を通じてURIを取得しますのindex.phpを持っていると思います(明らかではないコード):

-> index.php (echos dynamically generated URL hyperlinks)  
-> index.php?q=/ (echos every URI in JSON)      
-> index.php?q=/some_id (outputs table some_id info w/ links to reviews)        
-> index.php?q=/some_id/reviews (outputs table column of reviews w/ link to review_ids)      
-> index.php?q=/some_id/reviews/review_id (output related column info) 

誰かが、私はこれをやって行くだろうか、私を歩くでした?私は、$ _SERVERメソッドを使ってURLを記述し、テーブルIDの配列を反復しながら展開する必要があると考えています。

ご協力いただきありがとうございます。


EDIT:
は、ここで私が書くしようとしていたコードです:/

<?php 
    $db = $user = $pw = 'logininfo'; 

    try { 
     $dbconn = new PDO('mysql:host=localhost;db='.$db, $user, $pw; 
    } 
    catch (Exception $e) { 
     echo "Error: "; 
     echo $e->getMessage(); 
    } 
    ?> 

    <!DOCTYPE HTML> 
    <head> 
     <title>Product Reviews</title> 
    </head> 
    <body> 
    <h1>Product List:</h1> 
     <h2> 
      <ul> 
       <?php  
        try { 
        $sql = "SELECT somename, some_id FROM products"; 
       $stmt = $dbconn->query($sql); 
       if($stmt !== false) { 
       foreach($stmt as $row) { //output just name 
        echo "<li>"; 
       echo htmlentities($row['somename'])."<br />"; 

       if($stmt !== false) { 
        $url = "<a href=index.php?q=". 
           htmlentities($row['some_id'])."/>". 
           htmlentities($row['somename'])."'s Review</a>"; 

        echo $url;   //output URL 
        echo "</li>"."<br />"; 
       } 
       else { 
        echo "Unnecessary"; 
       } 
       } 
       if($_GET['url']) { //don't really know what to put here 
        header("Location: $url"); //can't use headers anyway 
       } 
       } 
       $stmt = null; 
       } 
       catch (PDOEXCEPTION $e) { 
       echo $e->getMessge(); 
       } 
     ?> 
    </ul> 
    </h2> 
    </body> 
    </html> 
+2

のErmのためにこれを試してみてください、どのようにあなたのWebサーバがそれを書き換えることなく、最初の場所でのクエリ文字列にURLを得ようとしていますか? – Amber

+0

私は自分の投稿を編集して、私が作業していたコードを含めて、完全に信用を失った。 – dgills

答えて

2

あなたのようにURLを書き込むことができます。

http://example.org/index.php/reviews/id/ [where id can be your review id] 

との一部を取得するためにindex.php$_SERVER['PATH_INFO']を使用しますURLがindex.phpの後にある場合は、テキストを展開して目的のデータを取得します。

<?php 
    $query_string = explode('/', $_SERVER['PATH_INFO']); 

    switch(count($query_string)) { 
     case 2: 
      $some_id = (int) $query_string[1]; 
      if ($some_id === 0) { 
       //(echos every URI in JSON) 

      } 
      else { 
       // (outputs table some_id info w/ links to reviews) 

      } 

      break; 

     case 3: 
      //(outputs table column of reviews w/ link to review_ids) 
      $some_id = (int) $query_string[1]; 
      $table_name = $query_string[2]; 
      break; 

     case 4: 
      //(output related column info) 
      $some_id = (int) $query_string[1]; 
      $table_name = $query_string[2]; 
      $review_id = (int) $query_string[3]; 
      break; 

     default: 
      // Error case 
    } 
?> 
+0

これはすばらしく、私がやろうとしていたものよりも意味がある!これらのURLをhref属性内にエコーしているだけの場合は、あらかじめ定義された$ _GETテーブル変数をエコーし​​て出力する必要があります。 – dgills

+0

@LostinTimeはい、必要に応じてスイッチケースのスキームを変更し、 'GET'変数の数だけをチェックすれば、さらにケースごとにいくつかの条件を実装できます。 – vedarthk

+0

ありがとう、あなたは命を救ってきました! – dgills

1

サイズ

if (isset($_GET['q']) && !empty($_GET['q'])) 
{ 
    $params = explode("/",$_GET['q']); 

    if (isset($params[3]) && !empty($params[3])) 
     echo "(output {$params[2]} {$params[3]} info)"; 

    else if (isset($params[2]) && !empty($params[2])) 
     echo "(outputs table column of {$params[2]} w/ link to review_ids)"; 

    else if (isset($params[1]) && !empty($params[1])) 
     echo "(outputs table {$params[1]} info w/ links to reviews)"; 
    else 
     echo "(echos every URI in JSON) "; 


} 
else 
    echo "(echos dynamically generated URL hyperlinks)"; 
関連する問題