从数据库结果更新动态链接

时间:2017-04-20 23:51:24

标签: php mysql foreach

我正在玩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的经验,很抱歉,如果我遗漏了一些非常明显的东西。

1 个答案:

答案 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 syntaxshort echo tags来保持PHP和HTML混合的最小化,因此此代码更有效且更易于阅读。理想情况下,您的PHP将位于完全独立的文件中。