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

标签 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();
?>

我想要做的是显示一个包含四列的表格,在每个单元格中都有一个格式为“电影名称 - 价格”的字符串,这个字符串应该是一个链接,指向相应的页面ID。此代码确实显示了我的四列表,但它缺少我的数据库的第一项,并且每个链接的 ID 都相同,即缺少的第一部电影的 ID。所以每个 URL 看起来像这样:

http://localhost/dvd.php?Film_ID=1000

但 ID 为 1000 的电影甚至没有列出。我考虑过将那个嵌套的 foreach 循环放入一个 while 循环中

while($filmID = mysqli_fetch_assoc($result)){
    ...
}

但是我得到一个空白页。

我几乎没有使用 php 的经验,如果我遗漏了一些非常明显的东西,我深表歉意。

最佳答案

你的做法是错误的。 $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 将位于一个完全独立的文件中。

关于php - 从数据库结果更新动态链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43531713/

相关文章:

php - Laravel 5 - 如何检查用户名和密码是否与表匹配?

mysql - 突然无法访问Dreamfactory中的mysql表

mysql - UPDATE 的目标表不可更新

mysql - mysql中如何统计某个字符串出现的次数

php - PHP中foreach生成数组并返回会导致CPU利用率增加

php - 如何在 Codeception 测试中选择单击元素?

javascript - 将我的 html 破折号菜单转换为 php

php - 使用带有ajax和formdata的codeigniter上传图像

c# - 如何在 C# 中的 foreach 循环中使用多线程

javascript - 将字符串数组转换为键值对