【问题标题】:Send Ajax post value inside PHP Class在 PHP 类中发送 Ajax 发布值
【发布时间】:2013-09-30 12:49:40
【问题描述】:

我正在尝试通过 Ajax 在 PHP 类中发送一个 POST 值,以更改我的 SQL 查询。

PHP 页面

 //Link page with Classes
 require_once('mPortfolio.php');
 $mPortfolio  = new Portfolio();
 $all         = $mPortfolio->getAll();

 //Echo sql results here

 //AJAX to send filter value to PHP with Classes
 $('#filters a').on('click', function(e){
        var filter = $(this).data('filter');
        $.ajax({
            type: 'POST',
            url: 'models/mPortfolio.php',
            data: {filter: filter},
            success: function(data){
                alert(data);
            }
        });

PHP 类 mPortfolio.php

echo $_POST['filter']; //This works !

require_once $_SERVER["DOCUMENT_ROOT"].'/models/db/db.php';

class Portfolio{

    private $_db;

    public function Portfolio()
    {
        $this->_db = new db();
        $this->_db->SQLRequest("SET NAMES utf8");
    }

    public function getAll()
    {
        if(isset($_POST['filter'])) :
            $query = "SELECT * FROM portfolio WHERE category='".$_POST['filter']."' AND online = 1 ORDER BY category,pos ASC";
        else :
            $query = "SELECT * FROM portfolio WHERE online = 1 ORDER BY category,pos ASC";
        endif;
        return $this->_db->SQLRequest($query);
    }

}

mPortfolio.php页面实际上可以读取Class之外的$_POST['filter'],但是公共函数getAll()不能。

你能帮我吗? 谢谢

【问题讨论】:

  • 需要实例化对象并调用方法。类定义本身什么也不做。
  • 您没有在代码中创建该类的实例,那么您希望如何执行该方法......?
  • SQL 注入。请先转义$_POST['filter'],然后再将其放入您的查询中

标签: php ajax class post


【解决方案1】:

在某个地方,您必须创建一个 Portfolio 类的对象,并调用 getAll()。从那里,将 $_POST['filter'] 传递给 getAll like

 $portfolioObj = new Portfolio();
 $portfolioObj->getAll($_POST['filter']);

以下两行必须在另一个 PHP 中,其中包括 mPortfolio.php

【讨论】:

    【解决方案2】:

    添加以下代码:

    $portfolio = new Portfolio();
    $returnData = $portfolio->getAll();
    echo $returnData;
    

    在类声明下方。

    这是因为类和函数不能直接调用。您需要为需要创建实例的类调用它们,然后在类中调用该函数。如果不调用类或函数,您将无法执行它们。

    【讨论】:

      【解决方案3】:

      使用

       $('#filters a').on('click', function(e){
                  var filter = $(this).data('filter');
                  $.ajax({
                      type: 'POST',
                      url: 'models/mPortfolio.php/getAll/filter/$_POST['filter']',
                      data: {filter: filter},
                      success: function(data){
                          alert(data);
                      }
               });
      

      并在 getAll 函数中获取值

      OR 
      
      $filter = $_POST['filter'];
      $portfolio = new Portfolio();
      $return = $portfolio->getAll($filter);
      echo $return;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-30
        • 2023-02-07
        • 2017-01-25
        • 1970-01-01
        • 2011-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多