Sta*_*0rz 7 php loops file-upload
关于SO的第一个问题,谢谢.:)
我正在为我的公司开发支持问题日志系统,它必须允许上传文件以及提交到我们数据库的任何问题.可能有0-6个不同的上传要检查,以及支持问题.我已经设法通过具有经由JS更新每当图像通过类型="文件"输入而选择,或者从模中取出的隐藏输入字段(imgcount)得到的有多少个文件的精确的变量.
我的[输入类型="文件"]名称是image1,image2等.因为我认为通过它们循环它会更容易.
提交表单时,以下代码会查看是否有任何文件并检查它们是否为有效类型(gif/jpeg/png),以便可以安全地上载它们.我不太担心病毒,因为支持系统有一个很好的安全登录,我们相信我们的客户.
$sscount = $_POST['imgcount'];
echo $sscount; //to test the variable
if($sscount>0){
for($i = 1; $i <= $sscount; $i++){
if (($_FILES["image$i"]["type"] == "image/gif")
|| ($_FILES["image$i"]["type"] == "image/jpeg")
|| ($_FILES["image$i"]["type"] == "image/png" )
&& ($_FILES["image$i"]["size"] < 500000))
{
}
else
{
$errormsg .= "Error: Image $i must be either JPEG, GIF, or PNG and less than 500 kb.<br />";
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这似乎没有正确循环,任何人有任何想法如何让它循环并正确返回?
&&运算符的优先级高于||,因此(A OR B OR C) AND D实际上并非如您所愿A OR B OR (C AND D)
您可以使用括号来强制执行您想要的评估.
但是,像这样的东西可能更清洁,更容易维护/阅读:
$allowed_types=array(
'image/gif',
'image/jpeg',
'image/png',
);
$sscount = $_POST['imgcount'];
if($sscount>0){
for($i = 1; $i <= $sscount; $i++){
if (in_array($_FILES["image$i"]["type"], $allowed_types) &&
($_FILES["image$i"]["size"] < 500000))
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
这不是您的问题的直接答案,但您可以将表单值作为数组传递给PHP,这应该更容易循环.in_array()对于检查值是否在允许列表中也很有用.
HTML:
<input type="file" name="image[]">
<input type="file" name="image[]">
<input type="file" name="image[]">
<input type="file" name="image[]">
Run Code Online (Sandbox Code Playgroud)
PHP:
<?php
if (isset($_FILES['image'])) {
foreach ($_FILES['image'] as $file) {
if (!in_array($file['type'], array("image/gif", "image/jpeg", "image/png"))
|| $file['size'] > 500000) {
//error
} else {
//ok
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14686 次 |
| 最近记录: |