2014-09-26 133 views
0

我想上传图像到MySQL表。当图像选择它工作正常。但是,如果没有选择图像,则显示错误信息。我该如何解决它?图像上传到MySQL数据库使用PHP

警告:file_get_contents()函数:文件名不能在 C是空的:\ WAMP \ WWW \ firstdialnew \ firstdial \ adhandler.php上线23

$stype=$_POST['stype']; 
$image = addslashes(file_get_contents($_FILES['image']['tmp_name'])); 
$image_name = addslashes($_FILES['image']['name']); 

if($stype="") 
{ 
echo "Please fill all the details"; 
}else{ 
$sql=mysql_query("INSERT INTO ads 
          (sid,stype,image,image_name) 
          VALUES(NULL,'$stype','$image','$image_name')"); 
echo "Details Successfully send"; 
} 
+0

消息很明显,你没有任何$ _FILES,显示你上传文件的部分 – Mihai 2014-09-26 09:59:18

+0

你试过倾销你的$ _FILES数组的内容 - 看起来你有阵列中没有什么这就是为什么你会得到这个消息 – Alex 2014-09-26 09:59:41

+0

这是一个更好的主意,保持图像在服务器中,并在数据库中存储路径。 – 2014-09-26 10:01:51

回答

3

你需要检查/验证该图像将被上传或不尝试这样

if (!empty($_FILES['image']['name'])) { 
    $image = addslashes(file_get_contents($_FILES['image']['tmp_name'])); 
    $image_name = addslashes($_FILES['image']['name']); 
}else{ 
    $image = ''; 
    $image_name = ''; 
} 
+0

它工作Ram.Thank你。 – Tje 2014-09-26 10:10:40

+0

我很高兴它适合你:) – 2014-09-26 10:11:13

+0

不可以。你不应该在'$ _FILES'上使用'file_get_contents()'。 – Raptor 2014-09-29 01:58:33

1

你不检查$_FILES东西试试这个

$stype=$_POST['stype']; 
if(isset($_FILES['image'])) { 
    $image = addslashes(file_get_contents($_FILES['image']['tmp_name'])); 
    $image_name = addslashes($_FILES['image']['name']); 
}else{ 
    $image = ''; 
    $image_name = ''; 
} 

我会建议你在一个文件夹中上传文件并将文件名存储在mysql表中。

这里是你如何能做到这一点

$file_path = "uploads/"; 

if(isset($_FILES['image'])) { 
    $file_name = basename($_FILES['uploaded_file']['name']); 
    $file_path = $file_path . $file_name; 

    //You should validate the image before upload 
    move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path); 
}else{ 
    $image = ''; 
    $image_name = ''; 
} 

//now store file name in db 
$sql=mysql_query("INSERT INTO ads 
         (sid,stype,image,image_name) 
         VALUES(NULL,'$stype','$file_name','$image_name')"); 
+3

你的回答有什么不同 – 2014-09-26 10:01:36

+1

@RamSharma这是建议使用'$ _FILES'。 'file_get_contents()'是不必要的,''move_uploaded_file()'应该被使用。 – Raptor 2014-09-29 01:57:50

0

你加:

<form method="POST" enctype="multipart/form-data"> 

到表单(ENCTYPE = “的multipart/form-data的”)

+0

我觉得他加了这个,因为他可以保存图片但是如果图片没有被选中会出问题 – 2014-09-26 10:07:00

0

试这个:

$stype=$_POST['stype']; 
    $image_name =''; 
    $image=''; 
    if(!empty($_FILES['image'])) { 
    $image = addslashes(file_get_contents($_FILES['image']['tmp_name'])); 
    $image_name = addslashes($_FILES['image']['name']); 
     } 
     if($stype="") 
     { 
     echo "Please fill all the details"; 
     }else{ 
     $sql=mysql_query("INSERT INTO ads 
         (sid,stype,image,image_name) 
         VALUES(NULL,'$stype','$image','$image_name')"); 
     echo "Details Successfully send"; 
     } 
+0

还是错的,对不起。 – Raptor 2014-09-29 01:58:51

1

按照我的经验,您应该将图像保存到文件夹(例如:public/upload/images/image_name.png) 并将图像路径保存到数据库中。 这很简单,数据库的大小不大

+0

虽然你的建议是完全正确的,但这不是一个答案(而是一个评论)。 – Raptor 2014-09-29 02:01:15