使用PHP表单将PDF上载到数据库

时间:2013-12-31 16:20:30

标签: php mysql forms pdf ms-word

我正在尝试使用PHP将pdf或word文件上传到mysql数据库。我的代码适用于我指定的图像,但它不适用于pdf和word文件。

这是我的代码,包含表格和PHP代码:

<?php
include("./upload.php");

$dosyayolu="resimler/";
$logos=yukleyici("logo",2048*1024,$dosyayolu);
$links=yukleyici("link",20000000000000,$dosyayolu);

if($logos!="1"){
if($_POST['baslik']!=""){
if(mysql_query("INSERT INTO gfsidocuments (baslik,logo,detay,link)              
VALUES ('".$_POST['baslik']."','".$logos."','".$_POST['detay']."','".$links."')"));
header( 'Location: ./gfsidocedit.php');
}
}
}
?>


<table border="0" width="100%" height="40" cellspacing="0" cellpadding="0">
<tr>
<td width="100" bgcolor="#E1E1E1"><font face="Tahoma" size="2">&nbsp;Document</font></td>
<td width="238" bgcolor="#E1E1E1"><input type="file" name="link" id="link" size="20"></td>
<td width="211" bgcolor="#E1E1E1"></td>
<td bgcolor="#E1E1E1"></td>
</tr>
</table>

这是upload.php:

<?php
function yukleyici($filefield,$limit,$folder){
if ( ($_FILES[$filefield]["type"] == "image/gif")
|| ($_FILES[$filefield]["type"] == "image/jpeg")
|| ($_FILES[$filefield]["type"] == "image/png")
|| ($_FILES[$filefield]["type"] == "application/pdf")
|| ($_FILES[$filefield]["type"] == "application/msword")
)
{
if(($_FILES[$filefield]["size"] < $limit)){
$filename=getUniqueName() . $_FILES[$filefield]["name"];
if(move_uploaded_file($_FILES[$filefield]["tmp_name"],
realpath("../") . "/" . $folder . $filename)){
return $folder . $filename;
}else{
return "1";
}
}else{
return "1";
}
}else{
return "1";
}
}
function getUniqueName(){
return substr(md5(uniqid(rand(), true)),1,10);
}
?>

正如我所说,当我上传图片时,它有效,但当我上传pdf或word文档时,它返回1到数据库... 我认为确定尺寸的问题,但我无法弄清楚如何解决。

4 个答案:

答案 0 :(得分:0)

您在数据库中收到“1”,因为您没有发送任何数据。您需要使用表单标记包围表单的HTML,如下所示:

<form action="upload.php" method="post" enctype="multipart/form-data">
<table border="0" width="100%" height="40" cellspacing="0" cellpadding="0">
<tr>
<td width="100" bgcolor="#E1E1E1"><font face="Tahoma" size="2">&nbsp;Document</font></td>
<td width="238" bgcolor="#E1E1E1"><input type="file" name="link" id="link" size="20"></td>
<td width="211" bgcolor="#E1E1E1"></td>
<td bgcolor="#E1E1E1"></td>
</tr>
</table>
</form>

答案 1 :(得分:0)

首先在mysql中检查你的数据类型..

另外,你可以看一下:

I can't upload pdf to my mysql database

也许可以帮到你..

您是否尝试将文档存储在数据库之外?这是安全的方法,当数据库很大时没有头痛:)

答案 2 :(得分:0)

您是否尝试回显$ _FILES [$ filefield] [“type”]以验证它是否返回MIME类型“application / pdf”?我之前见过的一个问题是有时会返回“application / acrobat”。如果您具有echo语句验证的正确MIME类型,则可以回显SQL语句以查看正在传递的数据。这将有助于缩小搜索范围。

由于可以使用多个MIME,我将更改以下代码:

($_FILES[$filefield]["type"] == "application/pdf")

致:

(in_array($_FILES[$filefield]["type"],$mime_types))

将$ mime类型定义为:

$mime_types = array('application/pdf','application/acrobat');

这样,您可以避免仅为应用程序报告一种MIME类型的问题。 Here is a link到MIME类型列表。

您还可以打印表单变量列表,以查看表单传递的数据:

echo '<pre>'; print_r($_REQUEST);echo '</pre>';

标签是为了让它更容易阅读。

答案 3 :(得分:0)

我不确定,但我认为问题来自这些方面:

$logos=yukleyici("logo",2048*1024,$dosyayolu); //that means pixel

if($logos!="1"){ ...