【问题标题】:Mysql Database doesn't work with hyphen (-)Mysql 数据库不适用于连字符 (-)
【发布时间】: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”尝试过它并且它有效 但是一开始我用的是&lt;meta charset="utf-8"/&gt;

【问题讨论】:

  • 请阅读 SQL 注入
  • 可能不是连字符,但ü 会导致问题?
  • 请检查这是否是图林根州(“图林根”)城镇的变音符号问题。您应该将 WHERE 子句中的字段用反引号括起来。但可能是这个错误导致您翻译成英文,因为我们看到字段名称 'Staedte' 和 'towns'。不要忽视 Ed 关于 SQL 注入的评论!
  • 当某些事情不起作用时,一件好事是打印出你正在做的事情。 ?Name=Baden-Würtemberg 将被翻译成 ?Name=Baden-W\u00frtemberg 如果你不编码,你可以例如使用 urlencode 和 url 解码。要检查的另一件事是您在数据库中的条目是否与您的字符串匹配,因为Baden-Württemberg 是用两个t 编写的。另一件事:您的查询中的列名Federal State 必须被引用,它现在不应该工作。最后一件事:您不绑定参数,请参阅 ed 治愈评论。

标签: php mysql pdo get hyphen


【解决方案1】:

改为:

$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>";
}

试试这个代码:

$pdo->exec("set names utf8");
$FederalState = urldecode ($_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>";
}

希望这对你有用...

【讨论】:

猜你喜欢
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
相关资源
最近更新 更多