2017-04-20 5 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(); 
?> 

私が何をしようとしているすべてのセルでの形式の文字列があること、4つの列を持つテーブルを表示している「映画名を - 価格」とこの文字列は、IDの付いたページにつながるリンクにする必要があります。このコードでは4つの列テーブルが表示されますが、データベースの最初の項目がなく、IDはすべてのリンクで同じです。つまり、最初に見つからなかったフィルムのIDです。したがって、すべてのURLは次のようになります。

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

しかし、ID 1000の映画はリストされていません。私は

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

でwhileループでそのネストされたforeachループを置くことについて考えた。しかしそれで、私は空白のページを取得します。

私はPHPに関する経験はほとんどありません。本当に明白なものが見つからない場合は申し訳ありません。

+0

死の白い画面:エラーチェック\表示がオフで、エラーを表示するにはそれらをオンにします。 PHPページの最上部に次の行を追加します: 'ini_set( 'display_errors'、 'On'); ini_set( 'html_errors'、0); error_reporting(-1); ' – nogad

答えて

1

あなたは間違った方向に向かっています。 $array$filmIDの内容の間にリンクはありません。実際には、結果セットを先に実行しているので、$filmIDはおそらく空です。あなたのデータベースの結果セットが複数の論文のようなものだとします。 fetchAssoc()への各呼び出しは1枚の用紙を読み取り、それを脇に置く。結果セットの終わりに達すると、何も残っていないので、次の呼び出しは失敗します。すべてのデータベースフェッチを1回のループで行う必要があります。また、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> 

注このコードは、はるかに効率的とPHPを維持するためにalternative syntaxshort echo tagsの使用に起因する読みやすいとHTMLであります最小に混合する。理想的には、あなたのPHPは全く別のファイルになります。

+0

PODについて教えてくれてありがとう、それについて知らなかった。確かにきれいに見えて、かなり理解できます、ありがとう! – Brian

+0

@ブライアン問題ありません。データベースを使って作業しているとき、 'fetchAll()'のような多くの関数は大きな時間節約になります。そして、あなたが準備したステートメント( 'dvd.php'にあります)を行う必要があるとき、彼らはPDOでもっとやりやすくなります。 – miken32

関連する問題