2013-09-30 37 views
1

我想通过Ajax发送PHP类内的POST值,以更改我的SQL查询。在PHP类中发送Ajax 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 [ '过滤器'],但公共函数getAll()不能。

你能帮我,请让它工作。 谢谢

+0

您需要instanticate对象并调用该方法。本身的类定义什么都不做。 – Fracsi

+0

您不是在代码中创建该类的实例,那么您如何期望该方法被执行......? – CBroe

+1

** SQL注入**。在将它放入查询之前,请先转义'$ _POST ['filter']' –

回答

0

某处,您必须创建Portfolio类的对象,然后调用getAll()。从那里,通过$ _POST [ '过滤器']到GETALL像

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

的下面2行必须是另一个PHP内,其中将包括mPortfolio.php

0

添加以下代码:

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

低于类声明。

这是因为类和函数无法直接调用。你需要调用它们来创建实例,然后调用该类中的函数。没有调用类或函数,你不能执行它们。在GETALL功能

0

使用

$('#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); 
       } 
     }); 

,并获得价值

OR 

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

此代码将生成错误。 –