2013-06-10 4 views
0

Я создаю динамическую таблицу, используя php, грушу HTML_Table и sql. Мой первый запрос извлекает информацию для заголовков таблиц, а затем груша использует это для создания заголовков. Следующий запрос извлекает информацию из нескольких таблиц, чтобы вернуть правильные наборы данных. Затем мне нужно связать эти наборы данных с заголовками и отобразить результаты по каждому соответствующему столбцу. Я могу отображать все данные, но не правильно. Столбец 0 начинается с строки 1 и отображает текущие 4 тестовых элемента, столбец 1 начинается в строке 5 и отображает текущие 2 тестовые элементы, тогда столбец 2 начинается с 7 ... Как я могу получить количество столбцов для сброса до 0 после в предыдущем столбце заканчиваются совпадающие данные? Другая часть этой проблемы заключается в том, что мне также необходимо применить rowSpans к вставленным данным, поскольку это проект планирования. Я занимаюсь этим уже неделю и не могу найти подходящих примеров или предложений. Что мне не хватает, поскольку я не думаю, что это должна быть такая трудная задача? Код ниже.расширенные таблицы с грушей php

<?php 
    session_start(); 
    include_once("../php/functions.php"); 
    include_once("HTML/TABLE.PHP"); 

    $assetHead = headers('Assets', $_SESSION['deptID']); 
    $captionHeading = $_SESSION['dept']; 
    $conn = connect(); 

    $attrs = array('id' => 'main', 
        'width' => '100%', 
        'Border' => '1'); 

    $table = new HTML_Table($attrs); 
    $table->setAutoGrow(true); 
    $table->setAutoFill('n/a'); 

    $sql_assets = "select AssetName, AssetID 
        from Assets 
        where Assets.DepartmentID = $_SESSION[deptID]"; 

    $stmt1 = sqlsrv_query($conn, $sql_assets); 
    if ($stmt1) 
    { 
     $rows = sqlsrv_has_rows($stmt1); 
     if ($rows === true) 
     { 
      while($row = sqlsrv_fetch_array($stmt1, SQLSRV_FETCH_ASSOC)) 
      { 
       $assetName [] = $row['AssetName']; 
       $assetID [] = $row['AssetID']; 
      } 
     } 
    } 
    else 
    { 
     die(print_r(sqlsrv_errors(), true)); 
    } 

    $i = 0; 
    foreach($assetName as $val) 
    { 
     $table->setHeaderContents(0, $i++, $val); 
     unset($val); 
    } 
     sqlsrv_close($conn); 
     $conn = connect(); 

    $tsql = "select + 'Job#' + CAST (JobNum AS VARCHAR(10))+ ' ' + Description AS newField, datediff(MI,StartTime, EndTime)/15 as 'RowSpan', AssetName, AssetID 
      from Calendar_View, Departments, Status, Assets 
      where Departments.DepartmentName = '$captionHeading' and Calendar_View.Department = Departments.DepartmentID and AssetStatus = Status.StatusID and 
      Calendar_View.Asset = Assets.AssetID 
      order by AssetID asc"; 
    $rowcounter = 1; 

    $stmt = sqlsrv_query($conn, $tsql); 
    if ($stmt) 
     { 

      while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) 
      { 
       for ($i = 0; $i < count($assetID);$i++) 
       if ($row['AssetID'] == $assetID[$i]) 
       $table->setCellContents($rowcounter++,$i,$row['newField']); 
      } 
     } 

    else 
    { 
     die(print_r(sqlsrv_errors(), true)); 
    } 

    sqlsrv_close($conn);  
    echo $table->toHTML(); 
?> 
</body> 
</html> 

$ headerCounter = 0; $ stmt = sqlsrv_query ($ conn, $ tsql); if ($ stmt) {
$ rows = sqlsrv_has_rows ($ stmt); if ($ rows === true) {
$ cellCounter = 1; $ cellPosition = 0; $ rowCounter = 1; echo "Положение заголовка вне цикла: $ headerCounter
";

ответ

0

Хорошо, проблема в том, что я не увеличивал переменную rowcounter после того, как оставил исходный цикл. Следующая строка:

$cellPosition++; 
      $rowCounter = 1; 
      $headerCounter++; 
      $table->setCellContents($rowCounter,$cellPosition,$row['newField']); 

Должно быть:

$cellPosition++; 
      $rowCounter = 1; 
      $headerCounter++; 
      $table->setCellContents($rowCounter++,$cellPosition,$row['newField']); 

Извините за плохое форматирование исходного поста. Я не уверен, что пошло не так.

Смежные вопросы