51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

wordpress文章页面交互:用户通过前端页面提交自定义查询,网站后台查询数据库并返回结果

热帖最近找到个城市代码对应身份证前6位的文档,感觉还挺有用的,想要在网站上分享给大家。但是有个问题,这个文档有2000+行,想要全部贴出来排版太难看了;如果只是分享文件的话,每次都要down下来再查看又太麻烦了。那能不能自定义一篇文章或者页面,页面内提供输入框和查询按钮,用户输入城市名称并提交查询,网站接收到要查询的城市信息后,在后台查询数据库并返回结果呢?

技术上是可以实现的,需要借助AJAX实现网页异步更新。工作过程可分为2部分:一、wordpress在wp-admin目录下有个admin-ajax.php的文件,前端页面将post请求发送给admin-ajax.php;二、在主题functions.php中定义钩子函数,处理传来的参数、执行数据库查询、并返回查询结果。具体操作如下:

1、新建php页面模板,添加Script脚本,实现前端提交post请求:

// javascript
<script>
<?php $admin_url=admin_url( 'admin-ajax.php' ); ?>
$(document).ready(function($){
var data={
action:'postQuery',
data: '要传递的数据'    //用户输入的查询数据
}

$.post("<?php echo $admin_url;?>", data, function(response) {
if(!response){
return;
}else{
$("#tagRes").html(response);     // 在页面id中展示返回的结果
}
});
});
</script>

2、打开当前主题functions.php文件,定义钩子函数:

// functions.php
function postQuery(){
$data = $_POST['data']; // 得到传递参数
$qresult = ""; //初始化查询结果
//连接数据库
$conn=mysqli_connect("localhost","数据库用户名","数据库密码");
if(!$conn){
die("链接失败".mysqli_errno());
}
//设置数据库编码方式
mysqli_query($conn,"SET NAMES 'utf8'") or die(mysqli_errno());
//选择数据库
mysqli_select_db($conn,"数据库名称") or die(mysqli_errno());
//根据用户提交的城市名称查询数据库
$sql="select citycode from CityID where cityname='$data'";
$res=mysqli_query($conn,$sql);
if(!$row=mysqli_fetch_row($res)){
echo "查询失败,你输入的城市不存在!";
}else{
$qresult=$row['0'];
}
echo $qresult;    //输出查询结果
mysqli_close($conn);
wp_reset_query();
die();
}
add_action('wp_ajax_postQuery', 'postQuery');
add_action('wp_ajax_nopriv_postQuery', 'postQuery');

Warning,要郑重强调一下,自定义数据查询虽然可以实现,但非常非常不建议去这样做。直接将数据查询暴露出来,且没有对请求数据做专业的过滤处理,很容易被网络攻击人员拼接一些SQL错误诱导语句提权或者破坏数据库数据之类的,那样的结果就太可怕了。

赞(1)
未经允许不得转载:工具盒子 » wordpress文章页面交互:用户通过前端页面提交自定义查询,网站后台查询数据库并返回结果