2016-11-28 37 views
0

私のレポートWebサイトには同じことをしていない2ページあります。私はDataTables Server Side処理を使用しています。最初のページには74行しか返されません(実際にはサーバー側の処理を使用する必要はありません)、もう1ページには65,000以上の列を持つ30,000以上の行があります。最初のページはうまく表示され、2番目のページはページが見つからないと表示されます。2ページ、1つはレンダリングされ、1つは同じディレクトリにありません

EDIT

ページがロードされている方法:

  1. コールどのように多くの列が返されますContentSearchpage.phpカウントファイル
  2. included ReportPage.phpに、どのように多くの行。 DBConn.php
  3. includedファイルを(完全に私はまだこの部分を必要としていることを確認しますが、やりなさいではないが、まだそれを削除)
  4. だけtheadでテーブルを作成し、私のSQLのDBに接続するため、すべての接続情報を持っており、すべての<th></th>列に基づいて記入したファイルを使用してServerSide.PHP
  5. を処理するためにサーバにデータを送信することにより、以下に示すようにtfootは、私が
  6. のDataTableが初期化されている私のSQL DBに保つリストから返さ
  7. ServerSide.phpは、データを処理するためにサーバー上で使用されているもので、JSON文字列を返す
  8. のDataTableのjQueryのテーブルに

これを返されたJSON文字列をフォーマットFilterSort.class.phpに収集した情報を送信します

<h1> 
    <?php 
    echo $HeadingDesc; 
    if (strpos($_SERVER['PHP_SELF'],"/",1) > 0) 
    { 
     echo "<br>Dev Site"; 
    } 
    ?> 
</h1> 
<?php 
//echo "<br>PageName: " . $Page; 
//include('ContentPage.php'); 
//var_dump($Page); 
//include ('Selected.php'); 
//var_dump($Page); 
/* if(($Page == 'COEI_OPR' || $Page == 'OSP_OPR' || $Page == 'MaterialTracking' || $Page == 'MaterialReceived' || $Page == 'ApprovedProjects_PrevDay' || $Page == 'ApprovedProjects' || $Page == 'M6Action' || $Page == 'OPR_COEI' || $Page == 'OPR_OSP'))// && !isset($_GET['Project'])) 
    { 
    require_once 'SearchTerm.php'; 
    //include 'ContentSearchPage.php'; 
    include 'DBConn.php'; 
    } 
    else 
    { */ 
include 'ContentSearchPage.php'; 
include 'DBConn.php'; 

$getHeadings = $conn->query($hsql); 
$rHeadings  = $getHeadings->fetchALL(PDO::FETCH_ASSOC); 
$CountHeadings = count($rHeadings); 
//print_r($hsql); 
$tsqlHeadings = ''; 
for ($row = 0; $row < $CountHeadings; $row++) 
{ 
    $headings[$row] = $rHeadings[$row]["Headings"]; 
    $tsqlHeadings = $tsqlHeadings."[".$headings[$row].'],'; 
} 

if ($DataTable == 1) 
{ 
    $CountTSQL = "Select count(*) ".$tsql; 
    $tsql  = "Select ".substr($tsqlHeadings,0,strlen($tsqlHeadings) - 1).$tsql; 
} 
else 
{ 
    $CountTSQL = "Select count(*) ".$tsql; 
    $tsql  = "Select ".substr($tsqlHeadings,0,strlen($tsqlHeadings) - 1).$tsql." order by Id OFFSET $offset ROWS FETCH NEXT $limit ROWS ONLY"; 
} 
?> 
<table id="DataTable" class="display nowrap" style="width: 100%; border: 1px"> 
    <thead> 
     <tr> 
      <?php 
      foreach ($headings as $heading) 
      { 
       ?> 
       <th class="cell"><?php echo $heading; ?></th> 
       <?php 
      } 
      ?> 
     </tr> 
    </thead> 
    <tfoot> 
     <tr> 
      <?php 
      foreach ($headings as $heading) 
      { 
       ?> 
       <th class="cell"> 
        <?php echo $heading; ?> 
       </th> 
       <?php 
      } 
      ?> 
     </tr> 
    </tfoot> 
</table> 
<?php //} ?> 
</body> 

