Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery自动填充文本框,其中包含来自另一个自动填充的信息_Javascript_Php_Jquery_Mysql_Jquery Autocomplete - Fatal编程技术网

Javascript jQuery自动填充文本框,其中包含来自另一个自动填充的信息

Javascript jQuery自动填充文本框,其中包含来自另一个自动填充的信息,javascript,php,jquery,mysql,jquery-autocomplete,Javascript,Php,Jquery,Mysql,Jquery Autocomplete,我对jQuery自动完成有问题。基本上我有一个搜索栏,当你输入你想要的jQuery代码时,我会调用一个php脚本,它执行MySQL查询,返回我需要的所有内容,并相应地填充文本框。然后我想做的是从自动完成中获取我收到的值,并在另一个自动完成中使用它来填充更多的数据。棘手的是,我需要通过第二个查询获取的数据与第一个查询位于不同的表中,第一个查询共享一个关系。我的问题是,我是否需要一个完全独立的函数来实现这一点,或者我可以简单地将两个查询都放在1 php脚本中,并将第一个查询中的信息用于第二个查询 感

我对jQuery自动完成有问题。基本上我有一个搜索栏,当你输入你想要的jQuery代码时,我会调用一个php脚本,它执行MySQL查询,返回我需要的所有内容,并相应地填充文本框。然后我想做的是从自动完成中获取我收到的值,并在另一个自动完成中使用它来填充更多的数据。棘手的是,我需要通过第二个查询获取的数据与第一个查询位于不同的表中,第一个查询共享一个关系。我的问题是,我是否需要一个完全独立的函数来实现这一点,或者我可以简单地将两个查询都放在1 php脚本中,并将第一个查询中的信息用于第二个查询

感谢您的帮助,谢谢

以下是jQuery函数:

$(function() {

/*            $('#abbrev').val("");
*/             
            $("#q16_location16").autocomplete({
                source: "location_query.php",
                minLength: 1,
                select: function(event, ui) {
                    $('#q16_location161').val(ui.item.LocationID);
                    $('#SystemName').val(ui.item.SystemName);
                    $('#SiteAddress1').val(ui.item.SiteAddress1);
                    $('#SiteAddress2').val(ui.item.SiteAddress2);
                    $('#SiteCPP').val(ui.item.SiteCPP);
                    $('#Contact').val(ui.item.Contact);
                    $('#SiteLocationHours').val(ui.item.SiteLocationHours);
                }
            });
        });
以及php脚本:

/* If connection to database, run sql statement. */
if ($conn)
{

    $fetch = mysql_query("
    SELECT Location.LocationID,
    Location.SystemName,
    Location.SiteAddress1,
    Location.SiteAddress2,
    CONCAT_WS(' ', Location.SiteCity, Location.SiteProvince, Location.SitePostalCode) AS SiteCPP,
    CONCAT_WS(' ', Location.ContactName, Location.ContactPhone, Location.ContactEmail) AS Contact,
    Location.SiteLocationHours, 
    CONCAT_WS(' ', SystemName, SiteNameLocation, SiteAddress1, SiteCity, SiteProvince, SitePostalCode) as expr2 
    FROM Location 
    WHERE Location.SystemName like '%".mysql_real_escape_string($_GET['term'])."%'
    OR Location.SiteNameLocation like '%".mysql_real_escape_string($_GET['term'])."%'
    OR Location.SiteAddress1 like '%".mysql_real_escape_string($_GET['term'])."%'
    OR Location.SiteCity like '%".mysql_real_escape_string($_GET['term'])."%'
    OR Location.SiteProvince like '%".mysql_real_escape_string($_GET['term'])."%'
    OR Location.SitePostalCode like '%".mysql_real_escape_string($_GET['term'])."% '
    LIMIT 0,15");


    /* Retrieve and store in array the results of the query.*/
    while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
        $row_array['LocationID'] = $row['LocationID'];
        $row_array['value'] = $row['expr2'];
        $row_array['SystemName'] = $row['SystemName'];
        $row_array['SiteAddress1'] = $row['SiteAddress1'];
        $row_array['SiteAddress2'] = $row['SiteAddress2'];
        $row_array['SiteCPP'] = $row['SiteCPP'];
        $row_array['Contact'] = $row['Contact'];
        $row_array['SiteLocationHours'] = $row['SiteLocationHours'];

        array_push($return_arr,$row_array);
    }
}

