PHP、pear HTML_Table、および sql を使用して動的テーブルを作成しています。私の最初のクエリはテーブル ヘッダーの情報を取得し、pear はこれを使用してヘッダーを作成します。次のクエリは、複数のテーブルから情報を取得して、正しいデータ セットを返します。次に、これらのデータ セットをヘッダーに関連付けて、一致する各列に結果を表示する必要があります。すべてのデータを表示できますが、正しく表示されません。列 0 は行 1 から始まり、現在の 4 つのテスト項目を表示し、列 1 は行 5 から始まり、現在の 2 つのテスト項目を表示し、列 2 は 7 から始まります...どうすれば列数を 0 にリセットできますか?前の列は一致するデータを使い果たしますか? この問題の他の部分は、これがスケジューリング プロジェクトであるため、挿入されたデータに rowSpans を適用する必要があることです。私はこれを 1 週間続けていますが、関連する例や提案を見つけることができませんでした。これはそれほど難しい作業ではないと思うので、何が欠けていますか? 以下のコード。
<?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
";
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) )
{
if ($row['AssetID'] == $assetID[$headerCounter])
{
echo "<br>begining of if statement<br>";
echo "Header (beginning of loop) = " . $assetName[$headerCounter] . "<br>" ;
echo "Header Position (beginning of loop) = " . $headerCounter . "<br>";
echo "Row position = " . $rowCounter . "<br>" ;
echo "Cell position = " . $cellPosition . "<br>";
echo "<pre>";
var_dump($row);
echo "</pre>";
/*foreach ($row as $result)
{
echo "<pre>";
var_dump($result);
echo "</pre>";
}*/
$table->setCellContents($rowCounter,$cellPosition,$row['newField']);
//echo "$headerCounter";
//echo "<br>";
echo "Header Name (end of loop) = " . $assetName[$headerCounter] . "<br>" ;
echo "Header Position (end of loop) = " . $headerCounter . "<br>";
echo "Row position = " . $rowCounter . "<br>" ;
echo "Cell position = " . $cellPosition . "<br>";
//$cellPosition++;
$rowCounter++;
echo "end of if statment<br><br>";
}
else
{
echo "<br>header before increase $headerCounter";
echo "<br>header name outside of loop, before increment $assetName[$headerCounter]";
$cellPosition++;
$rowCounter = 1;
$headerCounter++;
$table->setCellContents($rowCounter,$cellPosition,$row['newField']);
echo "<br>header name outside of loop, after increment $assetName[$headerCounter]";
echo "<br>header increased by 1, now: $headerCounter";
}
}//$headerCounter++;
//$table->setCellContents($rowCounter,$cellPosition,$row['newField']);
}