php 一段多图上传代码,用的foreach循环,请问要怎么才能取到新命名的图片名称

陸仴芬婲 发布于 2014/03/03 16:52
阅读 458
收藏 1
PHP
php 一段多图上传代码,用的foreach循环,请问要怎么才能取到新命名的图片名称,我要把这个名字存到数据库,方便调用,怎么处理,大虾们帮帮忙,感谢~!!

<form action="" method="post" enctype="multipart/form-data"> 
    <input type="hidden" name="MAX_FILE_SIZE"    value=""> 
    <input type="file" name="pic" /><br><br> 
    <input type="file" name="text" /><br><br> 
    <input type="file" name="doc" /><br><br> 
    <input type="file" name="pdf" /><br><br> 

    <input type="submit" value="upload"/> 

</form> 




也可用foreach 循环 上传多个文件: 
<?php
//1.获取要上传文件的信息 
$up_info=$_FILES; 

$ob_path="./goodsimage/";   

$typelist=array("image/gif","image/jpeg","image/pjpeg","image/png"); //定义运行的上传文件类型 



foreach($up_info as $k_name=>$value){   //用foreach循环 处理多个文件的上传 
//2.判断文件是否上传错误 

if($up_info[$k_name]['error']>0){ 
    switch($up_info['error'][$i]){ 
        case 1: 
            $err_info="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值"; 
            break; 
        case 2: 
            $err_info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值"; 
            break; 
        case 3: 
            $err_info="文件只有部分被上传"; 
            break; 
        case 4: 
            $err_info="没有文件被上传"; 
            break; 
        case 6: 
            $err_info="找不到临时文件夹"; 
            break; 
        case 7: 
            $err_info="文件写入失败"; 
            break; 
        default: 
            $err_info="未知的上传错误"; 
            break; 
    } 
    continue($err_info); 
} 


//3.判断文件上传的类型是否合法 

if(!in_array($up_info[$k_name]['type'],$typelist)){ 
    continue('文件类型错误!'.$up_info[$k_name]['type']); 
} 

//4.上传文件的大小过滤 

if($up_info[$k_name]['size']>100000){ 
    echo '文件大小超过**'; 
    continue; 
} 


//5.上传文件名处理 

$exten_name=pathinfo($up_info[$k_name]['name'],PATHINFO_EXTENSION); 

    do{ 
        $main_name=date('YmHis'.'--'.rand(100,999));         
        $new_name=$main_name.'.'.$exten_name; 
    }while(file_exists($to_path.'/'.$new_name)); 


//6.判断是否是上传的文件,并执行上传 

if(is_uploaded_file($up_info[$k_name]['tmp_name'])){ 

        if(move_uploaded_file($up_info[$k_name]['tmp_name'],$ob_path.$new_name)){ 
            echo '文件上传成功!';
            }else{ 
            echo '上传文件移动失败!'; 
            } 
    }else{ 
        echo '文件不是上传的文件'; 
        } 
}   //for循环的括号 

?>




加载中
0
洪云
不可以在第6步中,文件上传成功之后,获取新命名的图片名称,并且把它存入数据库吗?就在echo'文件上传成功!';之后,新名称是$ob_path.$new_name
陸仴芬婲
陸仴芬婲
用您的方法保存图片名称是实现了,但是,我每张图片后面还要录入对应的其他内容,比如商品数量,价格,品牌,等等,代码怎么写?
0
Fryeloo
Fryeloo

新命名的图片不就是$ob_path.$new_name?, 如果要获得完整路径就是realpath($ob_path.$new_name)


一下是本来观察楼主代码的一些建议

1: 78行中用的 $to_path.'/'.$new_name 中的 $to_path 是怎么来? 

2: 30-53行代码是否可以精简成一行代码?

3: foreach循环中已经取得了数组的$value, 为什么还用$k_name访问数组?

4: continue能传字符串吗(php5.4测试会报错)?

5: 为什么要用文件类型过滤上传文件, 而不用文件扩展名? 文件类型是浏览器给发出去的, 用文件类型过滤很不安全. 而且楼主直接用的人家的扩展名保存的. 人直接传一个.php的文件上去都完全木有问题哦.

陸仴芬婲
陸仴芬婲
回复 @Fryeloo : 78行的$to_path应该是$ob_path,对吧,我还是取不到新的图片名称,麻烦你帮我把代码贴出来好不,本人菜鸟,谢谢你
Fryeloo
Fryeloo
回复 @陸仴芬婲 : 我说的是78行的$to_path, 不是说的$ob_path. 如果你想要保存前三个图片路径, 很容易啊. 在循环外面添加一个数组变量, 每次上传图片后把图片路径加入到这个数组. 循环完了数组里面就是所有图片的路径了.
陸仴芬婲
陸仴芬婲
谢谢您的建议,$ob_path.$new_name?,这个是循环里面的,每次循环后,这个变量的值都变了,我只能取到最后一张图的名字,前面的三张图好像取不到,代码要怎么写?
0
Tuesday
Tuesday
一个函数, 进去是: $_FILES
出来也是$_FILES, 不过里面的值有变化.
0
陨落人间
陨落人间

多图你可以用

<input type="file" name="pic[]" />

返回顶部
顶部