<input type =“file”accept =“image / *; capture = camera”/>使用php将图像保存到数据库

时间:2016-09-02 13:20:18

标签: php html mysql

我有一个移动网络应用表单,我可以访问移动设备相机并捕获照片以及表单中其他字段中捕获的其他一些详细信息。使用php我将表单中捕获的信息成功保存到mysql数据库,但不存储图像。我已经搜索了一个解决方案,但找不到任何关于使用php

的内容
<input type="file" accept="image/*;capture=camera"> 

将图像存储在数据库中。数据库字段当前是blob,但如果需要,可以更改。

该表单适用于所有其他数据,因此问题在于我对如何使用php处理图像或文件缺乏了解。任何人都可以帮助或指出我正确的方向。我的代码的基础粘贴在下面。

表单保存工作正常,因为bus_name输入保存到数据库,但bus_img记录为空。

HTML

<div data-role="page" id="view_record">
  <div data-role="header">
    <a href="#" data-rel="back" class="ui-btn-right ui-btn  ui-btn-icon-notext ui-corner-all ui-icon-back">Back</a>
  <div data-role="main" class="ui-content">
    <form method="post" enctype="multipart/form-data" action="saveRecord.php">
      <label for="bus_name">Business Name:</label>
      <input type="text" name="bus_name" id="bus_name" placeholder="Enter Business Name">

      <label for="bus_type">Business Type:</label>
      <input type="text" name="bus_type" id="bus_type" placeholder="Enter Business Type">

      <label for="bus_tel">Business Tel:</label>
      <input type="text" name="bus_tel" id="bus_tel" placeholder="Enter Business Tel No">

      <label for="bus_img">Business Photo:</label>
      <input type="file" name="bus_img" id="bus_img" accept="image/*;capture=camera">

      <label for="comments">Comments:</label>
      <textarea name="comments" id="comments" placeholder="Enter Comments"></textarea>

      <input type="submit" value="Submit">    
    </form>
  </div>
  </div>
</div>

PHP

<?php
$bus_img = $bus_name = "";

$servername = "";
$username = "";
$password = "";
$dbname = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $conn = mysqli_connect($servername, $username, $password, $dbname);

    if (!$conn) 
    {
        die("Connection failed: " . mysqli_connect_error());}   

    $bus_img = $_FILES["bus_img"];
    $bus_img = mysqli_real_escape_string($conn, $bus_img);
    $bus_name = $_POST["bus_name"]; 

    $sql = "INSERT INTO tblLead(leadImage, occupantName)

    VALUES ('$bus_img','$bus_name')";

    if (mysqli_query($conn, $sql))
    {       
    } else 
    {
        echo "Error: " . $sql . mysqli_error($conn);
    }   
    mysqli_close($conn);
    exit();     
}
?>

任何帮助非常感谢。感谢

1 个答案:

答案 0 :(得分:1)

首先,文件处理需要$_FILES而不是$_POST

您的表单标记不包含正确的enctype来处理文件。

根据手册中有关文件处理的示例:

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

参考:

然后你需要转义那个(文件)数据,有几种方法可以做到这一点。

其中一个是mysqli_real_escape_string($conn, $file)

参考:

您还应该使用针对所有数据的内容,因为它现在可以进行SQL注入。

即。并通过替换:

$bus_img = $_POST["bus_img"];

使用:

$bus_img = $_FILES["bus_img"];
$bus_img = mysqli_real_escape_string($conn, $bus_img);

确保文件不超过服务器上允许/设置的最大上传大小。

也使用正确的错误检查。