/* Free connection resources. */
mysql_close($conn);

/* Toss back results as json encoded array. */
echo json_encode($return_arr, $return_arr2);
因此,当用户在纽约键入时,他们可以选择该选项。在我的示例中,纽约的ID为5。我还有一个选择纽约不同街道的查询,但它在一个单独的表中。然而,在我的streets表中,有一个LocationID列,它在纽约的每一条街道上的值都是5。因此,当用户进入纽约时,我想将ID设为5,并从另一个表中生成所有街道,该表也具有该ID。我尝试了多种方法来创建新函数,但我不确定如何将该ID传递给函数


谢谢

您可以使用一个PHP脚本来实现这一点。以下是我认为的基本结构:

将两个值传递到location_query.php。第一个值是要查询的表的名称。第二个值可以是自动完成文本框中的选择结果。 从传递到location_query.php的两个值在location_query.php中创建一个准备好的语句。 执行您的查询。 JSON对结果进行编码,就像以前一样。 我还想指出您的代码存在安全问题。您应该使用and而不是PHP的MySQL和MySQL\u real\u escape\u字符串。mysql_real_escape_string已被证明存在安全缺陷,可能导致安全漏洞,PHP的mysql类已被弃用。Mysqli和Prepared语句更安全,而且在我看来,它提供了更干净的代码,因为它允许将SQL和参数分离

希望这有帮助

编辑:我想我明白你现在想做什么,但我认为有更好的方法去做。与其将id值分配给隐藏字段,并在每次更改该字段时尝试让jquery进行检测,我只需执行以下操作:

对于第一个文本框的选择方法:

select:function(event, ui) {
    $.get("location_query.php", {
        searchterm:$(ui).val()
        }, yourFunction);
}
下面是queryFinished的一个示例实现:

function queryFinished(data, textStatus, jqXHR) {
    var mJSON = $.parseJSON(data);
    /* mJSON is the parsed JSON data returned from your "location_query.php" 
       script.*/
    //TODO the rest of your code
}
下面是发生的事情:

我们定义了一个自定义函数,当第一个文本框中选择了一个新项时调用该函数。此函数的唯一用途是调用GET on location_query.php。 然后,我们通过GET调用从第一个文本框传递所选字段的值。 然后,我们创建一个函数,在GET返回时调用它。 最后,我们解析location_query.php返回的编码JSON。在这之后,您可以使用我们示例中解析的JSON mJSON执行任何需要的任务。
采用这种方法可以让我们不必担心在隐藏的ID字段中监听值的变化,并使一切变得整洁。

两个自动完成功能意味着用户必须做出两个选择,因此会显示两个查询的结果。您可以使用单独的php脚本,或者在一个脚本中管理两个查询,您无法在一个查询中获得结果。感谢您对Mysqli的建议,尽管对于我正在做的事情,不需要任何比mysql\u real\u escape\u string更安全的东西。所以我不明白的是,当你说将两个值传递给php脚本时,我应该如何在jQuery代码中做到这一点?它是否像:'$value1.autocomplete{'$value2.autocomplete{'?..…我很抱歉,因为我不知道如何在comments@CoreyStadnyk我添加了一个示例,说明如何将额外数据传递到location_query.php脚本。如果您在理解任何内容时遇到困难,请告诉我。尽管现在我又在看您的问题,但我想我可能误解了您想要表达的意思o、 是的,也许我们在这里不在同一页Don。让我再试一次。我的html表单上有一个搜索框。用户在某个位置键入。例如“new y”和我的jQuery代码然后根据用户提供的信息进行搜索。为简单起见,假设只显示纽约。然后他们选择纽约。在我的html中的一个隐藏字段中,它将用“5”表示该字段的值,这是我分配给纽约的ID。从这里,我需要jQuery来理解新值已填充,调用另一个脚本并使用该值
5在另一个查询中。有意义吗?但问题是,每次选择新值时,我都需要使用jQuery将值5传递给php脚本。例如,如果他们键入newjersey,则隐藏字段的值现在为10,然后jQuery需要再次运行该脚本,以从表2中获取与ID为10相关的所有内容。两个查询基本上是同时完成的,但第二个查询依赖于第一个查询。我只是不知道该怎么做