[英]PHP MySQL: Writing file details to DB while using Uploadify
我正在使用Uploadify将文件(图像)上传到我的文件结构中,然后捕获每个文件,并给它一个随机数作为文件名,然后使用出色的SimpleImage脚本将其大小调整为大,中和小尺寸,然后将其保存到目录,丢弃原始图像,并将文件详细信息(随机数,原始名称,专辑ID等)写入数据库,以供以后访问。
所有这些工作都顺利进行,除了写入数据库部分。 我发现只有第一个文件的信息会传递到数据库,并且文件名的数字不正确。
简而言之,当在多个图像上使用Uploadify时,如何将每个文件的信息正确地写入数据库?
我当前的脚本:
*注:AlbumID由用户动态设置,并作为文件数据发布到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.';
}
}
添加一个自动递增键表,并更改ALBUMID成BIGINT
如果你确定你的价值观是不会溢出的大小BIGINT
,但如果是我建议你保存“ALBUMID”为VARCHAR(30)
,因为它比实际的数字键更像一个名称,尤其是因为它看起来可以是任意长度。
我还认为,您应该使用time()
附加当前时间戳,而不是最后使用随机数,这样就不会像具有随机数和用户输入的系统那样产生潜在的冲突。
顺便说一句, $_POST['albumId']
,也被用户直接输入..,使您的数据库容易受到MySQL注入攻击。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.