【问题标题】:Uploading PDF to database by using PHP form使用 PHP 表单将 PDF 上传到数据库
【发布时间】:2013-12-31 16:20:29
【问题描述】:

我正在尝试使用 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 到数据库...... 我假设在确定大小时会出现这个问题,但我不知道如何解决。

【问题讨论】:

  • 也许 mimetype 不正确,所以检查一下。
  • 你能对此进行至少一些的调试吗?在每种情况下,您只需return "1",它实际上并没有告诉您任何有用的信息。当您单步执行代码时,它在哪里以及如何失败?

标签: php mysql forms pdf ms-word


【解决方案1】:

我不确定,但我认为问题出在以下几行:

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

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

【讨论】:

  • 非常感谢您提供线索,我将 'if($logos!="1") 更改为 if($logos!="1" && $links!="1") 现在它工作:)
【解决方案2】:

您在数据库中收到“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>

【讨论】:

    【解决方案3】:

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

    另外,你可以看看这个:

    I can't upload pdf to my mysql database

    也许可以帮到你..

    您是否尝试将文档存储在数据库之外?这是一种安全的方法,当数据库很大时也不头疼:)

    【讨论】:

      【解决方案4】:

      您是否尝试回显 $_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>';
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-07
        • 1970-01-01
        • 2012-04-10
        • 2010-10-23
        • 1970-01-01
        相关资源
        最近更新 更多