【发布时间】:2016-06-18 09:42:14
【问题描述】:
用户说他住在哪个联邦州(德国)。 重要的代码真的很简单:
echo "<a href=\"FirstLogin.php?Name=Baden-Würtemberg\">Baden-Würtemberg</a><br>";
echo "<a href=\"FirstLogin.php?Name=Bayern\">Bayern</a><br>";
echo "<a href=\"FirstLogin.php?Name=Berlin\">Berlin</a><br>";
echo "<a href=\"FirstLogin.php?Name=Brandenburg\">Brandenburg</a><br>";
echo "<a href=\"FirstLogin.php?Name=Bremen\">Bremen</a><br>";
...
exit (0);
用户点击显示他居住的联邦州名称的链接,他将被重定向到 FirstLogin.php,联邦州为 $_GET。
现在,问题:
在这个网站上,用户应该选择他居住的城镇。
在 mysql 数据库中保存所有城镇。
将显示用户选择的联邦州的所有城镇:
$FederalState = $_GET["Name"];
$sql = "SELECT Towns FROM Towns WHERE Federal State = '$FederalState'";
foreach ($pdo->query($sql) as $row) {
$Towns[] = $row["Towns"];
}
for ($i=0;$i<count($Towns);$i++) {
$Town = $Towns[$i];
echo "<a href=\"NextPage.php?Name=$Town\">$Town</a><br>";
}
如果用户选择“拜仁”、“柏林”或其他正常的联邦州,一切都会很好。但是,如果用户选择带有 - (连字符或减号)的联邦州,则它不起作用!没有链接!
如果我做
foreach ($pdo->query($sql) as $row) {
echo $row["Staedte"]."<br>";
}
仅当联邦州没有连字符减号 (-) 时才会显示联邦州的城镇。
我不知道该怎么做才能使脚本正常工作。
请帮助我并给我一个解决方案。
编辑 1:
问题不是连字符,
问题是巴登-符腾堡州的ü,
我已经用“Nordrhein-Westfahlen”尝试过它并且它有效
但是一开始我用的是<meta charset="utf-8"/>
【问题讨论】:
-
请阅读 SQL 注入
-
可能不是连字符,但
ü会导致问题? -
请检查这是否是图林根州(“图林根”)城镇的变音符号问题。您应该将 WHERE 子句中的字段用反引号括起来。但可能是这个错误导致您翻译成英文,因为我们看到字段名称 'Staedte' 和 'towns'。不要忽视 Ed 关于 SQL 注入的评论!
-
当某些事情不起作用时,一件好事是打印出你正在做的事情。
?Name=Baden-Würtemberg将被翻译成?Name=Baden-W\u00frtemberg如果你不编码,你可以例如使用 urlencode 和 url 解码。要检查的另一件事是您在数据库中的条目是否与您的字符串匹配,因为Baden-Württemberg是用两个t编写的。另一件事:您的查询中的列名Federal State必须被引用,它现在不应该工作。最后一件事:您不绑定参数,请参阅 ed 治愈评论。