1

SQLクエリを変更するために、AjaxによってPHPクラス内でPOST値を送信しようとしています。

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 ページは実際にはクラス外の $_POST['filter'] を読み取ることができますが、パブリック関数 getAll() は読み取れません。

私を助けてくれませんか。ありがとう

4

3 に答える 3

0

どこかで、Portfolio クラスのオブジェクトを作成し、getAll() を呼び出している必要があります。そこから、 $_POST['filter'] を getAll のように渡します

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

以下の 2 行は、mPortfolio.php を含む別の PHP 内にある必要があります。

于 2013-09-30T12:54:29.487 に答える
0

次のコードを追加します。

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

クラス宣言の下。

これは、クラスと関数が直接呼び出すことができないためです。インスタンスを作成する必要があるクラスに対してそれらを呼び出してから、クラス内で関数を呼び出す必要があります。クラスまたは関数を呼び出さないと、それらを実行できません。

于 2013-09-30T12:54:45.297 に答える