动态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"> / </span>'.$projDesc.'</div>';
} ?>
<?php
generateProject(
'deadAWESOME',
'Gargoyles. Dusty leather tomes. Hidden rooms. Coffee.');
?>
答
首先,直接从$_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>';
}
你知道有多少图片吗?或者它只会在文件系统中改变? – Ryan 2012-03-03 03:05:53
与minitech类似的问题 - 您如何获取列表?您的$ array行只需要用确定图像数量的方法来替换。除非我错过了你的问题的重点? – Morgon 2012-03-03 03:09:46
图像数量取决于在'generateProject'中调用的项目。我不知道我是如何获得这份名单的。如果我可以放上“6”,然后自动拉动001,002,... 006,那就行了。如果它递归并找到它们,那也可以。 – steve 2012-03-03 03:20:28