2015-04-05 126 views
0

我喜歡foreach。我已經使用過很多次,成功了。雖然我不一定了解它如何或爲什麼起作用的具體細節,但直到現在,它從來沒有阻止我使用它,並取得預期的結果。所以這裏是我的場景...PHP foreach不能按預期在一種情況下工作

我有一個PHP的後端表單,允許用戶上傳某些類型的文件保存到MySQL數據庫。我知道你們中的一些人會說在一個數據庫中保存一個文件並不好,但是現在就把它放在一邊,因爲對此有非常多的50/50分歧意見,並且沒有真正有效的理由說明它爲什麼不好。 。上傳功能完美地工作。我希望顯示錶出現用戶放入數據庫的相關文件列表。這裏奇怪的foreach麻煩開始。這是我的代碼:

try { 
    $stmt = $conn->prepare("SELECT * FROM $database.appFiles WHERE appID = :appid AND uaID = :uaid AND applicationKey = :applicationkey"); 
    $stmt->bindParam(':appid', $appID, PDO::PARAM_INT, 11); 
    $stmt->bindParam(':uaid', $uaID, PDO::PARAM_INT, 11); 
    $stmt->bindParam(':applicationkey', $applicationKey, PDO::PARAM_STR, 8); 
    $stmt->execute(); 
    $fRes = $stmt->fetchAll(PDO::FETCH_ASSOC); 
} catch(PDOException $e) { catchMySQLerror($e->getMessage()); } 
if(count($fRes > "0")) { 
    //var_dump($fRes); 
    foreach ($fRes as $value) { 
     echo " </tr>\n"; 
     echo " <tr style=\"background: ".cycleColours()." border-bottom: 1px dotted #c0c0c0;\">\n"; 
     echo " <td style=\"padding: 5px;\">".$fRes[0][fileName]."</td>\n"; 
     echo " <td style=\"padding: 5px;\">".$fRes[0][fileMime]."</td>\n"; 
     echo " <td style=\"padding: 5px;\">".$fRes[0][fileSize]."</td>\n"; 
     echo " <td style=\"padding: 5px;\">".uts2date($fRes[0][dateUploaded])."</td>\n"; 
     echo " <td style=\"padding: 5px;\">Del</td>\n"; 
    } 

} else { 
    echo " </tr>\n"; 
    echo " <tr style=\"border-bottom: 1px dotted #c0c0c0;\">\n"; 
    echo " <td class=\"center\" style=\"padding: 5px;\" colspan=\"5\"><i>No files have been uploaded for this application yet</i></td>\n"; 
} 

當我有零導致DB我沒有得到任何輸出(我的「其他人」不工作),當我有一個文件上傳我順利拿到輸出如預期的那樣。當我有兩個文件上傳時,我得到兩行,每個都回顯第一個文件的細節 - 重複。沒有提到第二個文件出現。這種模式對我已成功上傳的更多文件持續進行。如果有20個文件已經上傳,我會得到20行很好的整理,告訴我有關上傳的第一個文件的相同信息,連續20次。

我試圖改變我的

foreach ($fRes as $value) { 

語法和使用:

foreach ($fRes as $value => $key) { 

,但我得到了相同的結果。似乎沒有任何區別。從數據庫中提取的數據是一個數組(你可以看到我的var_dump($ fRes);我用來檢查它)。有趣的是,當我將$ fRes [0] [fileName]更改爲$ fRes [1] [fileName]時,我得到第二個文件的名稱等。這似乎表明,由於某些原因,每個文件都處於並行分離數組?爲什麼?我如何按預期正確工作?

感謝

回答

2

我相信你想改變$fRes[0]$value。如果您使用$fRes[0],則每次循環迭代都會獲得第一條記錄。

+0

謝謝,正確的,並保存我實施一個i ++計數器來取代我的[0]。 :) – Cassandra 2015-04-05 03:28:04

0

一旦你foreach循環內

foreach ($fRes as $value) 

你從$值的循環數據

0

您在這裏有一點差錯和there.To明確count($fRes > "0")不知道它如何工作讓你if condition它應該是這樣的count($fRes) > 0!empty($fRes)

// its not count($fRes > "0") 
// $fRes[0] is getting the first result array so change it to $value 
if(count($fRes) > 0) { 
//var_dump($fRes); 
foreach ($fRes as $value) { 
    echo " </tr>\n"; 
    echo " <tr style=\"background: ".cycleColours()." border-bottom: 1px dotted #c0c0c0;\">\n"; 
    echo " <td style=\"padding: 5px;\">".$value['fileName']."</td>\n"; 
    echo " <td style=\"padding: 5px;\">".$value['fileMime']."</td>\n"; 
    echo " <td style=\"padding: 5px;\">".$value['fileSize']."</td>\n"; 
    echo " <td style=\"padding: 5px;\">".uts2date($value['dateUploaded'])."</td>\n"; 
    echo " <td style=\"padding: 5px;\">Del</td>\n"; 
} 

} 
相關問題