PHP MySQL:使用Uploadify时将文件详细信息写入数据库

时间:2012-07-15 13:32:15

标签: php mysql uploadify

我正在使用Uploadify将文件(图像)上传到我的文件结构,然后捕获每个文件,给它一个随机数作为文件名,使用优秀的SimpleImage脚本调整大小,中等和小尺寸,节省那些到目录,丢弃原始图像,并将文件详细信息(随机数,原始名称,相册ID等)写入数据库以供以后访问。

除了写入DB部分之外,所有这一切都顺利进行。我发现只有第一个文件的信息传递给数据库,并且文件名不正确。

简而言之,在多个图像上使用Uploadify时,如何正确地将EACH文件的信息写入数据库?

我目前的剧本:

*注意:AlbumID由用户动态设置,并作为filedata发布到uploadify。

require_once '../../functions.php';
require_once '../../conn.php';

//defaults
$uploadify_path = '/contents/uploads/gallery/';
$albumID = $_POST['AlbumID'];

//Define a destination
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_POST['path']; // Relative to the root

if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetFile = $targetPath . $_FILES['Filedata']['name'];
include($_SERVER['DOCUMENT_ROOT'].'/includes/SimpleImage.php');

// Validate the file type
$fileTypes = array('jpg','jpeg','gif','png'); // File extensions
$fileParts = pathinfo($_FILES['Filedata']['name']);

if (in_array($fileParts['extension'],$fileTypes)) {
    $ran = $albumID.RandNumber(10);
    $location=$targetPath.$ran;

    $LegacyName = $fileParts['filename'];
    $FileExt = $fileParts['extension'];

    if(is_numeric($albumID)) {
        $q = "INSERT INTO gallery_meta (AlbumID, FileName, LegacyName, FileExt, IsDefault, Public)
                VALUES ('$albumID','$ran','$LegacyName','$FileExt','0','1')";
        $r= mysql_query($q);
        mysql_free_result($r);
    }

    move_uploaded_file($tempFile,$targetFile);

    list($width, $height, $type, $attr) = getimagesize($targetFile);

    $image = new SimpleImage();
    $image->load($targetFile);

    if( $height >= 901 ) {
        $image->resizeToHeight(900);
        $image->save($location.'-lrg.'.$FileExt);
        $image->resizeToHeight(550);
        $image->save($location.'-med.'.$FileExt);
        $image->resizeToHeight(200);
        $image->save($location.'-sm.'.$FileExt);
        unlink($targetFile);
    }
    elseif(( $height  >= 551 )&&( $height <= 900 )) {
        $image->save($location.'-lrg.'.$FileExt);
        $image->resizeToHeight(550);
        $image->save($location.'-med.'.$FileExt);
        $image->resizeToHeight(200);
        $image->save($location.'-sm.'.$FileExt);
        unlink($targetFile);
    }
    elseif(( $height >= 201 )&&( $height <= 550 )) {
        $image->save($location.'-lrg.'.$FileExt);
        $image->save($location.'-med.'.$FileExt);
        $image->resizeToHeight(200);
        $image->save($location.'-sm.'.$FileExt);
        unlink($targetFile);
    }
    if( $height  <= 200 ) {
        $image->save($location.'-lrg.'.$FileExt);
        $image->save($location.'-med.'.$FileExt);
        $image->save($location.'-sm.'.$FileExt);
        unlink($targetFile);
    }

    echo '1';
} else {
    echo 'Invalid file type.';
}
}

1 个答案:

答案 0 :(得分:0)

向表中添加自动递增键,如果您确定您的值不会超出BIGINT的大小,则将albumID更改为BIGINT,但如果我们推荐你将“AlbumId”保存为VARCHAR(30),因为它更像是一个名字而不是一个实际的数字键,特别是因为它看起来像是一个任意长度。

我还认为最后不是随机数,而是应该使用time()附加当前时间戳,这样就不会像使用随机数字的系统那样创建碰撞的可能性。用户输入将。

顺便提一下,$_POST['albumId']通过直接用户输入..会使您的数据库处于MySQL Injection攻击状态。