2017-04-20 60 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