动态PHP列表与foreach循环

问题描述:

试图建立一个动态画廊,通过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

首先,直接从$_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