【问题标题】:How to upload photo to existing mySQL via form如何通过表单将照片上传到现有的 mySQL
【发布时间】:2012-05-08 19:19:23
【问题描述】:

我有一个用于基本客户端配置文件的现有 mySQL 数据库。我需要为每条记录添加一张图片。

我有一个带有输入和文本区域的表单来创建记录。我知道照片字段是一个 blob,但是如何在现有表单中创建上传?关于从哪里开始有什么建议吗?

jquery 会让这更容易完成吗?

谢谢。

埃里克

【问题讨论】:

  • 如果要上传图片,需要使用<input type="file">。这是默认方法。 Ajax *不能*[1] 用于文件传输。我很高兴您使用 MySQL,但 javascript 不直接与 MySQL 通信(没有插件)。我的观点是:您需要一种服务器端语言。你用的是PHP吗? [1] - There are hackable methods to achieve this functionality, but no default core method to support at this time.
  • 是的,我正在使用 PHP。我已经使用 insert.php 脚本在表单中插入记录。我可以将照片上传合并到我现有的脚本中吗?

标签: php jquery mysql blob


【解决方案1】:

我认为更好的方法是为每个配置文件上传图像,而不是在 mysql db 中使用 blob 来存储图像。您可以检查copymove_uploaded_file 用于上传文件的php 函数。如果需要,您可以稍后调整该图像的大小。您必须将您的 pictute 字段从 blob 更改为 varchar 。

谢谢。

【讨论】:

  • 上传过程需要javascript还是jquery?不知何故,我需要在提交执行 insert.php 脚本之前暂存文件。
  • 如果是强制性的,您可以始终对图像字段使用 javascript/jquery 验证。您将始终在提交页面中获得图像名称。然后将该名称插入到数据库中。
【解决方案2】:

我所做的是有一个名为 users 的表,其中有一列名为 image_id,然后是另一个名为 images_users 的表,其中列有 id、@987654323 @ 和 file。我有一个 php 表单,用户可以在其中上传他们的图片。表单会将文件名(例如:mypicture.jpg,但保留扩展名)重命名为 images_users 表的下一行 id。

$getnewimageid = mysql_query("SELECT id FROM images_users ORDER BY id DESC LIMIT 1", $connection);
$rownewimageid = mysql_fetch_assoc($getnewimageid);
$new_image_id = $rownewimageid['id'];
$new_image_id = ($new_image_id + 1);

确定表单中的文件扩展名,然后设置$new_image_file = "$new_image_id.$extension"

因此文件从 mypicture.jpg 重命名为 $new_image_id.jpg(例如:102.jpg);

(我知道这不是解释如何实际做的,我只是想解释如何开始)

然后表单执行 2 次 mysql 查询来存储图像并将图像分配给用户

INSERT INTO images_users (id, user_id, file) VALUES ($new_image_id, $user_id, $new_file_name)

UPDATE users SET image_id = $new_image_id

然后您可以轻松地参考要为特定用户显示的文件。用户甚至可以通过 images_users 表中的多行来拥有多个图像,其中 user_id = 他们的用户 ID。您可以通过

显示他们的所有图像
SELECT * FROM images_users WHERE user_id = $user_id

【讨论】:

    【解决方案3】:

    出于性能目的,我从不将照片作为 blob 上传到 mySql。相反,我将图片的路径上传到 mySql 并使用上传类(类似于 http://www.verot.net/php_class_upload.htm)将图片上传到服务器。只需添加一个现有的输入,在表单标签的末尾添加“enctype="multipart/form-data"”(form enctype="multipart/form-data" method="post"),实现类,然后执行您的验证检查 POST 回以确保用户添加了文件,以便它成功更新到数据库。

    PHP:

    if(isset($_POST['upload']))
    {
    include_once('class.upload.php');
    if($_FILES['photo']['size'][0] != 0) //check to see if photo is empty{
    
        //place existing code for data upload here but add photo filepath here
    
        $handle = new Upload($file);
        if ($handle->uploaded) { //if upload was successful
            $handle->file_new_name_body   = $file['name'];
            $handle->Process("./photos/");
        }
    }
    

    HTML:

    <form name="form" id="form" action="form.php" enctype="multipart/form-data" method="post">
    <input type="file" id="photo" name="photo" accept="gif|jpg|jpeg|png"/>              
    <button type="submit" class="button" name="upload" id="upload">Upload</button>
    

    对于现有照片,只需将其个人资料图片作为 default.png 并将它们定向到执行与上述相同操作的更新表单。应该可以正常工作。

    【讨论】:

    • 请问您通过不在 MySQL 中存储图片可以避免哪些安全风险?
    猜你喜欢
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 2021-02-06
    相关资源
    最近更新 更多