2017-04-20 17 views
1

Ich spiele ein bisschen mit PHP herum und probiere dynamische Links aus. Mein Problem ist, dass die entsprechende ID nicht korrekt zu der URL mit meinem Code ist, so dass ich immer denselben Link habe. HierDynamische Links von Datenbank-Ergebnissen aktualisieren

ist, was ich habe:

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

Was ich versuche zu tun ist, eine Tabelle mit vier Spalten angezeigt werden, dass in jeder Zelle eine Zeichenfolge im Format hat „Filmname - Preis“ und Diese Zeichenfolge sollte ein Link sein, der zu der Seite mit der entsprechenden ID führt. Dieser Code zeigt meine vier Spalten Tabelle, aber es fehlt das erste Element meiner Datenbank und die ID ist für jeden Link gleich, nämlich die ID des ersten Films, der fehlt. Also sieht jede URL so aus:

Aber der Film mit der ID 1000 ist nicht einmal aufgeführt. Ich dachte darüber nach, dass die verschachtelte foreach-Schleife in einer while-Schleife mit

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

setzt aber mit, dass ich eine leere Seite angezeigt.

Ich habe gerade keine Erfahrung mit PHP, so tut mir leid, wenn ich etwas wirklich offensichtlich vermisse.

+0

weißer Bildschirm des Todes: Fehlerüberprüfung \ Display sind aus, schalten sie ein, um den Fehler zu sehen. Fügen Sie oben auf Ihrer PHP-Seite Folgendes hinzu: 'ini_set ('display_errors', 'On'); ini_set ('html_errors', 0); error_reporting (-1); ' – nogad

Antwort

1

Sie gehen das in die falsche Richtung. Zwischen den Inhalten $array und $filmID besteht keine Verbindung. In der Tat ist $filmID wahrscheinlich leer, weil Sie Ihr Ergebnis bereits früher durchlaufen haben. Stellen Sie sich vor, Ihre Datenbank-Ergebnismenge ist wie ein Stapel von Papieren. Jeder Anruf an fetchAssoc() liest ein Blatt Papier und legt es zur Seite. Sobald Sie das Ende der Ergebnismenge erreicht haben, ist nichts mehr zu lesen, sodass Ihre nächsten Anrufe fehlschlagen. Sie müssen all Ihren Datenbank-Abruf in einer einzigen Schleife durchführen. Außerdem sollten Sie mysql_close() nicht mit mysqli verwenden.

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

Oder, noch besser, verwenden Sie einfach die modernere PDO-Bibliothek:

<?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> 

Hinweis: dieser Code viel effizienter und einfacher ist, durch die Verwendung von alternative syntax und short echo tags zu lesen PHP und HTML zu halten Mischen auf ein Minimum. Im Idealfall wäre Ihre PHP in einer völlig separaten Datei.

+0

Danke, dass du mir von POD erzählt hast, ich wusste nichts darüber. Es sieht in der Tat viel sauberer aus und ist ganz verständlich, danke! – Brian

+0

@Brian kein Problem. Wenn Sie mit der Datenbank arbeiten, sind viele Funktionen wie 'fetchAll()' große Zeitverschwendung. Und wenn Sie eine vorbereitete Aussage machen müssen (was Sie in 'dvd.php' tun werden), sind sie viel einfacher in PDO zu machen. – miken32

Verwandte Themen