2013-05-30 49 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