2012-03-03 119 views
0

試圖建立一個動態畫廊,通過AJAX加載。動態PHP列表與foreach循環

我試圖把它打造ul與多達list items因爲有圖片,因爲每個畫廊都有不同數量的圖像......是這樣的:

<ul id="foo"> 
<li><a href="javascript:void(0);"><img src="../images/portfolio/foo/001.jpg></a></li> 
<li><a href="javascript:void(0);"><img src="../images/portfolio/foo/002.jpg></a></li> 
</ul> 
<div class="description">FOO TITLE/DESCRIPTION</div> 

<ul id="bar"> 
<li><a href="javascript:void(0);"><img src="../images/portfolio/bar/001.jpg></a></li> 
<li><a href="javascript:void(0);"><img src="../images/portfolio/bar/002.jpg></a></li> 
<li><a href="javascript:void(0);"><img src="../images/portfolio/bar/003.jpg></a></li> 
</ul> 
<div class="description">BAR TITLE/DESCRIPTION</div> 

我對PHP的構建不熟悉我構建的函數。任何幫助?這是我到目前爲止(注意我擁有的陣列是一個臨時解決方案...如果項目比陣列中列出的項目少4個,那麼它不起作用):

<?php function generateProject($projTitle,$projDesc) { 

$proj = $_GET['proj']; 

echo '<ul id="'.$proj.'">'; 

$array = array('001','002','003','004'); 

    foreach($array as $picture) 
    { 
     echo '<li><a href="javascript:void(0);"><img src="../images/portfolio/'.$proj.'/'.$picture.'.jpg"'; 
     echo '</li>'; 
    } 

echo '</ul>'; 

echo '<div class="description">'.$projTitle.' <span class="slash">&nbsp;/&nbsp;</span>'.$projDesc.'</div>'; 

} ?> 


<?php 
    generateProject(
    'deadAWESOME', 
    'Gargoyles. Dusty leather tomes. Hidden rooms. Coffee.'); 
?> 
+0

你知道有多少圖片嗎?或者它只會在文件系統中改變? – Ryan 2012-03-03 03:05:53

+0

與minitech類似的問題 - 您如何獲取列表?您的$ array行只需要用確定圖像數量的方法來替換。除非我錯過了你的問題的重點? – Morgon 2012-03-03 03:09:46

+0

圖像數量取決於在'generateProject'中調用的項目。我不知道我是如何獲得這份名單的。如果我可以放上「6」,然後自動拉動001,002,... 006,那就行了。如果它遞歸併找到它們,那也可以。 – steve 2012-03-03 03:20:28

回答

2

首先,直接從$_GET獲取$proj路徑是不安全的。在將其放入URL之前,應該根據可接受值或正則表達式的數組對其進行檢查。在這種情況下,只要Web服務器的文檔根目錄安裝正確,就不會造成太大的損害。但保護你的路徑是一個好習慣。

$proj = $_GET['proj']; 

// Method 1: regex 
// Test that proj is only lowercase letters... 
if (!preg_match("/^[a-z]+$/", $proj)) { 
    // Oops, invalid $proj 
} 

// Or as ctype_alpha() 
if (!ctype_alpha($proj)) { 
    // invalid $proj 
} 

// Method 2: whitelist array 
// Array holds the valid possible values for $proj 
$valid_proj = array("project1", "barmitzvah", "wedding"); 
if (!in_array($proj, $valid_proj)) { 
    // Oops, invalid project 
} 

要獲得所有從文件系統中的圖像,你可以使用readdir()

// Use a glob to get all the images *.jpg 
$imgs = glob("/filesystem/path/to/images/portfolio/$proj/*.jpg"); 

foreach ($imgs as $picture) { 
    // Get only the base filename 
    $picture = basename($picture); 

    // Then build the <li> 
    echo '<li><a href="javascript:void(0);"><img src="../images/portfolio/'.$proj.'/'.$picture; 
    echo '</li>'; 
} 
+0

你的'preg_match'將不起作用;你需要錨定它。那個,或者只是使用'ctype_alpha'。 – Ryan 2012-03-03 03:21:13

+0

是的,它返回了一個錯誤......我如何在他給的上下文中使用ctype_alpha? – steve 2012-03-03 03:25:50

+0

@minitech是的,固定的。無論如何,我寧願白名單的正則表達式... – 2012-03-03 03:28:26