2017-05-30 68 views
-1

最近,我一直在嘗試使用jquery/php/xml-rpc創建一個在線CRM,並且我遇到了一個我似乎無法找到解決方案的問題。來自Zend的Ajax響應frameword

我目前有一個ajax請求發送一個元素ID到一個PHP文檔,當它自己打開(作爲一個直接的URL到文檔)返回API服務器的響應(布爾或一些錯誤,如'錯誤數據')。

但是,這並沒有出現在我的頁面,我不確定我發送的數據是否通過了php文檔。

這是我的jQuery代碼:

$('#SomeElement').on('click', function(){ 
    var id = $('#ELEMENTID').attr('value'); 

    $.ajax ({ 
     type:'POST', 
     url: 'PHPfile.php', 
     dataType: 'json', 
     data: {id:id}, 
     success: function(data) { 
      if(data.indexOf('YES') === -1){ 
       $('.alert-success').show(); 
       $('.alert-success').html(data); 

       /*setTimeout(function() { 
        $('.alert-success').fadeOut('slow'); 
        location.reload(); 
       }, 2000);*/ 
      } else { 
       $('.alert-danger').show(); 
       $('.alert-danger').html(data); 

       /*setTimeout(function() { 
        $('.alert-danger').fadeOut('slow'); 
        location.reload(); 
       }, 2000);*/ 
      } 
     } 
    }); 
}); 

這是我的PHP代碼:

require 'init_autoloader.php'; 

Zend\Mvc\Application::init(require 'config/application.config.php')->run(); 

$q = mysqli_query($conn, "SELECT * FROM some db WHERE somekey = '$_POST[id]'"); 

$main = mysqli_fetch_assoc($q); 

if($main['someentry'] !== '0') { 

    echo 'This is FALSE'; 

} else { 

    $r = mysqli_query($conn, "SELECT * FROM side_db WHERE side_id = '$_POST[id]'"); 
    $p = mysqli_query($conn, "SELECT * FROM ext_db WHERE ext_id = '$_POST[id]'"); 
    $m = mysqli_query($conn, "SELECT * FROM img_db WHERE img_id = '$_POST[id]'"); 


    $side = mysqli_fetch_assoc($r); 
    $ext = mysqli_fetch_assoc($p); 

    if((int)$ext['gt'] === '0' || (int)$ext['gt'] === '1') { 
     $g = 'yes'; 
    } else { 
     $g = 'no'; 
    } 

    foreach($ext as $key => $value) { 
     if($key === 'somestring') { 
      continue; 
     }else if($value === '0' || $value === '1') { 
      $ext[$key] = 'no'; 
     } else if($value === '2'){ 
      $ext[$key] = 'yes'; 
     } 
    } 

    foreach($main as $k => $v) { 
     if($v === '0' || $v === '1') { 
      $main[$k] = 'no'; 
     } else if($v === '2'){ 
      $main[$k] = 'yes'; 
     } 
    } 

    require 'init_autoloader.php'; 

    Zend\Mvc\Application::init(require 'config/application.config.php')->run(); 

    $appkey = 'appkey'; 
    $someid = id; 
    $something = 'something'; 
    $else = 'else'; 

    $divarray = Array 
    (
     'HEAL' = Array(
      [0] = "WARLOCK", 
      [1] = "PRIEST", 
      [2] = "ROGUE", 
      [3] = "WARRIOR", 
      [4] = "MAGE" 
     ), 
     "someENTRY" = 'YES' 
    ); 
    $oxClient = new \Zend\XmlRpc\Client('http://link-to-server.php'); 

    $somenewrequest = $oxClient->call('class.OfAPI',array($appkey,$someid,$something,$else,$divarray)); 

    $res = $oxClient->getLastResponse(); 

    echo $res; 

    $client = new \Zend\XmlRpc\Client('http://link-to-server.php'); 

    if($m !== FALSE) { 
     $j = 1; 

     while($img = mysqli_fetch_assoc($m)) { 
      $pather = str_replace('../',"",$img['img_path']); 
      $url = str_replace('www.', "", $_SERVER['HTTP_HOST']); 

      $imagedata = file_get_contents('OUR/FILE/PATH/OF/SERVER'.$url.'/'.$pather); 

      $base64 = base64_encode($imagedata); 

      $SOMEID = $res; 
      $image = $base64; 

      $client->call('CLASS.IMAGESOMETHING',array($appkey,$usr,$psw,$res,$image)); 

      $j++; 
     } 
    } 

    $fin = mysqli_query($conn, "UPDATE our_db SET avalue = '1' WHERE somefield = '$_POST[id]'"); 

    echo 'You succeeded in doing w/e'; 

} 

剔除所有因不必重寫一半的小錯誤,我可能會做的代碼來保護敏感信息,我想知道我可以改變什麼,以便我可以看到在運行ajax的頁面上彈出的響應。

我試過$ res上的JSON.encode,但這似乎並沒有解決任何問題。有什麼我失蹤或我可以做不同的事情,以獲得我需要的反應,甚至看看ajax變量是否通過PHP文件。

無論哪種方式,我會很高興知道我做錯了什麼,所以我可以改進,而不必在將來遇到問題。

在此先感謝!

+0

您的代碼很容易受到[** SQL注入**](https://en.wikipedia.org/wiki/SQL_injection)攻擊。你應該使用[** mysqli **](https://secure.php.net/manual/en/mysqli.prepare.php)或[** PDO **](https://secure.php.net/ manual/en/pdo.prepared-statements.php)準備帶有綁定參數的語句,如[**這篇文章**]所述(https://stackoverflow.com/questions/60174/how-can-i-prevent-sql步噴射功能於PHP)。 –

回答