php - 在php中上传和检索图像到数据库

标签 php mysql sql

index.php:

<html>
<head>
<title>upload images</title>
</head>
<body> 
<form action="index.php" enctype="multipart/form-data" method="post">
<table style="border-collapse: collapse; font: 12px Tahoma;" border="1" cellspacing="5" cellpadding="5">
<tbody><tr>
<td>
<input name="uploadedimage" type="file">
</td>
</tr>
<tr>
<td>
<input name="Upload Now" type="submit" value="Upload Image">
</td>
</tr>
</tbody></table>
</form>

<?php
include("mysqlconnect.php");

    function GetImageExtension($imagetype)
     {
       if(empty($imagetype)) return false;
       switch($imagetype)
       {
           case 'image/bmp': return '.bmp';
           case 'image/gif': return '.gif';
           case 'image/jpeg': return '.jpg';
           case 'image/png': return '.png';
           default: return false;
       }
     }
     if (!empty($_FILES["uploadedimage"]["name"])) {

    $file_name=$_FILES["uploadedimage"]["name"];
    $temp_name=$_FILES["uploadedimage"]["tmp_name"];
    $imgtype=$_FILES["uploadedimage"]["type"];
    $ext= GetImageExtension($imgtype);
    $imagename=date("d-m-Y")."-".time().$ext;
    $target_path = "images/".$imagename;

if(isset($tmp_name)){
if(move_uploaded_file($tmp_name, $target_path)) {

    $query_upload="INSERT into 'images_tbl' ('images_path','submission_date') VALUES 

('".$target_path."','".date("Y-m-d")."')";
    mysql_query($query_upload) or die("error in $query_upload ==".mysql_error());  

}else{

   exit("Error While uploading image on the server");
} 
}
}
?>
</body>
</html>

mysqlconnect.php:

<?php
/**********MYSQL Settings****************/
$host="localhost";
$databasename="karma";
$user="root";
$pass="";
/**********MYSQL Settings****************/
$conn=mysql_connect($host,$user,$pass);
if($conn)
{
$db_selected = mysql_select_db($databasename, $conn);
if (!$db_selected) {
    die ('Can\'t use foo : ' . mysql_error());
}
}
else
{
    die('Not connected : ' . mysql_error());
}
?>

当我运行上面的脚本时,没有显示错误。并且没有图像不包含在数据库中。

我可以知道如何从数据库上传和检索图像吗?

有人可以帮我吗?

提前致谢!!!

最佳答案

导致代码失败的问题如下:

将代码中 $tmp_name 的所有实例更改为 $temp_name

这适用于 if(isset($tmp_name))if(move_uploaded_file($tmp_name, $target_path))

由于您使用的是 $temp_name=$_FILES["uploadedimage"]["tmp_name"];,因此您使用了错误的变量,即(顺便说一下) 未定义。

另外,正如之前评论区所说;这一行:

INSERT into 'images_tbl' ('images_path','submission_date')

引用表和列时,不得使用引号。要么用反引号将它们括起来,要么将其删除。

例如:

INSERT INTO `tablename` (`column1`,`column2`)

INSERT INTO tablename (column1,column2)

反引号主要用于防止使用保留字,或者所使用的单词之间恰好有空格,或者使用连字符作为单词分隔符。 (仅供引用)。

有关这些保留字的列表,请访问 MySQL.com 网站:

开发者提示:

在开发过程中使用正确的错误报告至关重要。

将以下内容添加到文件顶部将有助于指示任何错误(如果发现):

error_reporting(E_ALL);
ini_set('display_errors', 1);

最后:

您当前的代码已开放给 SQL injection 。使用mysqli_* with prepared statements ,或PDOprepared statements .

可以在这些页面中找到示例。

关于php - 在php中上传和检索图像到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24457021/

相关文章:

php - 将多维数组对象映射到类中的变量

PHP - 如何让我的用户保持登录状态?

mysql - 使用 ruby​​ 从 Mysql 中获取数据

mysql - 来自和到单个表的 SQL 组合

python - clickhouse + sqlalchemy : SELECT drops two rows from result

PHPExcel 文件不是正确的 Microsoft Excel 2003 XLS 格式

php随机丢失部分 session

java - 使用单个 JDBC Statement 对象执行多个查询

MySQl 创建函数来检查字符串是否正确

sql - 在不实际执行查询的情况下确定 Oracle 查询执行时间和建议的数据大小