将图像附加到 PHP 消息



我的网站上有一个php消息系统。有了它,用户可以相互发送和接收消息,但最近我一直在尝试寻找一种包含图像附件的方法,以便用户可以发送带有消息的照片。

消息存储在ptb_messages中,消息部分(主题和正文)工作正常,但我在表中创建了一个名为"image"的列,它是 BLOB 类型和用于存储图像名称的"name"列。但是我是php和mysql的新手,无论我尝试什么,我似乎都无法将图像存储在数据库中。

谁能帮助我,让我知道我哪里出了问题?

<?php ob_start(); ?>
<?php 
// CONNECT TO THE DATABASE
    require('includes/_config/connection.php');
// LOAD FUNCTIONS
    require('includes/functions.php');
// GET IP ADDRESS
    $ip_address = $_SERVER['REMOTE_ADDR'];
?>

  <?php require_once("includes/sessionframe.php"); ?>

<?php
    confirm_logged_in();
    if (isset ($_GET['to'])) {
       $user_to_id = $_GET['to'];
    }
?> 
<?php 
//We check if the form has been sent
if(isset($_POST['subject'], $_POST['message_content']))
{
    $subject = $_POST['subject'];
    $content = $_POST['message_content'];
    $image = $POST ['image'];
        //We remove slashes depending on the configuration
        if(get_magic_quotes_gpc())
        {
                $subject = stripslashes($subject);
                $content = stripslashes($content);
        $image = stripslashes($image);      
        }
        //We check if all the fields are filled
        if($_POST['subject']!='' and $_POST['message_content']!='')
        {
$sql = "INSERT INTO ptb_messages (id, from_user_id, to_user_id, subject, content, image) VALUES (NULL, '".$_SESSION['user_id']."', '".$user_to_id."', '".$subject."', '".$content."', '".$image."');";
            mysql_query($sql, $connection);
            echo "<div class="infobox2">The message has successfully been sent.</div>";
        }
}
if(!isset($_POST['subject'], $_POST['message_content']))
if (empty($_POST['subject'])){
    $errors[] = 'The subject cannot be empty.';
    if (empty($_POST['body'])){
       $errors[] = 'The body cannot be empty.';
    }
}
{
?>
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
  <div class="subject">
  <input name="subject" type="text" id="subject" placeholder="Subject">
  <input type="file" name="image" id="image">
  <textarea name="message_content" id="message_content" cols="50" placeholder="Message" rows="8" style="resize:none; height: 100px;"></textarea>
  <input type="image" src="assets/img/icons/loginarrow1.png" name="send_button" id="send_button" value="Send">
</form>
<?php } ?>
<?php ob_end_flush() ?>

我的建议是将图像的URL存储在数据库中,而不是图像文件本身。 将映像存储在服务器文件系统中。 原因涉及备份和性能的概念,其中移动巨大的 blob 列不是重复多次的好事。 另外,如果有人在没有限制子句的情况下编写SELECT *,您将获得传输所有图像的表扫描。

也就是说,如果您坚持将图像存储在数据库基表中,则可能需要使用 base64_encode() 使图像文件可以安全地进行二进制传输。 在将图像发送到浏览器之前,您需要调用相应的解码函数。

http://php.net/manual/en/function.base64-encode.php

呵, ~雷

最新更新