<script type="text/javascript" class="init"> 
    $(document).ready(function() 
    { 
     console.log("Test"); 
     $('#DataTable').DataTable({ 
      initComplete: function() { 
       this.api().columns().every(function() { 
        var column = this; 
        var select = $('<select><option value=""></option></select>') 
          .appendTo($(column.footer()).empty()) 
          .on('change', function() { 
           var val = $.fn.dataTable.util.escapeRegex($(this).val()); 
           column.search(val ? '^' + val + '$' : '', true, false).draw(); 
          }); 
        column.data().unique().sort().each(function (d, j) { 
         select.append('<option value="' + d + '">' + d + '</option>') 
        }); 
       }); 
      }, 
      "lengthMenu": [[25, 50, 75, 100, 150], [25, 50, 75, 100, 150]], 
      "ScrollX": true, 
      "dom": '<"top"Biflp<"clear">>rt<"bottom"ip<"clear">>', 
      "buttons": [ 
       {extend: 'collection', text: 'Selection', buttons: ['selectAll', 'selectNone']}, 
       {extend: 'collection', text: 'Export', buttons: ['excel', 'csv', 'pdf']}], 
      "fixedHeader": {header: true, footer: false}, 
      "select": true, 
      "processing": true, 
      "serverSide": true, 
      "ajax": {"url": "ServerSide.php?PageName=<?php echo $Page; ?>"} 
     }); 
    }); 
</script> 

これは私がページを始めてどのようにされています。私は、ページを初期化していていますか

ContentSearchPage.php

<?php 
case 'MaterialTrackingAll': 
try 
{ 
    include 'SearchParameters.php'; 
    include 'DBConn.php'; 

    $OneButton = 1; 
    $Edit  = 0; 
    $SQLArray = array ("searchState" => $searchState,"searchProject" => $searchProject); 

    $CountSQL = "select count(*) from pmdb.v_MaterialTracking_OPCEN"; 
    $TotalRows = $conn->query($CountSQL)->fetchColumn(); 
    $offset  = ''; 
    $currentpage = ''; 
    $DataTable = 1; 

    $tsql = " FROM pmdb.v_MaterialTracking_OPCEN"; 
    $hsql = "select Headings from TableHeadings where TableName = 'v_MaterialTracking_OPCEN' order by ID"; 
} 
catch (Exception $e) 
{ 
    die(print_r($e->getMessage())); 
} 
break; 
case 'QDefs': 
try 
{ 
    include 'SearchParameters.php'; 
    include 'DBConn.php'; 
    $Edit  = 1; 
    $OneButton = 1; 
    $SQLArray = array ("searchState" => $searchState,"searchProject" => $searchProject); 

    $CountSQL = "select count(*) from pmdb.v_QDefs"; 
    $TotalRows = $conn->query($CountSQL)->fetchColumn(); 
    if ($TotalRows > 500) 
    { 
     include 'NavButtons.php'; 
     $DataTable = 0; 
    } 
    elseif ($TotalRows <= 500) 
    { 
     $offset  = ''; 
     $currentpage = ''; 
     $DataTable = 1; 
    } 
    $tsql = " from pmdb.v_QDefs"; 
    $hsql = "select Headings from TableHeadings where TableName = 'v_QDefs' and Headings != 'Edit' order by Id"; 
} 
catch (Exception $e) 
{ 
    die(print_r($e->getMessage())); 
} 
break; 
?> 

およびファイルServerSide.phphereからssp.class.phpを呼び出すファイルだけ変更されたバージョンである、と私はを修正しましたssp.class.phpこれにより、MySqlではなくPDO :: SQLSRVが使用されます。

私は最初のページをうまく走らせることができ、テーブルが現れ、実行可能です。 2番目のテーブルが表示されません。私は、ヘッダーと、次にメッセージを得る:

404 - ファイルまたはディレクトリが見つかりません。 探しているリソースが削除されているか、名前が変更されているか、一時的に使用できない可能性があります。

問題の内容がわかりません。

+0

私の推測では、2番目のファイルをコピーして、そのパーミッションがwww-ユーザーの読み取りまたは実行を許可しないようにしていると思います。あなた自身が不十分な権限を持っているfilereaderを使ってファイルをコピーしている場合、そうかもしれません。 – davidkonrad

+0

@davidkonradそうだった場合、どちらのページのテーブルも持っていないでしょう。どちらも同じファイルセットを使用します。私はこのことをうまく解明するために質問を更新しました。異なるページ間で変更される唯一のものは、* ServerSide.php *ファイルに送られる 'PageName'です。これは、返されるデータを取得するためのSQLテーブル名として使用されます。 – Mike

答えて

0

私はこれを理解しました。

$_GETですべてを送信しました。私が送っていたものの長さが限界を超えたので、それは失敗するでしょう。私はそれが送信された方法を変更し、今は$_POSTを使用しているので、データを送信します。テーブルはレンダリングされます。

"ajax" : { 
     "url" : "./ServerSide.php", 
     "type": "POST" 
    } 
関連する問題