2016-09-15 62 views
0

我有这段代码。我的目标是通过使用PHP将图像上传到MySQL。这给出了错误:404。我一遍又一遍地检查了我的代码,但没有看起来错误。 mysqli_connection有什么问题,我尝试上传其他内容,并且工作正常,但对于图像我有一个问题,错误:404。任何人都有什么想法,这里有什么问题? 注:当前文件的名称是upload.php的php image上传到mysql

<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>Resim Yükleyiniz</title>      //Upload and image 
</head> 

<body> 
<form action="upload.php" method="post" enctype="multipart/form-data"> 
    <input type="file" name="resim" value="Resim Seçiniz"> <input type="submit" value="Yükle">      //choose an image , upload 
</form> 
</body> 

<?php 
//getting mysqli connection 
$con = mysqli_connect("mysql.hostinger.web.tr","*******-user","*****-password") or die(mysql_error()); 
mysqli_select_db($con,"********-database name") or die(mysql_error()); 

$ders = $_GET['ders']; 

//getting file content 
$dosya = $_FILES['resim']['tmp_name']; 
if(isset($dosya)){ 
    $resim = addslashes(file_get_contents($_FILES['resim']['tmp_name'])); 

    //control of if the file is an image or not 
    $resim_boyutu = getimagesize($_FILES['resim']['tmp_name']);           //This gives false if the $dosya is not an image 
    if($resim_boyutu == false) 
    echo "Lütfen resim türünden bir dosya seçiniz."; 
    else { 
    if(!mysqli_query($con,"INSERT INTO $ders VALUES ('','$resim')"))     //uploading image into the table 
     echo "Görüntü yüklenirken bir hata oluştu."; 
    else 
     echo "Görüntü yüklendi"; 
    } 
} 

else 
    echo "Lütfen resim seçiniz."; 

?> 

</html> 
+0

你在print_r($ _ FILES)中得到了什么?图像名称中是否有任何保留字符(例如空格,标点符号,非ASCII)? – Bhavin

+0

有_mat_upload.php_ – Ayak973

+0

@ Ayak973啊真的非常感谢!!!我已经改变了一个.php文件名,但忘了改变它的连接。我已经给了很多时间来解决这个问题..小虫子.. –

回答

0

使用getimagesize()exif_imagetype()

// integer - for example: IMAGETYPE_GIF, IMAGETYPE_JPEG etc. 
$type = exif_imagetype($_FILES['image']['tmp_name']); 

$info = getimagesize($_FILES['image']['tmp_name']); 
$mime = $info['mime']; // mime-type as string for ex. "image/jpeg" etc. 
$width = $info[0];  // width as integer for ex. 512 
$height = $info[1];  // height as integer for ex. 384 
$type = $info[2];  // same as exif_imagetype 

记住,exif_imagetypegetimagesize.检查文档更快更多信息。

+0

但是可以知道图像类型解决错误404吗? –

0

很多要解决的地方。 (我常常想,我应该已经签署了代码审查,而不是堆栈溢出)

  • 你必须在你的代码在你die声明老mysql_引用这将永远不可能给你一个有用的回复。取而代之的是die(mysqli_error($con))

  • 使用mysqli_connect,而不是作为单独的方法调用时,它强烈建议也状态数据库。 Read the Manual

  • 在执行$ _FILE数据之前,您确实应该检查文件上传错误代码。例如:if($_FILES['resim']['error'] == 0){ process upload }

  • 正如您明确使用非ascii语言,强烈建议您在<form>标记中使用accept-charset='utf-8'

  • 我建议你阅读有关saving filedata into MySQL,我也建议你不这样做,这是远更好和更有效,更容易调试,以一个简单的参考保存到一个数据库中的文件和存储图像文件服务器光盘,而不是数据库中的字段。 Reference

  • 你必须要非常小心(读:变化,迫切!),具有$_GET值不合格和插直入您的SQL查询:INSERT INTO $ders这是一个非常糟糕的主意和不应该做的。至少,你应该删除与Preg_replace正则表达式的任何无效或控制字符,如:

    $ders = preg_replace("/[a-z0-9_]/i","",$_GET['ders']); 
    
  • 什么让你觉得你需要addslashesfile_get_contents?我建议加斜杠,而不是用逃避的数据值:

    $resim = mysqli_real_escape_string($con, 
         file_get_contents($_FILES['resim']['tmp_name'])); 
    
  • 更妙的是使用MySQLi Prepared Statements,并用面向对象的数据库编程结合这一点。强烈建议使用此方法

,因为你没有(还)我不能为你提供任何调试输出/帮助说明是什么原因导致你的错误404,你在你的问题汇报。添加这些数据(编辑你的问题),让我知道,然后我可以修改这个。

附加:因为你清楚地使用非ASCII字符集,我会强烈建议花一点时间,并给予this Stack Overflow Q&A一读通过,所以你知道如何正确看待数据库的字符编码。这可能会为你节省天的压力。我不是认为从这个问题的角度来看,这是一个问题。

我也建议使用mb_string PHP module来确保PHP正确处理多字节字符串。