我正在尝试使用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"> 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到数据库... 我认为确定尺寸的问题,但我无法弄清楚如何解决。
答案 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"> 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"){ ...