2016-07-20 9 views
0

Ich habe ein Problem mit meinem ersten Versuch, eine foreach-Schleife zu machen.Foreach-Schleife zeigen mehrere gleiche Zeilen

Mein Problem ist, dass ich nur versuche, zwei Zeilen zur Anzeige zu bringen, was irgendwie funktioniert, obwohl sie so oft angezeigt werden, wie es verschiedene Zeilen in meiner Tabelle gibt.

Mein Code sieht wie folgt aus:

$sql = "SELECT * FROM webpages"; 
$result = mysql_query($sql); 
$assoc_query = mysql_fetch_assoc($result); 

<?php foreach ($assoc_query as $value) { ?> 
<tr> 
    <td> 
    <div id='pageimg'><img src= <?php echo $assoc_query['pic'];?> ></div> 
    </td> 
    <td> 
    <div id="pagename"><?php echo $assoc_query['name']; ?> </div> 
    </td> 
</tr> 
<?php } ?> 

Es ist wie so auf der Seite angezeigt wird:

/picture/ DAK 
/picture/ DAK 
/picture/ DAK 
/picture/ DAK 

Hoffe Ihr könnt mir helfen :)

+0

diesen Code 'print_r ($ assoc_query)' hinzufügen und drucken Sie das Ergebnis –

+0

Sie verwenden keine WHERE-Klausel in Ihrer Erklärung, so ist es nur richtig, dass es jede Zeile zeigt . In diesem Beispiel muss diese Tabelle vier Zeilen mit denselben Daten enthalten. Wenn Sie nur die ersten beiden Zeilen einer bestimmten Ergebnismenge anzeigen möchten, sollten Sie LIMIT 2 am Ende Ihrer Abfrage zusammen mit einer ORDER BY-Spalte hinzufügen. –

Antwort

0

Stattdessen Sie eine Weile wollen. Was Sie hier tun, ist das Schleifen der Elemente des Arrays $ assoc_query.

Eine while-Schleife ruft den nächsten zu verwendenden Ergebnissatz ab.

while($assoc_query = mysql_fetch_assoc($result)){ 
    //Do your thing 
} 

Auch beachten Sie bitte von mysql_ mysqli_ oder PDO zu aktualisieren. Was Sie verwenden, wird abgeschrieben und es gibt zusätzliche Sicherheit mit den neueren.

+0

Vielen Dank für die Antwort. Dies funktioniert, obwohl nur der älteste Datensatz angezeigt wird und alle anderen ignoriert werden. Irgendwelche Ideen? –

+0

@LauFalkeGammeljordPetersen Ich bin mir nicht sicher, was du meinst. Dadurch werden alle Ergebnisse aus Ihrer Abfrage abgerufen. Wenn Ihre Abfrage keine Ergebnisse enthält, sollten Sie also alles sehen. – nerdlyist

+0

Wissen Sie nicht, was passiert, aber es schneidet die mit der niedrigsten ID? Ich habe versucht, mehr Datensätze in die db hinzufügen, die gut angezeigt wird? –

0

dieser kann nicht getan werden mit foreach-Schleife, es sei denn, Sie zeigen 1 Benutzerinformationen nur mit limit Clause oder Where Clause andernfalls, dass es unbrauchbar ist

stattdessen benötigen Sie eine while-Schleife wie diese von foreach

<?php while ($assoc_query = mysql_fetch_assoc($result)) { ?> 
<tr> 
    <td> 
    <div id='pageimg'><img src= <?php echo $assoc_query['pic'];?> ></div> 
    </td> 
    <td> 
    <div id="pagename"><?php echo $assoc_query['name']; ?> </div> 
    </td> 
</tr> 
<?php } ?> 
0

Sie sollten es tun, wie folgt:

$sql = "SELECT * FROM webpages"; 
$result = mysql_query($sql); 
while ($assoc_query = mysql_fetch_assoc($result)) { 
?> 
<tr> 
    <td> 
    <div id='pageimg'><img src= <?php echo $assoc_query['pic'];?> ></div> 
    </td> 
    <td> 
    <div id="pagename"><?php echo $assoc_query['name']; ?> </div> 
    </td> 
</tr> 
<?php } ?> 

Das sollte funktionieren. Aber wie gesagt sollte man nicht so programmieren. Verwenden Sie mysqli oder PDO wie Nerdlyist sagt.

1
<?php 
$sql = "SELECT * FROM webpages"; 
$result = mysql_query($sql); 

$counter=0; 
while($row= mysql_fetch_assoc($result)) 
{ 
    $assoc_query[$counter] = $row; 
    $counter++; 
} 

foreach ($assoc_query as $value) { ?> 
    <tr> 
     <td> 
      <div id='pageimg'><img src= <?php echo $value['pic'];?> ></div> 
     </td> 
     <td> 
      <div id="pagename"><?php echo $value['name']; ?> </div> 
     </td> 
    </tr> 
<?php } ?> 
0

@Nerdlyist

$sql = "SELECT * FROM webpages"; 
$result = mysql_query($sql); 
$assoc_query = mysql_fetch_assoc($result); 


<?php while ($assoc_query = mysql_fetch_assoc($result)) { 
?> 
<tr> 
    <td> 
    <div id='pageimg'><img src= <?php echo $assoc_query['pic'];?> ></div> 
    </td> 
    <td> 
    <div id="pagename"><?php echo $assoc_query['name']; ?> </div> 
    </td> 
</tr> 
<?php } ?>