带有foreach循环的动态php列表

时间:2012-03-03 03:03:40

标签: php function foreach

尝试构建通过AJAX加载的动态库。

我正在努力建立一个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 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.');
?>

我对PHP不熟悉,无法构建我构建的函数。有帮助吗?这是我到目前为止(注意我所拥有的数组是一个临时解决方案......如果项目的数量少于/超过我在数组中列出的4个数据,它就不起作用):

{{1}}

1 个答案:

答案 0 :(得分:2)

首先,直接从$proj获取$_GET路径是不安全的。在将其放入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>';
}