2017-08-24 77 views
0

我想让我的代码在使用while循环的HTML表格中显示。但是,我无法让我的桌子显示。我试图回显表格的方式有什么问题吗?虽然HTML表格

<?php 


#-----call includes-----# include('E:/includes/database.php'); 
include('E:/includes/sendmail.php'); 

ini_set('error_reporting', E_ALL^E_NOTICE); 
ini_set('display_errors','on'); 


$do = $_REQUEST['do']; 


$queryOrders = "select t2.SlpName As 'Seller', t1.SWW As 'Vendor', t0.DocDate As 'Date',t0.DocTotal As 'Total' 
       from twh.dbo.OINV t0 
        inner join twh.dbo.inv1 t1 on t0.DocEntry = t1.DocEntry 

     inner join twh.dbo.OSLP t2 on t1.SlpCode = t2.SlpCode 
       where t0.DocDate > DATEADD (month, -2, getdate()) 
        order by t0.DocTotal desc"; 

$resultItemData = sqlsrv_query($con, $queryOrders); 


    echo "<table border=\"1\" align=\"center\">"; 
    echo "<tr><th>Seller</th>"; 
    echo "<th>Vendor</th>"; 
    echo "<th>Date</th>"; 
    echo "<th>Total</th></tr>" 
    while($rowItemData = sqlsrv_fetch_array($resultItemData)){ 
     echo "<tr><td>"; 
     echo "$resultItemData"; 
     echo "</td></tr>"; 
    endwhile; 

    } 
    echo"</table>"; 
+0

查看答案,他们指出你的语法问题..也会建议,不要做每个行的回声 - 这是不需要的。或者使用heredoc。 – gview

回答

0

我没有经历过完整的代码了,但我可以看到,同时

while($rowItemData = sqlsrv_fetch_array($resultItemData)){ 
    echo "<tr>"; 
    echo "<td>".$resultItemData['Seller']."</td>"; 
    echo "<td>".$resultItemData['Vendor']."</td>"; 
    echo "<td>".$resultItemData['Date']."</td>"; 
    echo "<td>".$resultItemData['Total']."</td>"; 
    echo "</tr>"; 
} 

while($rowItemData = sqlsrv_fetch_array($resultItemData)) : 
    echo "<tr>"; 
    echo "<td>".$resultItemData['Seller']."</td>"; 
    echo "<td>".$resultItemData['Vendor']."</td>"; 
    echo "<td>".$resultItemData['Date']."</td>"; 
    echo "<td>".$resultItemData['Total']."</td>"; 
    echo "</tr>"; 
endwhile; 

更新错误的语法: 仍然可以优化的代码,我刚刚给样品工作

+0

是的,但你没有指出与试图回显查询句柄的问题。 – gview

+1

'echo $ resultItemData;'对我很可疑。哪个结果* ..可捕获的致命错误:类sqlsrv_result的对象无法转换为字符串* –

1

修改了一下。检查:

while($rowItemData = sqlsrv_fetch_array($resultItemData)) : 
    echo "<tr><td>"; 
    echo $rowItemData[ColumnValue]; //In your code, didn't access the column value earlier 
    echo "</td></tr>"; 
endwhile; 
0

您应该指定数组$rowitemdata.

的指标例如:

echo"<tr><td>".$rowitemdata['Vendor']." 
1

有在起作用的问题组合:

  1. 首先,你用开放,但接近endwhile; - 虽然技术上不是问题,但并不一致 - 如果您打开{,最好的做法是使用}关闭。

  2. 其次,您试图回显整个数组,这将无法正常工作。

  3. 第三,不需要把值放在引号内:echo "$resultItemData";可以简单地为echo $resultItemData

  4. 第四,你试图回显$resultItemData,这是一个资源,而不是行数据。你想要回显$rowItemData值。

  5. 最后,您可能需要将结果放在关联数组中,而不是数字索引数组,因此您可以考虑使用sqlsrv_fetch_array($resultItemData, SQLSRV_FETCH_ASSOC)

下面是你的代码,修订工作,并按照一个好一点的做法:

// columns: 'Seller',Vendor, 'Date', 'Total' 
while($rowItemData = sqlsrv_fetch_array($resultItemData, SQLSRV_FETCH_ASSOC)) { 
    echo "<tr><td>"; 
    echo "<td>$rowItemData['Seller']</td>"; 
    echo "<td>$rowItemData['Vendor']</td>"; 
    echo "<td>$rowItemData['Date']</td>"; 
    echo "<td>$rowItemData['Total']</td>"; 
    echo "</tr>"; 
} 
+0

好的解释@cale_b。 –

0

让我们假设你的查询实际上产生的结果,因为你不检查,它的作用:

$resultItemData = sqlsrv_query($con, $queryOrders); 

$header = <<<HEREDOC 
<table border="1" align="center"> 
<tr> 
    <th>Seller</th> 
    <th>Vendor</th> 
    <th>Date</th> 
    <th>Total</th> 
</tr> 
HEREDOC; 

echo $header; 

while($rowItemData = sqlsrv_fetch_array($resultItemData)) { 
    echo "<tr> 
      <td>{$rowItemData['Seller']}</td> 
      <td>{$rowItemData['Vendor']}</td> 
      <td>{$rowItemData['Date']}</td> 
      <td>{$rowItemData['Total']}</td> 
      </tr>"; 
} 
echo '</table>'; 

要真正检查查询是否有效,您可能需要这样做。这只是为了调试/说明查询执行的错误检查。您不希望将错误输出到屏幕上,而是将其记录下来。您可能只想输出表头/页脚并完全跳过while /循环。

$resultItemData = sqlsrv_query($con, $queryOrders); 
if (resultItemData === false) { 
    die(print_r(sqlsrv_errors(), true)); 
}