アプリ版:「スタンプのみでお礼する」機能のリリースについて

PDOを使ってXampp環境(ローカル環境)でPHPとHTMLでテキストが投稿できる掲示板を作成できたのですが、テキストしか投稿できません、画像や動画も投稿できるようにするためには、次のPHP+HTMLプログラムをどう修正すれば良いでしょうか?

<form action="" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="">
<input type="file" name="image">
<input type="submit" value="upload">
</form>

ただ単に上記のHTMLを挿入するだけではもちろん画像は投稿できません。
動画は難しいなら画像だけでもいいので投稿できるようにプログラムを修正したいです。

よろしくお願いします。

<?php

include_once("./app/database/connect.php");


if(isset($_POST["submitButton"])){
//スーパーグローバル変数 $_POSTを使う username=キー//
//$username=$_POST["username"];
//var_dump($username);
//$username=$_POST["bodycomment"];
//var_dump($username);


$post_date = date("Y-m-d H:i:s");


$sql = "INSERT INTO `comment` (`username`, `bodycomment`, `post_date`) VALUES (:username, :bodycomment, :post_date);";
$statement = $pdo->prepare($sql);

//値をセットする :username,:bodycomment,:post_dateの中に値をセットする
$statement->bindParam(":username", $_POST["username"], PDO::PARAM_STR);
$statement->bindParam(":bodycomment", $_POST["bodycomment"], PDO::PARAM_STR);
$statement->bindParam(":post_date", $post_date, PDO::PARAM_STR);

$statement->execute();
}


$comment_array = array();

//DBからデータを取ってくるSQL文//
//commentDBでのデータをテーブルから取得する

$sql = "SELECT * FROM comment";
$statement = $pdo->prepare($sql);
$statement->execute();

$comment_array = $statement;

//var_dump($comment_array->fetchAll());

?>



<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="./assets/css/style.css">

</head>

<body>
<header>
<h1 class="title">mybbs<h1>
<hr>

</header>

<!-- thread -->
<div class="threadWrapper">
<div class="childWrapper">
<div class="threadTitle">
<span>【Title】</span>
<h1> I tried to create my bbs </h1>
</div>

<section>
<?php foreach($comment_array as $comment) :?>
<article>
<div class="wrapper">
<div class="nameArea">
<span>name:</span>
<p class="username"><?php echo $comment["username"]; ?></p>
<time>:<?php echo $comment["post_date"]; ?></time>
</div>
<p class="comment"><?php echo $comment["bodycomment"]; ?></p>
</div>
</article>
<?php endforeach ?>

</section>

<form class="formwrapper" method="POST">
<div>
<input type="submit" value="書き込む" name="submitButton">
<label>名前:</label>
<input type="text" name="username">
</div>
<textarea class="commenttextArea" name="bodycomment"></textarea>
</div>
</form>
</div>

</body>

</html>

A 回答 (3件)

一般に画像や動画を扱うと保存容量や帯域使用量が増大するので、


運用時にかかる経費を考慮した上での設計としましょう。

案1.
投稿物をバイナリとして PDO で保存
バイナリ表示専用の PHP を用意し PDO から読み取り表示
表示例) <img src="/表示.php?id=12345">

案2.
容量面の経費削減を目指すなら
ストレージサービスを用意し投稿物を保存したリンク先のみ PDO で保存
バイナリ表示専用の PHP を用意しリンク先から転送して表示
表示例) <img src="/転送表示.php?id=12345">

案3.
帯域使用量削減を目指すなら
ストレージサービスのリンク先を直接表示させる
表示例) <img src="https://サービス.com/表示/12345.jpg">

案4.
一切の運用経費を掛けないなら
投稿物のバイナリを保存せず、画像や動画の URL だけを投稿させる
CSRF 対策として URL 先のチェックが必要
表示例) 動画は youtube の URL のみ許容し埋め込み表示


参考)
PHP でのファイルアップロードの処理
https://www.php.net/manual/ja/features.file-uplo …
PDO でバイナリを取り扱う
https://www.php.net/manual/ja/pdo.lobs.php
ストレージサービスを PHP で操作
https://cloud.google.com/php/docs/reference/clou …
youtube の埋め込み
https://developers.google.com/youtube/iframe_api …
CSRF の対策
https://www.ipa.go.jp/security/vuln/websecurity/ …
    • good
    • 1

PHP側でinput系の関数か$File系のスーパーグローバル変数を使ってtmpフォルダなどに作成される画像データをムーブするかコピーするか何かしらしないと行けないです。


バイナリを直接DBに入れてもいいけど
    • good
    • 1
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A