我使用它:foreach ($result as $row) { $row["testID"], $row["subject"], ... };
输出所有值。
sql工作正常,但是当我转到页面时,它总是向我显示所有输出而没有数组中的第一个元素。
例如,如果我向用户显示5个测试,它只显示测试2,3,4和5,但不显示数组$result.
中的第一个测试
这是所有的代码(对不起荷兰语):
require_once( "common.inc.php" );
require_once( "DataObject.class.php" );
class StatistiekAanpassen extends DataObject {
public function toetsen() {
$conn = parent::connect();
$order = isset( $_GET["order"] ) ? preg_replace( "/[^ a-zA-Z]/", "", $_GET["order"] ) : "toetsID";
/*SQL om alle toetsen op te halen*/
$sql = "SELECT toetsID, onderwerp, puntentotaal, vak
FROM Toets
WHERE NOT EXISTS
(SELECT *
FROM LeerlingToets
WHERE Toets.toetsID = LeerlingToets.toetsID AND
LeerlingToets.gebruikerID = " . $_SESSION["member"]->getValue( "gebruikerID" ) . " ) order by " . $order;
$result = $conn->query($sql);
if ($result->fetchColumn()) {
echo "<table id=\"toetsTable\">";
?>
<tr>
<th id="toetsTableIDth"><?php if ( $order != "toetsID" ) { ?><a href="statistiekenAanpassen.php?order=toetsID"><?php } ?>Nr<?php if ( $order != "toetsID" ) { ?></a><?php } ?></th>
<th id="toetsTableIDth"><?php if ( $order != "onderwerp" ) { ?><a href="statistiekenAanpassen.php?order=onderwerp"><?php } ?>Onderwerp<?php if ( $order != "onderwerp" ) { ?></a><?php } ?></th>
<th id="toetsTableIDth"><?php if ( $order != "vak" ) { ?><a href="statistiekenAanpassen.php?order=vak"><?php } ?>Vak<?php if ( $order != "vak" ) { ?></a><?php } ?></th>
<th id="toetsTableIDth"><?php if ( $order != "puntentotaal" ) { ?><a href="statistiekenAanpassen.php?order=puntentotaal"><?php } ?>Puntentotaal<?php if ( $order != "puntentotaal" ) { ?></a><?php } ?></th>
</tr>
<?php
foreach ($result as $row) {
echo "<tr><td class=\"IDtd\"><a href=\"statistiekenAanpassen.php?toetsID=" . $row["toetsID"] . "\">" . $row["toetsID"] . "</a></td>
<td><a href=\"statistiekenAanpassen.php?toetsID=" . $row["toetsID"] . "\">" . $row["onderwerp"] . "</a></td>
<td><a href=\"statistiekenAanpassen.php?toetsID=" . $row["toetsID"] . "\">" . $row["vak"]. "</a></td>
<td><a href=\"statistiekenAanpassen.php?toetsID=" . $row["toetsID"] . "\">" . $row["puntentotaal"]. "</a></td></tr>";
}
echo "</table>";
} else {
echo "<p>Er zijn nog geen toetsen.<p>";
echo "<p>OF<p>";
echo "<p>U heeft voor alle toetsen al punten ingegeven.<p>";
}
}
}
如何输出所有元素,也是第一个元素?
答案 0 :(得分:3)
很可能是$ result-&gt; fetchColumn()已经获取了第一条记录,并使其为foreach循环“不可用”。
您可以使用标志变量来“检查”此迭代是否是第一个,如果是,则打印表头。并且通过此标志循环检查后是否至少打印了一条记录,如果没有打印错误消息。
或者你从for(每个)循环切换到do-while循环,让循环体打印“previous”记录的内容,即已经在if-condition中“取出”的记录或者“在”上一次迭代的while条件内。
if ( !($row=$result->fetchRow()) ) { // or whatever the method to fetch one record is called
echo "
<p>Er zijn nog geen toetsen.<p>
<p>OF<p>
<p>U heeft voor alle toetsen al punten ingegeven.<p>
";
}
else {
// <-- put table tag and table header here -->
do {
// <-- print the current table row here -->
}
while( $row=$result->fetchRow() ); // again: or whatever the method to fetch one record is called
// <-- close the table tag here -->
}
(并且可能有一个倒带/重置方法将记录指针设置回开始之前,以便foreach将再次遍历第一个记录。)
答案 1 :(得分:2)
fetchcolumn使第一列不可用,请使用
$result->fetch_assoc()