2013-05-30 69 views
0

本網站旨在顯示某些法律/管轄區域的法律/規則。帶連字符或空格的mysqli php表名

還有就是找到縣,然後顯示該屏幕上的縣名稱的簡單mysqli的查詢:

echo "><a href=\"index.php?sel_subj=" . urlencode($subject["county_name"]) . "\"> 
{$subject["county_name"]}</a></li>"; 

然後你點擊一個縣名(內嵌的鏈接)和mysqli的查詢應該查找與該縣名稱的表,並獲得該縣內的所有司法管轄區。

if (isset($_GET['sel_subj'])){ 
    $query2 = "SELECT * FROM $sel_subj"; 
    $result2 = $mysqli2->query($query2) or die($mysqli2->error.__LINE__); 
    while ($subject = mysqli_fetch_array($result2)) { 
     echo "<li"; 
     echo "><a href=\"index.php?sel_page=" . urlencode($subject["muni_name"]); 
     echo "&sel_subj=" . urlencode($sel_subj). "\"> 
     {$subject["muni_name"]}</a></li>"; 
    } 
} 

問題是某些縣名包括空格或連字符。所以當我點擊有連字符或空格的縣時,就會出現錯誤。

當出現連字符時出現此錯誤(例如:Miami-Dade): 您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第173行的'-Dade'附近使用正確的語法

並且存在空間時出現此錯誤(例如:Palm Beach): Table'florida.palm'不存在73

如果縣只是一個沒有任何特殊字符的字符串,那麼管轄區顯示沒有問題。

有沒有簡單的解決方案呢?

+1

您確定要爲黑客提供** THAT **大小的洞嗎? –

+0

你在哪裏設置$ sel_subj的值 – Anigel

+0

@Anigel也許全局變量是開啓的。其中,user2436671,你應該很可能照顧。 – MaX

回答

0

你的數據庫結構是錯誤的。

它必須是ONE表中國家是其他欄中的字段。

因此,代碼必須是這樣

if (isset($_GET['sel_subj'])){ 
    $query = "SELECT * FROM documents WHERE country = ?"; 
    $stmt = $mysqli->prepare($query) or trigger_error($mysqli->error); 
    $stmt->bind_param('s',$_GET['sel_subj']); 
    $stmt->execute(); 
    $res = $stmt->get_result(); 
    while ($subject = mysqli_fetch_array($res)) { 
     echo "<li"; 
     echo "><a href=\"index.php?sel_page=" . urlencode($subject["muni_name"]); 
     echo "&sel_subj=" . urlencode($sel_subj). "\"> 
     {$subject["muni_name"]}</a></li>"; 
    } 
} 
+0

謝謝,我有另一個問題... – adamearl

-1

你要包裝你的縣名,如果它包含這樣的字符。但你還需要淨化你的輸入:

$query2 = "SELECT * FROM `".mysqli_real_escape_string ($sel_subj)."`"; 

編輯:

此外,你應該看看prepared statements,以避免SQL注入攻擊。

您應該通過限制可以定義爲包含縣信息的表名來進一步清理您的輸入。

+1

請nooooo! mysqli_real_escape_string沒有準備好聲明可以幫助注入這裏 –

+0

我只是說...由於他對動態表名的特殊需求,其中表名可能包含空格,這就是你必須做的。我並不是說這是一個很好的解決方案,但這是他需要和要求的。 – MaX

+0

感謝您的輸入。我看到很多人談論SQL注入和準備語句,但不知道如何構建這些事情。我只是從書籍,網頁和串起來開發這個網站的代碼片段。你知道任何好的教程或解釋這些東西嗎? – adamearl