我刚刚开始开发网站,我是WordPress,PHP,MySQL,JQuery的新手你
-
目的:使用户能够在搜索框和搜索框中键入作业标题,将自动从数据库中填充类似的作业标题,就像Google搜索一样
-
问题:搜索栏下拉列表不断在数据库表中填充所有作业标题,而不管搜索栏中键入哪些文本
-
环境:WordPress上的自定义页面,XAMPP,PHP,HTML,MySQL数据库名称'jobsdatabase'
-
开发人员的编程能力:刚开始开发网站5个月的初学者试图解决此问题6周
相关文件和位置:
c: xampp htdocs wordpress wp-admin admin-ajax.php
c: xampp htdocs wordpress wp-content themes twentysixteen page_search_job_form v6.php
c: xampp htdocs wordpress wp-content themes twentysixteen functions.php
以下是我的WordPress自定义搜索页面的代码----> page_search_job_form v6.php
<?php
get_header();
?>
<!DOCTYPE html>
<html>
<head>
<style>
ul{
background-color:#eee;
cursor:pointer;
}
li{
padding:12px;
}
</style>
<script type="text/javascript" >
jQuery.noConflict();
jQuery(document).ready(function()
{
jQuery('#searchform_jobtitle').keyup(ajaxsubmit);
function ajaxsubmit()
{
var searchform_jobtitle = jQuery(this).val();
if (searchform_jobtitle.length >= 3)
{
jQuery.ajax({
url:'/wordpress/wp-admin/admin-ajax.php',
method:"POST",
data:{'action':'searchform_jobtitle'},
success:function(data)
{
console.log(data);
jQuery("#jobtitle").fadeIn();
jQuery("#jobtitle").html(data);
},
error:function(errorThrown)
{
console(errorThrown);
}
});
}
}
jQuery(document).on('click', 'li', function(){
jQuery('#searchform_jobtitle').val(jQuery(this).text());
jQuery('#jobtitle').fadeOut();
});
});
</script>
</head>
<body>
<form action="/" form type="post" id="searchform_jobtitle1" style="width:500px;">
<input type="text" id="searchform_jobtitle" name="s" placeholder="Search...">
</form>
<div id="jobtitle"></div>
</body>
</html>
以下是我在WordPress函数中包含的代码。php
add_action('wp_ajax_searchform_jobtitle','searchform_jobtitle');
add_action('wp_ajax_nopriv_searchform_jobtitle','searchform_jobtitle');
function searchform_jobtitle()
{
$search_jobtitle = ucfirst($_POST["action"]);
$con = mysqli_connect('127.0.0.1','root','');
if(!$con)
{
echo 'Not connected to server';
$con->print_error();
}
if(!mysqli_select_db($con,'jobsdb'))
{
echo 'Database not selected';
$con->print_error();
}
if(isset($_POST["action"]))
{
$output = '';
$query = "SELECT * FROM job_info WHERE job_title like '%".$_post["action"]."%' ";
$result = mysqli_query($con, $query);
$output = '<ul class="list-unstyled">';
if(mysqli_num_rows($result) > 0)
{
while($row = mysqli_fetch_array($result))
{
$output .= '<li>'.$row["job_title"].'</li>';
}
}
else
{
$output .= '<li>Job Not Found</li>';
}
$output.= '</ul>';
echo $output;
mysqli_close($con);
die();
}
}
您已经为初学者选择了一个复杂的功能!
从哪里开始对此进行故障排除?从这条PHP开始:
$query = "SELECT * FROM job_info WHERE job_title like '%".$_post["action"]."%' ";
1.我认为$_post
应该是大写$_POST
。
2.我知道您在用户没有推出三个以上的字母时抑制AJAX请求的浏览器侧极限。但是,在您的PHP程序中加上相同的限制。如果您的action
变量为空,您将获得此查询;我认为这就是为什么您将桌子的所有行回到自动填充中。
SELECT * FROM job_info WHERE job_title like '%%'
3.如果您的用户将junk'; DROP TABLE job_info; -- '
键入您的搜索框怎么办?在这种情况下,执行的SQL将为
SELECT * FROM job_info WHERE job_title like '%junk'; DROP TABLE job_info; --'%'
似乎不太可能是您想要的。这就是所谓的SQL注入。您需要在您的项目上互联网之前处理它。