2016-11-28 2 views
0

내 보고서 웹 사이트에서 동일한 기능을 수행하지 않는 페이지가 2 개 있습니다. DataTables Server Side 처리를 사용하고 있습니다. 첫 번째 페이지에는 74 개의 행만 반환되며 (서버 측 처리를 실제로 사용할 필요가 없다는 것을 알고 있습니다) 다른 페이지에는 65 개 이상의 열이있는 30,000 개 이상의 행이 있습니다. 첫 번째 페이지는 잘 렌더링되고 두 번째 페이지는 페이지를 찾을 수 없다고 표시됩니다.동일한 디렉토리에있는 두 페이지, 한 페이지와 두 페이지 모두 렌더링

편집

페이지가로드되는 방법 :

  1. 전화 얼마나 많은 열이 반환됩니다 ContentSearchpage.php 카운트 파일
  2. included ReportPage.php에 얼마나 많은 행. DBConn.php
  3. included 파일 을 (완전히 난 아직이 부분이 필요하다는 것을 확인하지만, havn't는하지 아직 제거)
  4. 단지 thead와 테이블을 만들 내 SQL의 DB에 연결하는 모든 연결 정보를 가지고 있으며, 모든 <th></th> 열을 기준으로 작성하여 파일을 사용하여 ServerSide.PHP
  5. 을 처리하기 위해 서버로 데이터를 전송하여 다음과 같이 tfoot, 나는
  6. DataTables가 초기화 내 SQL의 DB에 보관 목록에서 반환
  7. ServerSide.php 전송
  8. DataTables의 JQuery와 테이블

이을에 반환 된 JSON 문자열을 포맷하는 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를 사용합니다.

첫 페이지를 잘 실행할 수 있으며 테이블이 나타나고 실행할 수 있습니다. 두 번째 테이블이 나오지 않습니다. 헤더와 다음 메시지가 표시됩니다.

404 - 파일 또는 디렉토리를 찾을 수 없습니다. 찾으려는 리소스가 제거되었거나 이름이 변경되었거나 일시적으로 사용할 수없는 리소스 일 수 있습니다.

문제점이 무엇인지 알 수 없습니다.

+0

내 생각 엔 두 번째 파일을 복사하여 해당 사용 권한이 www- 사용자에 대해 읽기 또는 실행을 허용하지 않도록하는 것입니다. 그 자체가 불충분 한 권한을 가진 filereader를 사용하여 파일을 복사 한 경우 일 수 있습니다. – davidkonrad

+0

@ davidkonrad 그렇다면 두 페이지 중 하나에 대한 테이블이 없을 것입니다. 둘 다 동일한 파일 세트를 사용합니다. 희망을 갖고이를 명확히하기 위해 내 질문을 업데이트했습니다. 서로 다른 페이지 사이에서 변경되는 유일한 것은'ServerSide.php * '파일로 보내지는'PageName'입니다.이 파일은 반환 된 데이터를 얻기위한 SQL 테이블 이름으로 사용됩니다. – Mike

답변

0

나는 이것을 알아 냈습니다.

나는 $_GET을 통해 모든 것을 보냈습니다. 내가 보낸 것의 길이가 한도를 초과 했으므로 실패합니다. 나는 그것이 보내지는 방법을 바꿨고, 지금 $_POST를 사용하고있다. 그래서 데이터를 보낸다. 이제 표가 렌더링됩니다.

"ajax" : { 
     "url" : "./ServerSide.php", 
     "type": "POST" 
    }