我正在玩PHP一点,我正在尝试动态链接。我的问题是我的代码对应的ID没有正确到URL,所以我每次都有相同的链接。
这就是我所拥有的:
<?php
$connection = mysqli_connect('localhost', 'root', 'password');
mysqli_select_db($connection, 'filme');
$query = "SELECT * FROM filme";
$result = mysqli_query($connection, $query);
$filmID = mysqli_fetch_assoc($result);
$array = array();
while($row = mysqli_fetch_assoc($result)){
$array[] = $row['Name'] . " - " . $row['Preis'];
}
$chunks = array_chunk($array, 4);
$filmID = mysqli_fetch_assoc($result);
echo "<table class='filme'>";
foreach ($chunks as $chunk){
echo '<tr>';
foreach ($chunk as $val) {
?><td><a href="dvd.php?Film_ID=<?php echo $filmID['Film_ID']; ?>"><?php echo $val; ?> </a></td><?php
}
echo '</tr>';
}
echo "</table>";
mysql_close();
?>
我要做的是显示一个包含四列的表,每个单元格中都有一个格式为“Film name - Price”的字符串,这个字符串应该是一个指向带有相应页面的链接ID。这段代码确实显示了我的四列表,但它缺少我数据库的第一项,并且每个链接的ID都是相同的,即缺少第一部电影的ID。所以每个网址都是这样的:
http://localhost/dvd.php?Film_ID=1000
但是ID 1000的电影甚至没有列出。我想过将嵌套的foreach循环放在带有
的while循环中while($filmID = mysqli_fetch_assoc($result)){
...
}
但随后我得到一个空白页。
我几乎没有使用过PHP的经验,很抱歉,如果我遗漏了一些非常明显的东西。
答案 0 :(得分:1)
你这是错误的方式。 $array
和$filmID
的内容之间没有链接。实际上,$filmID
可能是空的,因为您之前已经完成了结果集。想象一下,您的数据库结果集就像一堆文件。每次拨打fetchAssoc()
都会读取一张纸,并将其放在一边。一旦到达结果集的末尾,就没有什么可读的了,因此您的下一次调用将失败。您需要在单个循环中执行所有数据库提取。同样,您不应该将mysql_close()
与mysqli一起使用。
<?php
$connection = mysqli_connect('localhost', 'root', 'password');
$connection->select_db('filme');
$query = "SELECT * FROM filme";
$result = $connection->query($query);
$array = array();
while($row = mysqli_fetch_assoc($result)){
$array[] = $row;
}
$chunks = array_chunk($array, 4);
echo "<table class='filme'>";
foreach ($chunks as $chunk){
echo '<tr>';
foreach ($chunk as $film) {
?><td><a href="dvd.php?Film_ID=<?php echo $film['Film_ID']; ?>"><?php echo "$film[Name] - $film[Preis]"; ?> </a></td><?php
}
echo '</tr>';
}
echo "</table>";
mysqli_close();
或者,更好的是,只需使用更现代的PDO库:
<?php
$connection = new PDO("mysql:host=localhost;dbname=filme", "root", "password");
$query = "SELECT `Film_ID`, `Name`, `Preis` FROM filme";
$result = $connection->query($query);
$chunks = array_chunk($result->fetchAll(PDO::FETCH_ASSOC), 4);
?>
<table class='filme'>
<?php foreach ($chunks as $chunk):?>
<tr>
<?php foreach ($chunk as $film):?>
<td>
<a href="dvd.php?Film_ID=<?=$film['Film_ID']?>"><?=htmlspecialchars("$film[Name] - $film[Preis]")?></a>
</td>
<?php endforeach?>
</tr>
<?php endforeach?>
</table>
请注意,由于使用alternative syntax和short echo tags来保持PHP和HTML混合的最小化,因此此代码更有效且更易于阅读。理想情况下,您的PHP将位于完全独立的文件中。