Php 如何在foreach语句中编写if语句

Php 如何在foreach语句中编写if语句,php,arrays,if-statement,foreach,Php,Arrays,If Statement,Foreach,我目前正在编写一个脚本,其中用户在表单中输入一个数字,该脚本在文件夹中搜索与该数字匹配的图像,并为用户显示该图像(下载按钮即将出现)。现在,我的代码如下所示: $photo_id = trim($_REQUEST['photo_id']); $dir = "./wp-content/uploads/easter_pics"; $images = (scandir($dir)); foreach ($images as $value); { $file_ext = strp

我目前正在编写一个脚本,其中用户在表单中输入一个数字,该脚本在文件夹中搜索与该数字匹配的图像,并为用户显示该图像(下载按钮即将出现)。现在,我的代码如下所示:

$photo_id = trim($_REQUEST['photo_id']);
$dir = "./wp-content/uploads/easter_pics";
$images = (scandir($dir));
foreach ($images as $value); {
  $file_ext = strpos($value, ".");
  $file_name = substr($value, 0, $file_ext);
  if ($file_name === $photo_id) {
    echo ("<img src = '../wp-content/uploads/easter_pics/" . 
    $file_name . ".jpg' />");
  }
}
$photo\u id=trim($\u请求['photo\u id']);
$dir=“./wp内容/上传/复活节图片”;
$images=(scandir($dir));
foreach(图像为$value);{
$file_ext=strpos($value,“.”);
$file\u name=substr($value,0,$file\u ext);
如果($file\u name===$photo\u id){
回声(“”);
}
}
此代码仅在用户输入目录中最后一个图像的编号时有效。我想我明白了什么是错的基本原理$images不断为$dir分配数组中最后一项的值。至少我认为是这样


问题是我可能错了,而且我也不知道如何修复它。如果用户输入与目录中的任何照片匹配,我希望if语句显示图像,然后中断。

您的
foreach
错误:

foreach ($images as $value); {
应该是

foreach ($images as $value) {
(注意缺少的分号)


也就是说,对于您的特定情况,通过扫描目录执行foreach可能不是最佳解决方案。尝试更好地验证输入(例如,如果ID始终是一个数字,则使用
intval
),然后查看文件是否存在。

为什么必须迭代文件夹的条目?如果您已经知道要查找的文件名,那么为什么不简单地检查预期路径下的文件是否存在,就这样?@arkascha可能是为了确保没有人输入
。/../../../../../etc/passwd
,尽管有比扫描整个目录更好的方法。@BartFriederichs有
realpath()
@arkascha我是php新手,所以我不知道最好的解决方案。我假设您必须在数组中的每个文件上迭代一个匹配的字符串。有什么更好的办法?我看到有人提到一个realpath()函数这不是特定于php的,这是我做的一个一般性说明:因为您知道要查找的ID,所以您确切地知道要查找的文件是如何调用的,对吗?这意味着你可以简单地检查它是否存在,对吗?您对文件夹内容的结果不感兴趣。所以你只需要1<代码>文件_exists()为了使其更安全2<代码>realpath()。啊,达尼特,我错过了。我也会尝试使用你的方法。