2017-06-12 1 views
0

Versuchen Sie herauszufinden, warum der folgende Code die erwarteten Ergebnisse nicht zurückbringt. Wenn ich auf einen Link auf meiner Hauptindexseite index.php klicke, öffnet sich eine details.php Seite, auf der ich eine Unterseite habe, die auch die Informationen von meiner URL erhält und dann Bilder basierend auf diesen Daten anzeigen soll. Allerdings nur, wenn die SQL-Abfrage mehr als eine Zeile enthält.PHP-Seite gibt das Bild nicht wie erwartet zurück

Ich kann eine SQL-Abfrage ausführen und, wenn ich die Variablen $ pid, $ lvmID, $ in entfernen und die tatsächlichen Werte einfügen, Ergebnisse sind zurück. Die Seite zeigt Ergebnisse an, wenn> = 2 Ergebnisse zurückgegeben werden.

Mein Code:

<?php 
    if (!defined('DB_SERVER')) define('DB_SERVER', 'localhost'); 
    if (!defined('DB_USER')) define('DB_USER', 'xxx'); 
    if (!defined('DB_PASSWORD')) define('DB_PASSWORD', 'xxx'); 
    if (!defined('DB_TABLE')) define('DB_TABLE', 'xxx'); 


    // The procedural way 
    $mysqli = mysqli_connect(DB_SERVER, DB_USER, DB_PASSWORD, DB_TABLE); 
    $mysqli->set_charset("utf8"); 
    $mysqli->query("SET NAMES 'utf8'"); 
    if (mysqli_connect_errno($mysqli)) { 
     trigger_error('Database connection failed: ' . mysqli_connect_error(), E_USER_ERROR); 
    } 

    $pid = mysqli_real_escape_string($mysqli, $_GET['pid']); 
    $lvmID = mysqli_real_escape_string($mysqli, $_GET['lvmID']); 
    $in = mysqli_real_escape_string($mysqli, $_GET['in']); 

    $query = " 
       SELECT r.*, lvm.luchtvaartmaatschappijID 
       FROM tbl_random r 

       LEFT JOIN tbl_luchtvaartmaatschappij lvm 
       ON r.img_lvm = lvm.IATAcode 

       WHERE r.img_nmr ='$in' 
       AND lvm.luchtvaartmaatschappijID = '$lvmID' 
       AND r.randimgID != '$pid' 
       LIMIT 6"; 

    $result = mysqli_query($mysqli, $query) or trigger_error("Query Failed! SQL: 
    $query - Error: ". mysqli_error($mysqli), E_USER_ERROR); 

    $row = mysqli_fetch_assoc($result); 

    mysqli_close($mysqli); 

    ?> 

    <?php 
     $items_in_row = 3 ; 
     $index = 0 ; 
    ?> 

     <table width='100%' cellspacing='5' border='0'> 
      <tr> 

     <?php 
     while($row = mysqli_fetch_assoc($result)){ 
      $index++ ; ?> 
      <td style="text-align: center" width='375'>  

      <a href='http://globe-trekking.com/vg/home/details.php?pid=<?php echo $row['randimgID'];?>&lvmID=<?php echo $row['luchtvaartmaatschappijID'];?>&in=<?php echo $row['img_nmr'];?>'> <img src='http://globe-trekking.com/vg/img/random/<?php echo $row['img_lvm'];?>/<?php echo $row['img_file'];?>' width='345'></a> 


      <br> 
      </td> 
     <?php if ($index%$items_in_row == 0){ ?> 
      </tr> 
      <tr> 
     <?php } 
     } ?> 
     </tr> 
     </table> 

Antwort

0

Jeder Aufruf von mysqli_fetch_assoc wird aus der Ergebnismenge eine Zeile herausgenommen.

Kurz vor dem Schließen der Verbindung, müssen Sie diesen Aufruf:

$row = mysqli_fetch_assoc($result); 

, die die erste Zeile aus dem Abfrageergebnis tatsächlich holen wird. Dann haben Sie während Bedingung hier:

 while($row = mysqli_fetch_assoc($result)){ 

, die die zweite Reihe von den Ergebnissen wird holen, und führen Sie dann die Innenseite der Schleife , wenn es eine zweite Reihe ist. Daher wird die erste Zeile, die Ihre Abfrage zurückgibt, niemals in der while-Schleife verarbeitet.

Die Lösung ist einfach das erste Gespräch mysqli_fetch_assoc() zu entfernen, und lassen Sie den vollständigen Code wie folgt aus:

<?php 
    if (!defined('DB_SERVER')) define('DB_SERVER', 'localhost'); 
    if (!defined('DB_USER')) define('DB_USER', 'xxx'); 
    if (!defined('DB_PASSWORD')) define('DB_PASSWORD', 'xxx'); 
    if (!defined('DB_TABLE')) define('DB_TABLE', 'xxx'); 


    // The procedural way 
    $mysqli = mysqli_connect(DB_SERVER, DB_USER, DB_PASSWORD, DB_TABLE); 
    $mysqli->set_charset("utf8"); 
    $mysqli->query("SET NAMES 'utf8'"); 
    if (mysqli_connect_errno($mysqli)) { 
     trigger_error('Database connection failed: ' . mysqli_connect_error(), E_USER_ERROR); 
    } 

    $pid = mysqli_real_escape_string($mysqli, $_GET['pid']); 
    $lvmID = mysqli_real_escape_string($mysqli, $_GET['lvmID']); 
    $in = mysqli_real_escape_string($mysqli, $_GET['in']); 

    $query = " 
       SELECT r.*, lvm.luchtvaartmaatschappijID 
       FROM tbl_random r 

       LEFT JOIN tbl_luchtvaartmaatschappij lvm 
       ON r.img_lvm = lvm.IATAcode 

       WHERE r.img_nmr ='$in' 
       AND lvm.luchtvaartmaatschappijID = '$lvmID' 
       AND r.randimgID != '$pid' 
       LIMIT 6"; 

    $result = mysqli_query($mysqli, $query) or trigger_error("Query Failed! SQL: 
    $query - Error: ". mysqli_error($mysqli), E_USER_ERROR); 

    mysqli_close($mysqli); 

    ?> 

    <?php 
     $items_in_row = 3 ; 
     $index = 0 ; 
    ?> 

     <table width='100%' cellspacing='5' border='0'> 
      <tr> 

     <?php 
     while($row = mysqli_fetch_assoc($result)){ 
      $index++ ; ?> 
      <td style="text-align: center" width='375'>  

      <a href='http://globe-trekking.com/vg/home/details.php?pid=<?php echo $row['randimgID'];?>&lvmID=<?php echo $row['luchtvaartmaatschappijID'];?>&in=<?php echo $row['img_nmr'];?>'> <img src='http://globe-trekking.com/vg/img/random/<?php echo $row['img_lvm'];?>/<?php echo $row['img_file'];?>' width='345'></a> 


      <br> 
      </td> 
     <?php if ($index%$items_in_row == 0){ ?> 
      </tr> 
      <tr> 
     <?php } 
     } ?> 
     </tr> 
     </table> 
+0

Dank. das macht vollkommen Sinn. Ich sehe meinen Fehler jetzt, wo du darauf hingewiesen hast. –

Verwandte Themen