gpt4 book ai didi

php - Twitter typeahead 与 mysql 源代码

转载 作者:行者123 更新时间:2023-11-29 22:30:37 27 4
gpt4 key购买 nike

我正在尝试使用 PHP 源文件执行预输入功能。

这是我的输入字段:

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

我的 PHP 源代码:

<?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);
?>

我的 JQuery:

 <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);
}
});
}
});

});

如果我直接使用以下方式访问 PHP 文件,我就可以显示结果:(localhost/X/XX/json_test.php?query=er) - 仅当我将 $_POST 更改为 $_GET 时(不知道为什么) )。Typeahead 根本不起作用。我缺少任何东西。谢谢。

编辑:这是返回的 json:

[{"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"}]

最佳答案

您的代码存在一些问题:

  1. 您只能通过 $_GET 访问它的原因是因为你正在制作 GET向服务器请求。

  2. 当向服务器发出搜索请求时,实际上最好使用 GET请求,因为您正在尝试获取数据而不是操作数据。

  3. 您直接注入(inject)搜索词 mysqli_query直接调用会使您面临 SQL 注入(inject)漏洞。

  4. 使用 print_r不会以可读格式向 JavaScript 提供数据。

  5. 如果未设置正确的 header ( application/json ),则将数据发送回 JavaScript 将导致结果不一致。

我建议执行以下操作

PHP:

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));

JavaScript(HTML 内):

<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>

我注意到的另一件事是你的 javascript 位于脚本标签之外,但你的脚本标签却是 plugins/typeahead/typeahead.bundle.min.js文件位于其上方的行上。如果这确实在 JavaScript 文件中,则需要将其放入页面的 HTML 中,并将 JavaScript 包装在 <script> 中。标签。还要确保 JavaScript 和 PHP 文件的路径正确,以便正确加载它们。通常最好为您的 Assets 提供相对于根 URL 的绝对 URL,例如 /full/path/to/plugins/typeahead/typeahead.bundle.min.js/full/path/to/includes/functions/json_test.php

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

如果您需要任何进一步的帮助,请告诉我!

关于php - Twitter typeahead 与 mysql 源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29833450/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com