我遇到一个PHP PHP/JSON数据被PHP返回的奇怪问题。这是我的PHP:将数组从AJAX传递到PHP,然后将数据传回为JSON
$aColumns = array('Action', 'TimeOccurred', 'UserName', 'IPv4From', 'ShareName', 'FullFilePath', 'NewPathName', 'FromServer');
//$aColumns = $_POST['selcolumns'];
//$aColumns = explode("-", $aColumns);
foreach ($aColumns as $col) {
file_put_contents('../php/php-debug.txt', $col." ", FILE_APPEND);
}
如果我离开我的代码是通过这个过程中我找回数据如预期,一切都运行:
<?php
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Easy set variables
*/
/* Array of database columns which should be read and sent back to DataTables. Use a space where
* you want to insert a non-database field (for example a counter or static image)
*/
// add your columns here!!!
$aColumns = array('Action', 'TimeOccurred', 'UserName', 'IPv4From', 'ShareName', 'FullFilePath', 'NewPathName', 'FromServer');
//$aColumns = $_POST['selcolumns'];
//$aColumns = explode("-", $aColumns);
foreach ($aColumns as $col) {
file_put_contents('../php/php-debug.txt', $col." ", FILE_APPEND);
}
$server = "";
$database = array("Database" => "");
$conn = sqlsrv_connect($server, $database);
if ($conn === false) die("<pre>".print_r(sqlsrv_errors(), true));
/* Indexed column (used for fast and accurate table cardinality) */
$sIndexColumn = "GUID";
/* DB table to use */
$sTable = $_POST['table'];
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* If you just want to use the basic configuration for DataTables with PHP server-side, there is
* no need to edit below this line
*/
/*
* Local functions
*/
function fatal_error ($sErrorMessage = '') {
header($_SERVER['SERVER_PROTOCOL'] .' 500 Internal Server Error');
die($sErrorMessage);
}
/* Ordering */
$sOrder = "";
if (isset($_POST['order'])) {
$sOrder = "ORDER BY ";
if ($_POST['columns'][0]['orderable'] == "true") {
$sOrder .= "".$aColumns[ intval($_POST['order'][0]['column']) ]." ".
($_POST['order'][0]['dir']==='asc' ? 'asc' : 'desc');
}
}
/* escape function */
function mssql_escape($data) {
if(is_numeric($data))
return $data;
$unpacked = unpack('H*hex', $data);
return '0x' . $unpacked['hex'];
}
/* Filtering */
$sWhere = "";
if (isset($_POST['search']['value']) && $_POST['search']['value'] != "") {
$sWhere = "WHERE (";
for ($i=0 ; $i<count($aColumns) ; $i++) {
$sWhere .= $aColumns[$i]." LIKE '%".addslashes($_POST['search']['value'])."%' OR ";
}
$sWhere = substr_replace($sWhere, "", -3);
$sWhere .= ')';
}
/* Individual column filtering */
for ($i=0 ; $i<count($aColumns) ; $i++) {
if (isset($_POST['columns'][$i]) && $_POST['columns'][$i]['searchable'] == "true" && $_POST['columns'][$i]['search']['value'] != '') {
if ($sWhere == "") {
$sWhere = "WHERE ";
}
else {
$sWhere .= " AND ";
}
$sWhere .= $aColumns[$i]." LIKE '%".addslashes($_POST['columns'][$i]['search']['value'])."%' ";
}
}
/* Add the custom Date/Time filter */
if ($sWhere == "") {
$sWhere = "WHERE (TimeOccurred >= "."'".$_POST['datestart']."'"." AND TimeOccurred <= "."'".$_POST['dateend']."')";
}
else {
$sWhere .= " AND (TimeOccurred >= "."'".$_POST['datestart']."'"." AND TimeOccurred <= "."'".$_POST['dateend']."')";
}
/* Paging */
$top = (isset($_POST['start']))?((int)$_POST['start']):0 ;
$limit = (isset($_POST['length']))?((int)$_POST['length']):5;
$sQuery = "SELECT TOP $limit ".implode(', ', $aColumns)." FROM $sTable $sWhere ".(($sWhere=="")?" WHERE ":" AND ")." $sIndexColumn NOT IN (SELECT TOP $top $sIndexColumn FROM $sTable $sOrder) $sOrder";
$rResult = sqlsrv_query($conn, $sQuery);
if($rResult === false){
die(sqlsrv_errors(SQLSRV_ERR_ERRORS));
}
/* Data set length after filtering */
$sQueryCnt = "SELECT * FROM $sTable $sWhere";
$rResultCnt = sqlsrv_query($conn, $sQueryCnt, array(), array("Scrollable" => SQLSRV_CURSOR_KEYSET));
$iFilteredTotal = sqlsrv_num_rows($rResultCnt);
/* Total data set length */
$sQuery = "SELECT COUNT(GUID) FROM $sTable";
$rResultTotal = sqlsrv_query($conn, $sQuery, array(), array("Scrollable" => SQLSRV_CURSOR_KEYSET));
$aResultTotal = sqlsrv_fetch_array($rResultTotal, SQLSRV_FETCH_NUMERIC);
$iTotal = $aResultTotal[0];
/* Output */
$output = array(
"draw" => intval($_POST['draw']),
"recordsTotal" => $iTotal,
"recordsFiltered" => $iFilteredTotal,
"data" => array()
);
while ($aRow = sqlsrv_fetch_array($rResult, SQLSRV_FETCH_ASSOC)) {
$row = array();
for ($i=0 ; $i<count($aColumns) ; $i++) {
$row[$aColumns[$i]] = $aRow[ $aColumns[$i] ];
}
$output['data'][] = $row;
}
echo json_encode($output);
?>
已经我坚持代码的一部分作品。我也得到这个输出在我的PHP-DEBUG.TXT:
行动TimeOccurred用户名IPv4From共享名FullFilePath NewPathName FromServer
如果我修改我的几行代码,以这样的:
//$aColumns = array('Action', 'TimeOccurred', 'UserName', 'IPv4From', 'ShareName', 'FullFilePath', 'NewPathName', 'FromServer');
$aColumns = $_POST['selcolumns'];
$aColumns = explode("-", $aColumns);
foreach ($aColumns as $col) {
file_put_contents('../php/php-debug.txt', $col." ", FILE_APPEND);
}
我不按预期得到数据。我得到一个警告,指出无效JSON响应,并在我的PHP-DEBUG.TXT我得到这样的内容:
行动TimeOccurred用户名IPv4From共享名FullFilePath NewPathName FromServer
它快把我逼疯了阵列具有相同的值或者方式,但它不起作用。第二次在php-debug.txt结尾处有一个额外的空间,不确定它来自哪里或者是否是问题。
希望有人能指出我正确的方向。
尝试'var_dump($ aColumns);'在你的foreach之前,看看数据是否看起来像你认为应该的 – aynber
这就是我看到的:array(1){[0] => string(0)“”}}不幸的是,我不知道在浏览器中打开该PHP文件,并将POST数据传递给数组。 –
它在'$ _POST'中寻找变量。如果它不是来自一个表单,你会找出它应该来自哪里。 – aynber