2013-07-02 34 views
1

我是一個嘗試爲使用數據庫的圖庫處理PHP腳本的新手。我最近更改了腳本和數據庫,以便圖庫將基於'photo_caption運行。畫廊的作品,但如果數據庫包含引號(例如標題自然的花園和顏色)腳本只是拉引用前的部分(所以這裏只是自然這個詞,而不是整個標題自然的花園和顏色),從而打破了鏈接。現在鏈接結構是這樣/viewgallery.php?cname=Colorado%20Journies&pcaption=Nature'sGardenAndColors,但由於它顯示的問題/viewgallery.php?cname=Colorado%20Journies&pcaption=Nature帶引號引起錯誤的URL

有沒有什麼解決方法這個問題?我怎樣才能讓$ _GET語句拉動包含引號的完整photo_caption?感謝您的幫助......

我現在用這個代碼來獲取photocaption的鏈接

$pcaption = isset($_GET['pcaption']) ? ($_GET['pcaption']) : 0; 

如果($ pcaption) {

$result = mysql_query("SELECT photo_caption, photo_description, photo_filename,photo_keywords FROM gallery_photos WHERE photo_caption='".addslashes($pcaption)."'"); 

    list($photo_caption, $photo_description, $photo_filename, $photo_keywords) = mysql_fetch_array($result); 

    $nr = mysql_num_rows($result); 
    mysql_free_result($result);  

    $p_caption = $photo_caption; 
    $p_description = $photo_description; 
    $p_keywords = $photo_keywords; 

    //fill pid_array with sorted pids in current category 

    $result = mysql_query("SELECT photo_caption FROM gallery_photos WHERE category_name='".addslashes($cname)."' ORDER BY photo_caption"); 

    $ct = mysql_num_rows($result);  

    while ($row = mysql_fetch_array($result)) { 

      $pid_array[] = $row[0]; 
    } 
    mysql_free_result($result); 

    if(empty($nr)) 
    { 
     print "%%%%NR is $nr"; 
     $result_final = "\t<tr><td>***No Photo found</td></tr>\n"; 
    } 
    else 
    { 
     $result = mysql_query("SELECT category_name FROM gallery_category WHERE category_name='".addslashes($cname)."'"); 
     list($category_name) = mysql_fetch_array($result); 
     mysql_free_result($result);  
     $result_final = " 
     <div class=limagePage> 
     <div class=llink><a href='viewgallery.php'>ALBUMS</a><span class=arrow>&gt;&gt</span><a href='viewgallery.php?cname=$cname>$category_name'</a></div> 
     "; 
     // display previous and next links if more than one photo 

     if ($ct > 1) 
     { 

      $key = array_search($pcaption , $pid_array); 
      $prev = $key - 1; 

      if ($prev < 0) $prev = $ct - 1; 
      $next = $key + 1; 

      if ($next == $ct) $next = 0; 

      //$cname = str_replace(" ","_",$cname); 
      //$pcaption=str_replace(" ","_",$pcaption); 

      $result_final .= "<div class='prevnext'>"; 
      $result_final .= "<span class='prev'><a href='viewgallery.php?cname=$cname&pcaption=".$pid_array[$next]."'><img src='photos/assets/left.png' border='0' ></a></span>"; 
      $result_final .= "<span class='next'><a href='viewgallery.php?cname=$cname&pcaption=".$pid_array[$prev]."'><img src='photos/assets/right.png' border='0' ></a></span>"; 
      $result_final .= "</div>"; 

     }    
    } 
    //$cname = str_replace(" ","_",$cname); 
    //$pcaption=str_replace(" ","_",$pcaption); 
    $result_final .= "<div class=limage><table><tr><td><table class=image><tr>\n\t<td><a href='viewgallery.php?cname=$cname&pcaption=".$pid_array[$next]."'><img src='".$images_dir."/".$photo_filename."' border='0' alt='".$photo_keywords."' /></a> 
    <div class=caption>".$photo_caption."</div> 
    <div class='excerpt'>".$photo_description."</div> 
    </td>      
    </tr></table></td></tr></table><div class=underline></div></div> 
    <!-- .limagePage --></div> "; 
+0

我知道它不整潔,但也許只是用'%27'替換所有'''? – vladkras

回答

1

不幸的是urlencode不會影響'嘗試str_replace("'", "%27", $pid_array[$next])也許它有幫助。例如,它適用於谷歌地址欄。

UPDrawurldecode(upd。正確:rawurlencode當然可以),無論如何這個鏈接看起來有點醜陋,完全是%53,%27等。但是在使用它之前別忘了urldecode($_GET['pcaption'])

+0

vladkras ..我認爲你是對的。 urlencode並沒有這樣做。但是str_replace也沒有這樣做。但你在谷歌的地址欄中工作是正確的。 – yathrakaaran

+0

我不明白,str​​_replace怎麼能「不這樣做」?然後,像我在更新中提到的那樣嘗試'rawurlencode'(我錯誤地輸入了那裏,但我希望它很清楚,您必須使用ENcode而不是DEcode)。你的字符串將是_Nature%27s%20garden%20and%20colors_ – vladkras

+0

謝謝vladkras ..我會再試一次,並會讓你張貼... :-) – yathrakaaran

0

你需要打印出來的鏈接像這樣之前的URL編碼:

<a href='viewgallery.php?cname=$cname&pcaption=".urlencode($pid_array[$next])."'> 

否則想鏈接將截止早,因爲該鏈接將是這樣的:

<a href='viewgallery.php?cname=$cname&pcaption=Nature's photo'> 
                ^ends the link 
+1

你應該在將它放入url之前對它進行編碼Not de – iWantSimpleLife

+0

我在這裏嘗試了兩個答案..但是問題仍然存在,下面是網站上傳的鏈接。[鏈接](http://www.rajeevthomas.com/viewgallery.php?cname=Colorado%20Journies)第一張照片是什麼給我的問題(綠色圖像與樹木,水) – yathrakaaran

+0

更新我的答案與編碼需要發生的地方。@iWantSimpleLife謝謝,我誤解了這個問題,雖然我們正在拉出一個鏈接出陣列。 – immulatin

0
rawurlencode($pid_array[$next]) 

也應該做的伎倆。

請注意,使用變量解析引號使用更多的處理。因爲你已經在做了一半..

$result_final .= "<span class='prev'><a href='viewgallery.php?cname=$cname&pcaption=".$pid_array[$next]."'><img src='photos/assets/left.png' border='0' ></a></span>"; 

可以換成:

$result_final .= '<span class="prev"><a href="viewgallery.php?cname='.urlencode($cname).'&amp;pcaption='.urlencode($pid_array[$next]).'"><img src="photos/assets/left.png" border="0" ></a></span>'; 

也&是不是HTML有效,&放大器; 現在HTML有效,報價不重要和更有效的CPU。

+0

感謝您提供有關HTML的提示。不幸的是rawurlencode也不能正常工作...... – yathrakaaran

0

每個試圖幫助我..我要感謝你們所有人的幫助。我發現除了數據庫中的引號'空格'之外,photo_caption也引發了問題。所以我試圖修剪代碼中的空格(它工作),並決定現在避免引用。只是想留下一個後續記錄......謝謝大家。

+0

終於和Vladkras的想法合作了!隨着str_replace它的作品。謝謝大家.. – yathrakaaran