【问题标题】:pass mysql datatable name in autocomplete jsonp在自动完成 jsonp 中传递 mysql 数据表名称
【发布时间】:2011-04-27 01:18:39
【问题描述】:

我正在使用 jQuery UI 自动完成功能,我对 jQuery 和 JSON 还比较陌生。下面是我的代码。我想知道是否可以在回调 url 中指定字段名称和数据表名称,以便 php 文件稍后抓取它。我有许多具有不同名称和 ID 的输入框需要自动完成。每个输入框对应 MySQL 中不同的列和数据表。所以我实际上想替换 "SELECT * FROM projects WHERE project_title REGEXP '.$param'";进入类似“SELECT [column variable] FROM [data table variable] WHERE [column variable] REGEXP '.$param'”;

非常感谢您。

阿布

<script type="text/javascript">
        $(function(){

            //attach autocomplete
            $("#project-title").autocomplete({

                //define callback to format results
                source: function(req, add){

                    //pass request to server
                    $.getJSON("bin/test.php?callback=?", req, function(data) {

                        //create array for response objects
                        var suggestions = [];

                        //process response
                        $.each(data, function(i, val){                                
                            suggestions.push(val.name);
                        });

                        //pass array to callback
                        add(suggestions);
                    });
                },
                minLength: 1,


            });
        });

下面是test.php文件

<?php

include('../db.php');
$param = $_GET["term"];

//query the database
$query = "SELECT * FROM projects WHERE project_title REGEXP '.$param'";
$res = connect($query);
//build array of results
for ($x = 0, $numrows = mysql_num_rows($res); $x < $numrows; $x++) {
    $row = mysql_fetch_array($res);

    $friends[$x] = array("name" => $row["project_title"]);
}

//echo JSON to page
$response = $_GET["callback"] . "(" . json_encode($friends) . ")";
echo $response;

?>

【问题讨论】:

  • 一英里宽的安全漏洞...
  • 感谢您提醒我注意安全。我正在阅读一篇文章,其中提到了通过将 autocomplete="off" 放入 标记来轻松解决问题。是否有意义?我怎样才能使它更安全?谢谢。

标签: php mysql autocomplete jsonp


【解决方案1】:

没关系。我想到了。 我用过这样的东西。

$.getJSON("bin/test.php?callback=?&table=projects&col=project_title", req, function(data) 

而不是使用这个来获取额外的值

$param = filter_input(INPUT_GET, 'term', FILTER_SANITIZE_STRING);
$param_table = filter_input(INPUT_GET, 'table', FILTER_SANITIZE_STRING);
$param_column = filter_input(INPUT_GET, 'col', FILTER_SANITIZE_STRING);

【讨论】:

  • 我仍然想知道如何使它更安全。谢谢。
  • 这对你一点帮助都没有
  • 该页面无论如何都不是公开的。它有一个安全的登录系统。我添加了 no-cache 标头和 header("Content-Type: application/json; charset=utf-8");并且正在使用更安全的 filter_input。如果你知道更多的方法来确保即使在那之后我也很想听听他们的意见。谢谢
  • 您使用的所有这些废话都与主要问题无关 - SQL 注入。为避免这种情况,您必须在脚本中硬编码每个表的每个字段的列表。
  • 感谢您指出。作为一个新手,我不知道。
猜你喜欢
  • 1970-01-01
  • 2012-02-28
  • 2021-02-17
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 2018-04-14
相关资源
最近更新 更多