首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >wordpress中的自动完成搜索功能不断填充数据库中的所有职务

wordpress中的自动完成搜索功能不断填充数据库中的所有职务
EN

Stack Overflow用户
提问于 2017-01-01 10:38:12
回答 1查看 709关注 0票数 0

我刚开始开发网站,我刚接触过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

代码语言:javascript
运行
复制
<?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 function.php中包含的代码

代码语言:javascript
运行
复制
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();

}   

}    
EN

回答 1

Stack Overflow用户

发布于 2017-01-01 13:04:05

你已经为初学者选择了一个复杂的特性!

从哪里开始疑难解答?从下面这一行php开始:

代码语言:javascript
运行
复制
$query = "SELECT * FROM job_info WHERE job_title like '%".$_post["action"]."%' ";
  1. 我认为$_post应该是大写的$_POST
  2. 我知道,当用户没有按三个以上的字母时,您有一个浏览器侧限制来抑制AJAX请求。但是在php程序中设置相同的限制。如果您的action变量是空的,那么您将得到这个查询;我认为这就是为什么您将把表中的所有行返回到自动完成中。

代码语言:javascript
运行
复制
SELECT * FROM job_info WHERE job_title like '%%' 
  1. 如果您的用户在搜索框中键入junk'; DROP TABLE job_info; -- '怎么办?在这种情况下,执行的SQL将是
代码语言:javascript
运行
复制
SELECT * FROM job_info WHERE job_title like '%junk'; DROP TABLE job_info; --'%' 

这似乎不可能是你想要的。这就是所谓的SQL注入。你需要在你的项目在互联网上运行之前处理它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41414846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档