如何在AJAX调用中使用`Foreach()`

时间:2018-12-02 作者:Agreesh V S

我编写了一段代码,用于使用ajax for WordPress从数据库中检索数据。以下代码是在functions.php. 代码用于获取类别id下的id和子类别名称,类别id定义为$cat . 结果,我需要显示为下拉列表

function fetchData(){
  global $wpdb;
    $catId = $_POST[\'key\']; // value from the ajax

        // Now we want to JSON encode these values to send them to $.ajax success.
      if($catId){
         $result_fromDB = $wpdb->get_results("SELECT * FROM  sub_category where categor_id = \'".$catId."\'");
          echo "<option value=\'".$catId."\' >".$catId."</option>"; //This line is returned in ajax. this is a test code
         foreach ($result_fromDB as $subcat) {
                           echo "<option value=\'".$subcat->id."\' >".$subcat->sub_category_name."</option>"; // This line doesnt returned, getting only **<option></option>** in console
          }
      }

        die();
    }
与ajax相对应的代码是,

jQuery.ajax({
    type: \'POST\',
    url: "<?php echo admin_url( \'admin-ajax.php\' ); ?>",
    data: {
         \'key\' : catId,
        \'action\': "fetch_data" // very important
    },
    success : function (data) {
             console.log(data);
             jQuery(\'#sub_cat\').html(data);
            }
  });
有人能给出没有在foreach()/loop

1 个回复
SO网友:Otto

我看到你在帖子上给你的评论中发现了错误,这很好。

然而,应该指出的是,您的代码既包含SQL注入漏洞,也包含反映的XSS漏洞。

$catId = $_POST[\'key\']; // value from the ajax
...
$result_fromDB = $wpdb->get_results("SELECT * FROM  sub_category where categor_id = \'".$catId."\'");
这是一个SQL注入。基本上,您接受用户提供的输入,并将其直接放入SQL语句中,而无需任何形式的清理。

您可以通过正确使用$wpdb->prepare() 在对数据库运行查询之前,或者只需验证您获取的“密钥”的形式是否符合您的预期。

$catId = $_POST[\'key\']; // value from the ajax
...
echo "<option value=\'".$catId."\' >".$catId."</option>";
类似地,此代码将输入直接回显到浏览器。这被称为反射XSS,因为可以简单地将<script> 代码,并让该脚本在您的网站上下文中运行。这可能会以多种方式针对你,尽管其中大多数都需要某种形式的社会工程,比如诱骗你访问浏览器中的恶意网页。

始终验证输入。始终清理输出。始终正确准备SQL语句。没有例外。

相关推荐

How jQuery Works in Wordpress

总之,我有一个流媒体网站,我想用jQuery做一个切换按钮来切换到黑暗/光明模式。请查看我的代码,我的代码有什么问题,bcz这对我不适用。在页脚中。php(在正文上方)<div class=\"gelap-terang\"></div> <script> jQuery.noConflict(); jQuery(document).ready(function(){ jQuery(\".gelap-terang\").hi