2014-04-07 17 views
8

Dört kayıtları MySQL veritabanımdan almaya çalışıyorum, ancak yalnızca ilk kayıtlar geri geliyor. Ben aradım ama neden olduğu konusunda emin değilim. Birisi bana doğru yönde işaret edebilir mi?Bu PHP dizisinden neden sadece ilk kayıt döndürülüyor?

<?php 
session_start(); 
function displayImage($username){ 
    $imageDate = $_POST['imageDate']; 
    $result = mysql_query(" 
     SELECT 
      imageName 
     FROM 
      images AS i 
     INNER JOIN 
      users AS u ON i.userID = u.UserID 
     WHERE 
      u.username = '$username' 
     AND 
      i.imageDate = '$imageDate' 

    ") or die(mysql_error()); 

    //return a message to the users explaining ...... 
     if (!isset($_POST['Submit'])) { 
      // this does nowt yet!!! 
      $output = "Nothing selected yet."; 
     } 
     else { 
     //This is a while loop to store the SQL results into ...... 
     $row = array(mysql_fetch_assoc($result)); 
     foreach ($row as $picName) { 
     $cam = $_POST['cam']; 
     $fullPath = $username . "/" . $cam . "/" . $picName['imageName']; 
     // $output = //this works fine 
       reset($images); 
      } 
     } 
     var_dump($row); 
     echo "<br />"; 
     return $output; 
    } 
?> 
+1

"// Bu, SQL sonuçlarını kaydetmek için bir süre döngüdür ......" - Hayır değil. ($ Row = mysql_fetch_assoc ($ sonuç) {...} 'gibi bir şey istersiniz, ancak siz bu işin başındayken lütfen PDO'ya geçmeyi düşünün. – hank

+0

Burada bir SQL enjeksiyon güvenlik açığı var, bu arada POST dizisinden gelen her şeyden kaçmak için – halfer

cevap

5

, bir kullanmanız gerekir:

while ($row = mysql_fetch_assoc($result)) { 
     $cam = $_POST['cam']; 
     $fullPath = $username . "/" . $cam . "/" . $row['imageName']; 
    } 
+1

kodumu düzeltildi, yardım için herkese teşekkür ederim.Veri kayıtlarını şimdi var-dökümünde görüyorum. Yine de saygınlığım çok düşük, tekrar teşekkürler beyler, dün başımdan bu kadar çok uğraştım. –

+0

@GrahamSnowdon Doğru cevabı isminizle işaretleyebilirsiniz –

6

Sen sonuç almak için döngü kullanmalısınız: Burada Diğerleri söylediler

while ($row = mysql_fetch_assoc($result)) { 
    // This is an example... 
    echo $row["id"]; 
    echo $row["name"]; 
} 
+1

Neden onu aşağı oy, o doğru –

3

mysql_fetch_assoc veya mysql_fetch_array kullanmak yolu şudur Bunun için döngü yaparken, kodu biraz küçümsedim ve göz önünde bulundurmanız gereken birkaç şey daha ekledim.

Bunun nedeni, mysql_fetch_assoc kullandığınızda, bir sonuç kaynağını geri getirip geri dönmek için bıraktığı kaynaklardan kaldırmasıdır. Yani, eğer onu bir dizide tutmaya çalışırsanız, dizideki ilk olanı alırsınız ve başka hiçbir şey yoktur. Bir süre döngü kullandığınızda temelde "eğer mysql_fetch_assoc verilecek bir şey varsa, o zaman döngü içindeki kodu yapın" diyerek çalışır.

<?php 

session_start(); 

function displayImage($username) { 
    // Also, as others have said, check out PDO, or MySQLi, as they 
    // both provide a better interface with MySQL an have better 
    // security features. 
    $username = mysql_real_escape_string($username); 
    $imageDate = mysql_real_escape_string($_POST['imageDate']); 

    $result = mysql_query(" 
     SELECT 
      imageName 
     FROM 
      images AS i 
     INNER JOIN 
      users AS u ON i.userID = u.UserID 
     WHERE 
      u.username = '$username' 
    AND 
      i.imageDate = '$imageDate' 
    ") or die(mysql_error()); 

    //return a message to the users explaining 
    if (!isset($_POST['Submit'])) { 
     // this does nowt yet!!! 
     $output = "Nothing selected yet."; 
    } else { 
     $cam = $_POST['cam']; 

     $images = array(); // This is part of the "you could do something 
          // like" further down. 
     while ($row = mysql_fetch_assoc($result)) { 
      $fullPath = $username . '/' . $cam . '/' . $row['imageName']; 
      // $output = //this works fine 
      var_dump($row); 
      echo "<br />"; 

      // Or you could do something like: 

      $images[] = $username . '/' . $cam . '/' . $row['imageName']; 

      // Then outside of this while loop you'd have all of your image 
      // paths stored in this $images array. 
      // 
      // It depends on how you want to handle outputting them. 
     } 
    } 

    return $output; 
} 

Koddaki yorumlar ana noktalardan geçiyor.

Ayrıca, $ cam = $ _POST ['kam'] döngüsünün içinden dışarıya taşıdım. Bunun dışında, döngüde gitmesi gerekmediği için değer her zaman aynı olacaktır. Hangi döngü öğesi üzerinde gidiyoruz.

2

hala bir açıklama gerekirse:

1. Yalnızca bir kayıt var neden ??

Gümrüğe zaman:

$row=array(mysql_fetch_assoc($result)); 

Bu veritabanından bir kayıt almak anlamına gelir mysql_fetch_assoc() yöntem böylece yöntem veritabanı tablosundan 1 satır çağırır, sadece bir kez çalıştırıldı.

2. Bunu nasıl çalıştıracaksınız?

Başkaları tarafından verilen örnekte gördüğünüz gibi, bunun yerine bir while döngü kullanın.

2.1 Döngü nasıl çalışır?

Aradığınızda: İlk başta

 while (<some command1 equates to true or false>) {<some command2>} 

onlar somecommand1 çalıştırın. Eğer doğru dönerse, biraz komut2 yapın. Komut2 bittikten sonra, bazı komutları tekrar çalıştırın. Eğer hala doğruysa, bazı komutlarım2 ve benzeri yapın ... Güzel bir örnek kullanmakta olduğunuz komuttur. açıklandığı gibi, bu döngü $ satır = mysql_fetch_assoc ($ sonuç) olarak

 while ($row = mysql_fetch_assoc($result)) 
    { 
     echo $row['fieldname1']; 
     echo $row['fieldname2']; 
    } 

Somecommand1 olup. Bu işlev, veritabanından döndürülen başka bir satır varsa, doğru eşit olan bir kaynak döndürür. While döngüsünde kodun içinden geçtikten sonra bir sonraki satıra atlar. Daha sonra mysql_fetch_assoc işlevini yeniden çalıştırır.Tabloda sorguyla eşleşen bir miktar kayıt varsa, bu işlev while döngüsünüzde ne varsa onu yapmaya devam edecektir.

Daha fazla örneğe ihtiyacınız varsa, w3schools.com adresine bakın. PHP'yi oradan başlattım.

+0

Düzenleme için teşekkürler, Seer –

+0

Bunu ima ediyor musunuz? Bir değişkenin adı, içeriğiyle bağlantılı mı? Bir satır dikey çizgi ise, bir sütun nedir? –

+0

yatay bir çizgi. (dikey, sıkı ve yatay olarak bırakılır) aşağıya doğru, değil mi?) Bir tablo yaparken microsoft word içinde görebilirsiniz, güzel bir örnek –

İlgili konular