【问题标题】:URlencode with php dynamic drop downs带有 php 动态下拉菜单的 URlencode
【发布时间】:2014-01-31 20:56:19
【问题描述】:

我正在尝试使用 php/jquery 建立一个“安全”的动态表单。我试图弄清楚如何在 URL 中编码查询结果,但也能够在浏览器中正确显示查询。我尝试在每个 for 循环中围绕数据包装 urlencode,但它会输出编码数据并禁用填充第二个下拉列表的功能。

        <!-- Populate First Dropdown -->
        <select id="first-choice" name="cardset">
            <?php foreach ($data as $row): ?>
                <option><?=htmlentities($row["name"])?></option>
            <?php endforeach ?>
        </select>

<br />
        <!-- Populate Second Dropdown -->
        <select id="second-choice" name="card">
            <option>Please choose from above</option>
        </select>
        <!-- Jquery to Populate second and Produce image -->
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
        <script language=JavaScript >
                $(document).ready(function(){
                    $("#first-choice").change(function() {
                    $.get("getter.php", { choice: $(this).val() }, function(data) {
                        $("#second-choice").html(data);
                    });
                });


                    $("#second-choice").change(function() {
                    var first = $("#first-choice").val();
                    var sec = $(this).val();
                    $("#image-swap").attr("src", (first !== "" &&  + sec !== "") ? "pics/" + first + "/" + sec + ".jpg" : "");
                    });
                });
        </script>

这是我使用上面的 jquery 填充第二个下拉列表的 getter.php 文件:

$choice = $_GET['choice'];

    $sth = $db->prepare("SELECT code FROM sets WHERE name='$choice'");
    $sth->execute();
    $choicecode = $sth->fetchColumn();

    $stmt = $db->prepare("SELECT * FROM cards WHERE code='$choicecode'");
    $stmt->execute();
    $data2 = $stmt->fetchAll();
?>
<?php foreach ($data2 as $row): ?>
    <option><?=$row["cardname"]?></option>
<?php endforeach ?>

基本上我想对下拉列表中的数据进行编码,因为它们包含空格和撇号。我怎样才能在正确输出它们的同时仍然做到这一点?

【问题讨论】:

    标签: php sql get encode


    【解决方案1】:

    urlencode 在 URL 中构造查询参数时应使用。将文本放入 HTML 时,应使用 htmlentities。此外,使用 ID 列作为选项中的值。

    <?php foreach ($data as $row): ?>
        <option value="<?=$row["id"]?>"><?= htmlentities($row["name"]) ?></option>
    <?php endforeach ?>
    

    此外,如果查询包含特殊字符,您应该使用参数化查询来防止 SQL 注入并避免在构造查询时出现其他问题:

    $stmt = $db->prepare("SELECT * FROM cards 
                          WHERE code = (SELECT code FROM sets WHERE id = :id)");
    $stmt->execute(array(':id' => $_GET['choice']));
    $data2 = $stmt->fetchAll();
    

    【讨论】:

    • 我不确定这一切是如何工作的,但我使用了 htmlentities,但我仍然为地址中的空格返回 %20:第一选择为:Arena%20League 和第二选择:Gaea's% 20祝福。当我在第二个 php 文件中使用 GET 填充第二个下拉列表时,第一个选项被用作查询参数。
    • 你怎么看?参数放入$_GET时应该会自动解码。
    • 我有另一个 jquery 函数,它根据第二个选择的名称生成图像,它将路径显示为 localhost/~myname/mysite/pics/Archenemy%20%22Schemes%22/…
    • 在我看来,你真的把编码放在了你的数据库中。
    • 在数据库中是正常的非编码名称。我刚刚验证。例如,我看到了大敌计划和盖亚的祝福。
    猜你喜欢
    • 2020-06-11
    • 1970-01-01
    • 2013-07-20
    • 2015-06-10
    • 2012-01-20
    • 1970-01-01
    • 2014-12-04
    • 2012-05-06
    • 1970-01-01
    相关资源
    最近更新 更多