2017-04-20 63 views
1

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

+0

死亡白屏:错误检查\显示已关闭,请将其打开以查看错误。在你的php页面的顶部添加:'ini_set('display_errors','On'); ini_set('html_errors',0); error_reporting(-1);' – nogad

回答

1

你正在走这个错误的路。在$array$filmID的内容之间没有链接。实际上,$filmID可能是空的,因为您之前已经运行了结果集。想象一下你的数据库结果集就像一堆文件。每次拨打fetchAssoc()时都会读取一张纸,并将其放在一边。一旦你到达结果集的末尾,就没有什么可读的,所以你的下一次调用将失败。您需要在单个循环中执行所有数据库读取操作。另外,你不应该在mysqli中使用mysql_close()

<?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将处于完全独立的文件中。

+0

谢谢你告诉我POD,不知道它。它看起来确实很干净,而且可以理解,谢谢! – Brian

+0

@布莱恩没问题。当你使用数据库时,像fetchAll()这样的函数是巨大的时间变量。当你必须做一个准备好的声明(你将在'dvd.php'中),他们在PDO中做起来要容易得多。 – miken32