Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.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
Php TwitterTypeahead与mysql源代码_Php_Jquery_Mysql_Twitter Bootstrap - Fatal编程技术网

Php TwitterTypeahead与mysql源代码

Php TwitterTypeahead与mysql源代码,php,jquery,mysql,twitter-bootstrap,Php,Jquery,Mysql,Twitter Bootstrap,我正在尝试一个带有PHP源文件的typeahead函数 这是我的输入字段: <input type="text" class="form-control typeahead" id="test-field" placeholder="Contact"/> 您的代码存在一些问题: 您只能通过$\u GET访问它的原因是您正在向服务器发出GET请求 向服务器发出搜索请求时,实际上最好使用GET请求,因为您试图获取数据,而不是操纵数据 您可以直接向搜索词mysqli\u query调用中

我正在尝试一个带有PHP源文件的typeahead函数

这是我的输入字段:

<input type="text" class="form-control typeahead" id="test-field" placeholder="Contact"/>

您的代码存在一些问题:

  • 您只能通过
    $\u GET
    访问它的原因是您正在向服务器发出
    GET
    请求

  • 向服务器发出搜索请求时,实际上最好使用
    GET
    请求,因为您试图获取数据,而不是操纵数据

  • 您可以直接向搜索词
    mysqli\u query
    调用中注入SQL注入漏洞

  • 使用
    print\r
    不会为JavaScript提供可读格式的数据

  • 将数据发送回JavaScript而不设置正确的头(
    application/json
    )将导致不一致的结果

  • 我建议做以下几点

    PHP: JavaScript(HTML内部):

    
    jQuery(文档).ready(函数(){
    //Init Twitter Typeahead.js
    var substringMatcher=函数(strs){
    返回函数findMatches(q,cb){
    var匹配,子关系x;
    匹配项=[];
    substregex=新的RegExp(q,‘i’);
    $。每个(str,功能(i,str){
    if(子相关性测试(str)){
    推({
    值:str
    });
    }
    });
    cb(比赛);
    };
    };
    $('.typeahead')。typeahead({
    来源:功能(查询、流程){
    $.getJson(“../includes/functions/json_test.php”{
    “查询”:查询
    },函数(数据){
    //控制台日志(数据);
    过程(数据);
    });
    }
    });
    });
    
    我注意到的另一件事是,您的javascript位于脚本标记之外,而
    plugins/typeahead/typeahead.bundle.min.js文件的脚本标记位于它上面的一行。如果这确实存在于JavaScript文件中,则需要将其放入页面上的HTML中,并将JavaScript包装在
    标记中。还要确保JavaScript和PHP文件的路径正确,以便正确加载它们。通常最好为资产提供相对于根URL的绝对URL,例如
    /full/path/to/plugins/typeahead/typeahead.bundle.min.js
    /full/path/to/includes/functions/json\u test.php

    我关心的一件事是,您的
    db_connection.php
    文件似乎在您的webroot中,这意味着人们可以访问并下载您的
    /includes/db_connection.php
    文件,并获取您的所有数据库连接凭据


    如果你需要任何进一步的帮助,让我知道

    在您的
    $.ajax
    中键入什么是
    ?@Sean Typo,抱歉-已删除。您试图在返回的JSON中搜索哪个字段?@LloydBanks contact\u fnameHello Andrew,它不起作用。我有正确的代码位置。我是否必须通过include()在代码中包含json_test.php?另外,在PHP查询的第13行中获得“mysqli_prepare()需要两个参数”。请参阅我对
    mysqli_prepare
    的编辑,最初我是使用
    mysqli
    的OOP实现编写的。当
    getJson
    jQuery调用直接从页面加载javascript时,您不需要在页面中使用
    include()
    。您的项目的公共目录结构是什么?
    <?php
    
        require_once dirname(__FILE__) . ("/../db_connection.php");
        global $connection;
        $search = $_POST['query'];
        $get = "SELECT * FROM contacts WHERE contact_fname LIKE '%{$search}%'";
        $query = mysqli_query($connection, $get);
    
        $json = array();
        while ($rows = mysqli_fetch_assoc($query)) {
          $json[] = $rows;
        }
        $json =  json_encode($json);
        print_r($json);
    ?>
    
     <script src="plugins/typeahead/typeahead.bundle.min.js"></script>
      jQuery(document).ready(function() {
    
    
          // Init Twitter Typeahead.js
        var substringMatcher = function(strs) {
          return function findMatches(q, cb) {
            var matches, substrRegex;
    
            matches = [];
    
            substrRegex = new RegExp(q, 'i');
    
                    $.each(strs, function(i, str) {
              if (substrRegex.test(str)) {
                            matches.push({
                  value: str
                });
              }
            });
    
            cb(matches);
          };
        };
    
    
        $('.typeahead').typeahead({
              source: function (query, process) {
                $.ajax({
                  url: '../includes/functions/json_test.php',
                  type: 'POST',
                  dataType: 'JSON',
                  data: 'query=' + query,
                  success: function(data) {
                    //console.log(data);
                    process(data);
                  }
                });
        }
      });
    
      });
    
    [{"contact_id":"6","contact_account_id":"38","contact_fname":"firstname","contact_lname":"lastname","contact_title":"CEO","contact_phone":"(123) 456-5885","contact_email":"user@email.com","contact_fax":"(123) 456-5885","contact_facebook":null,"contact_twitter":null,"contact_linkedin":null,"contact_is_main":"0"}]
    
    require_once dirname(__FILE__) . ("/../db_connection.php");
    
    global $connection;
    
    $search = $_GET['query'];
    
    $query = "SELECT * FROM `contacts` WHERE `contact_fname` LIKE '%?%'";
    
    $results = [];
    
    if ($stmt = mysqli_prepare($connection, $query)) {
    
        mysqli_stmt_bind_param($stmt, "s", $search);
    
        mysqli_stmt_execute($stmt);
    
        $result = mysqli_stmt_get_result($stmt);
    
        while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC) {
            $results[] = $row;
        }
    }
    
    header("Content-type: application/json");
    
    exit(json_encode($results));
    
    <script src="plugins/typeahead/typeahead.bundle.min.js"></script>
    <script>
    jQuery(document).ready(function() {
    
    
        // Init Twitter Typeahead.js
        var substringMatcher = function(strs) {
            return function findMatches(q, cb) {
                var matches, substrRegex;
    
                matches = [];
    
                substrRegex = new RegExp(q, 'i');
    
                $.each(strs, function(i, str) {
                    if (substrRegex.test(str)) {
                        matches.push({
                            value: str
                        });
                    }
                });
    
                cb(matches);
            };
        };
    
    
        $('.typeahead').typeahead({
            source: function (query, process) {
                $.getJson('../includes/functions/json_test.php', {
                    'query': query
                }, function(data) {
                    //console.log(data);
                    process(data);
                });
            }
        });
    });
    </script>