我有一个表单,可以将输入数据发送到MYSQL数据库上的相应字段。现在我已经设置了所有上传的文件打包成zip并放在“uploads”文件夹中,同时它发送到数据库文件名/位置。当用户上传没有发送到数据库的文件时,如果在相应的数据库“文件”单元格中没有结果,并且没有zip文件发送到“uploads”文件夹,我怎么做? **更新:好的我从建议的答案开始,但是没有上传文件只是通常我写的“NULL”。我尝试了一个if / else语句,它是一样的。我做错了什么?
这是没有上传文件时数组的样子:Array( [name] =>数组([0] =>)[类型] =>数组([0] =>)[tmp_name] => 数组([0] =>)[错误] =>数组([0] => 4)[size] =>数组([0] => 0))
错误字段包含4.我认为这可能是它无法工作的原因。我不明白为什么这个错误字段有这个数字。有什么建议吗?
PHP
<?php
$project = $_POST['project'];
$assignto = $_POST['assignto'];
$asdate = $_POST['asdate'];
$chdate = $_POST['chdate'];
$ddate = $_POST['ddate'];
$notes = $_POST['notes'];
$asdate=date('Y-m-d', strtotime($asdate));
$chdate=date('Y-m-d', strtotime($chdate));
$ddate=date('Y-m-d', strtotime($ddate));
$timestamp = time();
if (isset ($_POST['submit']))
{
$filesArray= $_FILES["files"];
for ($num=0; $num<count($filesArray["name"]);$num++)
{
$fileName = $filesArray["name"][$num];
$tempName= $filesArray["tmp_name"][$num];
move_uploaded_file($tempName,"tmp/".$fileName);
}
$archiveName= $timestamp.".zip";
$filesArrayNames= $_FILES["files"]["name"];
$zipsDir= scandir ("uploads/");
$error = false;
foreach($zipsDir as $zipDirfile)
{
if($zipDirfile == $archiveName)
{
$error= true ;
break;
}
}
if ($error== false)
{
$tmpDir = scandir ("tmp/");
$zip = new ZipArchive;
$zip->open("uploads/".$archiveName, ZipArchive::CREATE);
for ($num =0; $num<count($filesArray["name"]);$num++)
{
$fileName = $filesArray["name"][$num];
foreach($tmpDir as $tmpDirfile)
{
if($tmpDirfile == $fileName)
{
$zip->addFile("tmp/".$fileName);
echo " Adding: ".$fileName."<br/>";
}
}
}
$zip->close();
for ($num=0; $num<count($filesArray["name"]);$num++)
{
$fileName = $filesArray["name"][$num];
foreach($tmpDir as $tmpDirFile)
{
if($tmpDirfile == $fileName)
{
unlink("tmp/".$fileName);
}
}
}
}
else
{
echo "Name already exists";
}
} if (!empty($filesArray)) {
$filepath = "NULL";
}else
{$filepath = addslashes("https://docs.google.com/viewer?url=www.art.com/uploads/".$archiveName.""); }
print_r($filepath);
mysql_connect("tre.com","amadast","ufco1954") or die ('Error:' .mysql_error());
//database connection
mysql_select_db("mediamanagement");
$sql = "INSERT INTO demo (`name`, `id_continent`, `lastvisit`, `cdate`, `ddate`, `file`,`notes`)
VALUES ('".$project."', '".$assignto."','".$asdate."','".$chdate."','".$ddate."','".$filepath."','".$notes."')";
mysql_query($sql);
header('Location: edit-projects.html');
?>
答案 0 :(得分:1)
在你创建$ filepath变量的地方,只需检查你是否上传了文件,如果你没有使用&#34; NULL&#34;作为内容。
例如:
$filepath = addslashes("https://docs.google.com/viewer?url=www.amada-stage.com/uploads/".$archiveName."");
if (empty($filesArray)) {
$filepath = "NULL";
}
你可以做类似的事情来防止上传:
更改
if ($error== false)
到
if ($error == false && !empty($filesArray))
BTW:我希望你的mysql_connect行中没有真正的数据库凭据!