1

私のサイトにはphpメッセージシステムがあります。それを使用すると、ユーザーは互いにメッセージを送受信できますが、最近、ユーザーがメッセージと共に写真を送信できるように、画像を添付する方法を探していました。

メッセージは ptb_messages に保存され、メッセージ部分 (件名と本文) は正常に機能しますが、BLOB タイプである「イメージ」というテーブルに列と、イメージ名を格納する「名前」列を作成しました。しかし、私は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() ?>
4

1 に答える 1

0

私のアドバイスは、画像ファイル自体ではなく、画像の URL をデータベースに保存することです。イメージをサーバー ファイル システムに保存します。その理由は、バックアップとパフォーマンスの概念に基づいており、巨大な BLOB 列の移動を何度も繰り返すのは良くありません。さらに、誰かが SELECT * を LIMIT 句なしで記述した場合、すべての画像を転送するテーブル スキャンが実行されます。

とはいえ、どうしても画像をデータベース テーブルに保存する場合は、 base64_encode() を使用して、画像ファイルをバイナリ転送に対して安全にすることができます。画像をブラウザに送信する前に呼び出す、対応するデコード関数があります。

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

HTH、〜レイ

于 2012-12-16T17:15:10.597 に答える