2017-06-05 7 views
0

PHPが返すPHP/JSONデータに奇妙な問題があります。ここに私のPHPは次のとおりです。AJAXからPHPへ配列を渡して、JSONとしてデータを渡します。

  <?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); 

      ?> 

私は立ち往生しているコードの一部:

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

私があるように私のコードを残して、プロセスを実行した場合、予想通り、私は戻ってデータを取得し、すべてのもの働く私はこれに私のコードのこれらの行を変更した場合

アクションTimeOccurredユーザー名IPv4From共有名FullFilePath NewPathName FromServer

:私も自分のphp-DEBUG.TXTで、この出力を得る

  //$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を

配列のいずれかと同じ値を持っていることを私は狂気運転している

まだそれは動作しません。 2回目にphp-debug.txtの最後に余分なスペースがあります。どこから来たのか、それが問題なのかはわかりません。

誰かが私を正しい方向に向けることを望みます。

+0

あなたのforeachの前に 'var_dump($ aColumns);'を実行して、データがあなたが思うように見えるかどうかを確認してください。 – aynber

+0

これは私が見るものです:array [1] {[0] => string(0)残念ながら、ブラウザでPHPファイルを開き、POSTデータを渡して配列を埋める方法はありません。 –

+0

変数の '$ _POST'を探しています。それがフォームから来ていない場合、あなたはどこから来ると考えられるのか把握するでしょう。 – aynber

答えて

0

問題を見つけました。何らかの理由で余分な要素が配列に追加されますが、空の要素なので、印刷すると何もありません。私はこれを私のコードarray_pop($ aColumns)に加えました。今のところ問題を解決しました。しかし、そのような汚いワークアウトの種類、私は助けることはできませんが、最終的に最後の要素が空ではないと私は必要なものがないシナリオが来るだろうと思う。より洗練されたソリューションを見つけ出すことが大好きです。

関連する問題