【问题标题】:Save image url to Mysql Database保存图片url到Mysql数据库
【发布时间】:2014-11-22 01:18:02
【问题描述】:

我有一个名为“mysqlproject”的数据库,其中包含两个表。我感兴趣的表之一是命名标记,并在数据库中声明如下:

CREATE TABLE IF NOT EXISTS `markers` (
`id` int(11) NOT NULL,
`TitleEvent` varchar(60) NOT NULL,
`Description` varchar(80) NOT NULL,
`lat` float(10,6) NOT NULL,
`lng` float(10,6) NOT NULL,
`type` varchar(255) NOT NULL,
`status` varchar(30) NOT NULL,
`EventUserName` varchar(60) NOT NULL,
`PhotosEvent` varchar(255) NOT NULL
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=73 ;

其中一列是PhotosEvent我想在其中保存照片的网址。所以我通过 javascript 文件捕获照片,然后通过 ajax 将其发送到 php 文件“camera.php”

ajax发送过程为:

$.ajax({
        type: "POST",
        url: "camera.php",
        data: { 
        imgBase64: dataURL
              }
        }).done(function( respond ) {
          // you will get back the temp file name
          // or "Unable to save this image."
          console.log(respond);
        });

所以我使用 POST 方法将图像发送到文件“camera.php”。在 php 文件中,我正在拍摄该图像并将其首先保存在文件夹“EventImages”中的“本地服务器”中。好的,那行得通.. 但我想将图像的 url 保存在“PhotosEvent”字段中的数据库中,仅保存在活动 ID 所在的原始位置..

连接数据库:

$connection = mysql_connect('localhost', 'root', '');
if (!$connection) //Success $Connection with server returns 1
{
die("Database Connection Failed" . mysql_error());
}
else
{
//Connection with server established
}

// Try Connection with mysql Database
$select_db = mysql_select_db('mysqlproject');
if (!$select_db) //Success $Connection with Database returns 1
{
die("Database Selection Failed" . mysql_error());
}
else
{
//Connection with Database established   
}

将图像保存为 .png(有效)并尝试将 url 保存到数据库(无效):

if ( isset($_POST["imgBase64"]) && !empty($_POST["imgBase64"]) ) {    

define('UPLOAD_DIR', 'EventImages/');

// get the dataURL
$dataURL = $_POST["imgBase64"];  

// the dataURL has a prefix (mimetype+datatype) 
// that we don't want, so strip that prefix off
$parts = explode(',', $dataURL);  
$data = $parts[1];  

// Decode base64 data, resulting in an image
$data = base64_decode($data);  

// create a temporary unique file name
$file = UPLOAD_DIR . uniqid() . '.png';

// write the file to the upload directory
$success = file_put_contents($file, $data);

// return the temp file name (success)
// or return an error message just to frustrate the user (kidding!)
print $success ? $file : 'Unable to save this image.';

 $results = mysql_query("INSERT INTO markers (PhotosEvent) WHERE id ='".$_SESSION['id']."'VALUES('$dataURL')");
   }

我的问题是保存图像 url - 数据库路径。我怎样才能做到这一点?提前谢谢..

【问题讨论】:

  • 您是要插入行还是更新现有行?
  • 更新现有的..
  • 更新标记 SET PhotosEvent = '$dataUrl' WHERE id = $_SESSION['id']
  • 改了...没炒锅
  • No 不起作用...可能是什么问题?

标签: javascript php mysql ajax database


【解决方案1】:

找到了!

define('UPLOAD_DIR', 'EventImages/');
$img = $_POST['imgBase64'];
$img = str_replace('data:image/png;base64,', '', $img);
$img = str_replace(' ', '+', $img);


$data = base64_decode($img);
$file = UPLOAD_DIR . uniqid() . '.png';
$success = file_put_contents($file, $data);
print $success ? $file : 'Unable to save the file.';


$result=mysql_query("SELECT id FROM markers ORDER BY id DESC LIMIT 1");
while ($row = mysql_fetch_array($result)){
$LastInsertID=$row['id'];
}
$results = mysql_query("UPDATE markers SET PhotosEvent='".$file."' WHERE id = '".$LastInsertID."'");    

现在它可以正常工作了。我正在获取表 Markers 中的最后一个已知 id,并将图像的 url 保存在数据库中的变量 $file 中!我还像以前一样将图像保存到文件夹 EventImages 中!!

【讨论】:

    【解决方案2】:

    如果您想进行 INSERT,那么您的 VALUES 放错了位置。

    做:

    $results = mysql_query("INSERT INTO markers (PhotosEvent) VALUES ('$dataURL')...
    

    还要确保 session_start(); 已加载,因为您正在使用会话。

    看到问题中的 cmets 后,如果

    UPDATE markers SET PhotosEvent = '$dataUrl' WHERE id = $_SESSION['id']
    

    UPDATE markers SET PhotosEvent = '$dataUrl' WHERE id = '".$_SESSION['id']."'
    

    没有用,可能是这个原因。

    在文件顶部添加错误报告,这将有助于生产测试。

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

    mysql_error()

    使用这些错误报告方法将有助于发现代码中的错误。

    【讨论】:

    • 它不起作用..我尝试了很多组合..创建新 id 并插入任何数据的唯一代码行是:$imageContentsEscaped = mysql_real_escape_string($success, $connection);mysql_query("INSERT INTO markers (PhotosEvent) VALUES ('$imageContentsEscaped')", $connection);,但这会给我带来价值: 161078。我不知道那个值到底是什么。如果我在开始时尝试使用“更新标记集”的这行代码它不起作用!
    • @monakons 在查询后使用var_dump($results);,会产生什么结果?
    • @monakons 好奇。您的表单确实包含 enctype="multipart/form-data"?
    • @monakons 另外,由于我们正在处理文件,这些dataURL = $_POST["imgBase64"]; 很可能是dataURL = $_FILES["imgBase64"];
    • 它不会产生任何东西。我不是“停留”在 camera.php 中查看打印的内容。它只是一个用于保存数据的 php 代码。不,我不包含 enctype="multipart/form-data" 。我应该吗?
    猜你喜欢
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    相关资源
    最近更新 更多