Php TwitterTypeahead与mysql源代码
我正在尝试一个带有PHP源文件的typeahead函数 这是我的输入字段: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调用中
<input type="text" class="form-control typeahead" id="test-field" placeholder="Contact"/>
您的代码存在一些问题:
$\u GET
访问它的原因是您正在向服务器发出GET
请求GET
请求,因为您试图获取数据,而不是操纵数据mysqli\u query
调用中注入SQL注入漏洞print\r
不会为JavaScript提供可读格式的数据application/json
)将导致不一致的结果
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>