-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文件。
無論哪種方式,我會很高興知道我做錯了什麼,所以我可以改進,而不必在將來遇到問題。
在此先感謝!
您的代碼很容易受到[** 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)。 –