質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Q&A

解決済

2回答

1803閲覧

php 掲示板 画像投稿

huku

総合スコア18

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

0グッド

0クリップ

投稿2020/02/14 14:24

現在php掲示板を制作しています。
コメントだけでなく、画像や動画も投稿できるようにしたいため、投稿したらsqlに保存し、表示する際に拡張子で識別したいと考えています。
しかし、調べてある程度はできたのですが、うまく動かない状態です。
具体的には
1、番号、コメント、画像、番号、コメント、画像の順で出したいのですが、画像が一回ですべて出てしまい、順番道理に表示されない。
2、投稿以外の編集ボタンや消去ボタンを一回押すと投稿が表示されなくなる。

この二つが起こって、前に進めない状況です。
sqlは
イメージ説明
このように構成しており

コードは上がindex.php したがimport_media.phpとしています。
文字数が入らなかったため分けていますが、2つ目のhtmlのコードはindex.phpと同じファイルです。
生きず待っているのでどなたか助けていただけないでしょうか?
よろしくお願いします。

php

1<?php 2session_start(); 3// include 'login.php'; 4 5$db_host = 'localhost'; 6$db_name = ''; 7$db_user = ''; 8$db_pass = ''; 9 10// データベースへ接続する 11$link = mysqli_connect( $db_host,$db_user,$db_pass,$db_name ); 12 13if ( $link !== false ) { 14 $err_msg1 = ""; 15 $err_msg2 = ""; 16 $err_msg7= ""; 17 $err_msg15=""; 18 $err_msg16=""; 19 $message =""; 20 $passmessage=""; 21 $name=( isset( $_POST["name"] ) === true ) ?$_POST["name"]: ""; 22 $text=( isset( $_POST["text"] ) === true ) ?$_POST["text"]: ""; 23 $password=( isset( $_POST["password"] ) === true ) ?$_POST["password"]: ""; 24 $upfile=(isset($_FILES['upfile']['error']) && is_int($_FILES['upfile']['error']) && $_FILES["upfile"]["name"] !== "") ?$_POST["upfile"]: ""; 25 26 27 if ( isset($_POST["posting"] ) === true ) { 28 if ( $name === "" ) $err_msg1 = "名前を入力してください"; 29 if (($text === "") && ($upfile === "")) $err_msg2 = "コメント、画像を入力してください"; 30 if (($text === "") && ($upfile !== "")) $err_msg15 = "コメントを入力してください"; 31 if (($text !== "") && ($upfile === "")) $err_msg16 = "画像を選択してください"; 32 if ( $password === "" ) $err_msg7 = "パスワードを入力してください"; 33 if ( ($err_msg1 === "") && ($err_msg15 === "") && ($err_msg7 === "") && ($err_msg2 === "") ) { 34 $query = " INSERT INTO board ( " 35 . " name , " 36 . " text , " 37 . " password " 38 . " ) VALUES ( " 39 . "'" . mysqli_real_escape_string( $link, $name ) ."', " 40 . "'" . mysqli_real_escape_string( $link, $text ) ."', " 41 . "'" . mysqli_real_escape_string( $link, $password ) ."' " 42 ." ) "; 43 44 $res = mysqli_query( $link, $query ); 45 $message = "投稿に成功しました。"; 46 } 47 } 48 49 if ( isset($_POST["posting"] ) === true ) { 50 if ( $name === "") $err_msg1 = "名前を入力してください"; 51 if (($text === "") && ($upfile === "")) $err_msg2 = "コメント、画像を入力してください"; 52 if (($text === "") && ($upfile !== "")) $err_msg15 = "コメントを入力してください"; 53 if (($text !== "") && ($upfile === "")) $err_msg16 = "画像を選択してください"; 54 55 if ( $password === "" ) $err_msg7 = "パスワードを入力してください"; 56 if ( ($err_msg1 === "") && ($err_msg16 === "") && ($err_msg7 === "") && ($err_msg2 === "") ) { 57 58 // 画像投稿 59 try{ 60 $user = ""; 61 $pass = ""; 62 $pdo = new PDO("mysql:host=;dbname=;charset=utf8", $user, $pass); 63 64 65 //エラーチェック 66 switch ($_FILES['upfile']['error']) { 67 case UPLOAD_ERR_OK: // OK 68 break; 69 case UPLOAD_ERR_NO_FILE: // 未選択 70 throw new RuntimeException('ファイルが選択されていません', 400); 71 case UPLOAD_ERR_INI_SIZE: // php.ini定義の最大サイズ超過 72 throw new RuntimeException('ファイルサイズが大きすぎます', 400); 73 default: 74 throw new RuntimeException('その他のエラーが発生しました', 500); 75 } 76 77 78 //画像・動画をバイナリデータにする. 79 $raw_data = file_get_contents($_FILES['upfile']['tmp_name']); 80 81 //拡張子を見る 82 $tmp = pathinfo($_FILES["upfile"]["name"]); 83 $extension = $tmp["extension"]; 84 if($extension === "jpg" || $extension === "jpeg" || $extension === "JPG" || $extension === "JPEG"){ 85 $extension = "jpeg"; 86 } 87 elseif($extension === "png" || $extension === "PNG"){ 88 $extension = "png"; 89 } 90 elseif($extension === "gif" || $extension === "GIF"){ 91 $extension = "gif"; 92 } 93 elseif($extension === "mp4" || $extension === "MP4"){ 94 $extension = "mp4"; 95 } 96 else{ 97 echo "非対応ファイルです.<br/>"; 98 echo ("<a href=\"index.php\">戻る</a><br/>"); 99 exit(1); 100 } 101 102 //DBに格納するファイルネーム設定 103 //サーバー側の一時的なファイルネームと取得時刻を結合した文字列にsha256をかける. 104 $date = getdate(); 105 $fname = $_FILES["upfile"]["tmp_name"].$date["year"].$date["mon"].$date["mday"].$date["hours"].$date["minutes"].$date["seconds"]; 106 $fname = hash("sha256", $fname); 107 108 109 //画像・動画をDBに格納. 110 $sql = "INSERT INTO board (name, text, password, fname, extension, raw_data ) VALUES (:name,:text ,:password,:fname, :extension, :raw_data);"; 111 $stmt = $pdo->prepare($sql); 112 $stmt -> bindValue(":name",$name, PDO::PARAM_STR); 113 $stmt -> bindValue(":text",$text, PDO::PARAM_STR); 114 $stmt -> bindValue(":password",$password, PDO::PARAM_STR); 115 $stmt -> bindValue(":fname",$fname, PDO::PARAM_STR); 116 $stmt -> bindValue(":extension",$extension, PDO::PARAM_STR); 117 $stmt -> bindValue(":raw_data",$raw_data, PDO::PARAM_STR); 118 $stmt -> execute(); 119 120 121 // $res = mysqli_query( $link, $sql ); 122 123 } 124 125 catch(PDOException $e){ 126 echo("<p>500 Inertnal Server Error</p>"); 127 exit($e->getMessage()); 128 } 129 130 $message = "投稿に成功しました。"; 131 } 132 } 133 134 $query = "SELECT id, name, text, date, password, fname, extension, raw_data FROM board ORDER BY id"; 135 $res = mysqli_query( $link,$query ); 136 $data = array(); 137 while( $row = mysqli_fetch_assoc( $res ) ) { 138 array_push( $data, $row); 139 } 140 141 // 編集フォーム 142 $err_msg3 = ""; 143 $err_msg4 = ""; 144 $err_msg5 = ""; 145 $err_msg9 = ""; 146 $message2 =""; 147 $renum=( isset( $_POST["renum"] ) === true ) ?$_POST["renum"]: ""; 148 $rename=( isset( $_POST["rename"] ) === true ) ?$_POST["rename"]: ""; 149 $retext=( isset( $_POST["retext"] ) === true ) ?$_POST["retext"]: ""; 150 $pass2ed=( isset( $_POST["pass2ed"] ) === true ) ?$_POST["pass2ed"]: ""; 151 152 if ( isset($_POST["edit"] ) === true ) { 153 154 if ( $renum === "" ) $err_msg3 = "番号を入力してください"; 155 if ( $rename === "" ) $err_msg4 = "名前を入力してください"; 156 if ( $retext === "" ) $err_msg5 = "コメントを入力してください"; 157 if ( $pass2ed === "" ) $err_msg9 = "パスワードを入力してください"; 158 159 if ( ($err_msg3 === "") && ($err_msg4 === "") && ($err_msg5 === "") && ($err_msg9 === "") ) { 160 foreach( $data as $key => $val ){ 161 if ($val['id'] !== $renum) { 162 } 163 else { // <-- 投稿番号と編集番号が一致 164 if ($val['password'] === $pass2ed){ 165 // ここに編集のコード書く 166 $sql = "UPDATE board SET name = '$rename', text = '$retext' WHERE id = '$renum'"; 167 $res = $link->query($sql); 168 169 $message2 = "編集に成功しました。"; 170 } 171 else { 172 $message2 = "編集に失敗しました。パスワードが間違っています。"; 173 } 174 } 175 if ($message2 === '') { 176 $message2 = "編集に失敗しました。編集番号が一致しませんでした。"; 177 } 178 } 179 } 180 } 181 // 消去フォーム 182 $err_msg6 = ""; 183 $err_msg8 = ""; 184 $delete = ( isset( $_POST["delnum"] ) === true ) ? $_POST["delnum"] : ""; 185 $pass3del = ( isset( $_POST["pass3del"] ) === true ) ? $_POST["pass3del"] : ""; 186 187 188 189 if ( isset($_POST["delete"] ) === true ) { 190 if ( $delete === "" ) $err_msg6 = "番号を入力してください"; 191 if ( $pass3del === "" ) $err_msg8 = "パスワードを入力してください"; 192 193 if ( ($err_msg6 === "") && ($err_msg8 === "") ) { 194 foreach( $data as $key => $val ){ 195 if ( $val['id'] !== $delete ) { 196 } 197 else { 198 if ($val['password'] === $pass3del) { 199 // ここに書き変えのコードを書く 200 $sql = "DELETE FROM board WHERE id = '$delete'"; 201 $res = $link->query($sql); 202 $err_msg6 = $delete . "番の消去に成功しました。"; 203 204 } 205 else { 206 $err_msg8 = $delete . "番の消去に失敗しました。パスワードが間違っています。"; 207 } 208 } 209 } 210 211 if ( ($err_msg6 === '') && ($err_msg8 === '') ) { 212 $err_msg6 = $delete . '番に一致するものを見つけられませんでした。'; 213 } 214 } 215 } 216 217 } else { 218 echo "データベースの接続に失敗しました"; 219 } 220 221?> 222 223

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

try{
$user = "";
$pass = "";
$pdo = new PDO("mysql:host=;dbname=;charset=utf8", $user, $pass);
の部分がifの中にあり、外部からのあくせくができなくなっていたためこの部分を外に出すことで解決することができました。

投稿2020/02/19 11:49

huku

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

追記

php

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <!-- <meta charset="UTF-8N"> --> 5 <title>掲示板</title> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> 7 <link rel="stylesheet" href="./styles.css" type="text/css"> 8 <link href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" rel="stylesheet"> 9</head> 10<body> 11 12<h1>掲示板</h1> 13<section> 14 <h2>新規投稿</h2> 15 <form action="index.php" method="post" enctype="multipart/form-data"> 16  名前 : <input type="text" name="name" value="<?php echo $sessionname ?>" readonly> <?php echo $err_msg1; ?><br> 17 コメント: <input type="text" name="text" > <?php echo $err_msg2; ?><br> 18 19 <label>画像/動画アップロード</label> 20 <input type="file" name="upfile" enctype="multipart/form-data"> 21 <?php echo $err_msg15 ?> 22 <?php echo $err_msg16 ?> 23 24 <br> 25 ※画像はjpeg方式,png方式,gif方式に対応しています.動画はmp4方式のみ対応しています.<br> 26 27 パスワードを設定 <input type="text" name="password" > <?php echo $err_msg7; ?> 28 <input type="submit" value="投稿" name="posting"><br> 29 <?php echo $message; ?> 30 </form> 31 32 <h2>投稿編集</h2> 33 <form action="index.php" method="post"> 34 編集番号 <input type="number" name="renum"> <?php echo $err_msg3; ?><br> 35 名前: <input type="text" name="rename" value="<?php echo $sessionname ?>" readonly><?php echo $err_msg4; ?><br> 36 コメント: <input type="text" name="retext" > <?php echo $err_msg5; ?><br> 37 パスワードを入力 <input type="text" name="pass2ed" ><?php echo $err_msg9; ?><br> 38 <input type="submit" value="編集" name="edit"><br> 39 <?php echo $message2; ?> 40 </form> 41 42 <h2>消去</h2> 43 <form action="index.php" method="post"> 44 消去番号 <input type="number" name="delnum">     <?php echo $err_msg6; ?><br> 45 パスワードを入力 <input type="text" name="pass3del" > <?php echo $err_msg8; ?><br> 46 <a class="delp" href="#">消去</a><br><br> 47 48 <!-- パスワード確認モーダル --> 49 <div class="confirm"> 50 <div class="confirm-wrapper"> 51 <p class="batsu"><i class="fas fa-times"></i></p> 52 <div class="clear"></div> 53 <h1>本当に消去してもいいですか?</h1> 54 <input type="submit" value="はい" name="delete">  <br><br> 55 <input type="submit" value="いいえ" name="delete3">  <br> 56 </div> 57 </div> 58 </form> 59 60</section> 61<section> 62 <h2>投稿一覧</h2> 63</section> 64<?php 65 if ($val['id'] === "") { 66 echo "投稿がありません"; 67 } else { 68 $sql = "SELECT * FROM board ORDER BY id;"; 69 $stmt = $pdo->prepare($sql); 70 $stmt -> execute(); 71 foreach( $data as $key => $val ){ 72 echo $val['id'] . ' ' . $val['name'] . ' ' . $val['text'] . ' ' . $val['date'] . '<br>'; 73 while ($row = $stmt -> fetch(PDO::FETCH_ASSOC)){ 74 // echo ($row["id"]."<br/>"); 75 // 動画と画像で場合分け 76 $target = $row["fname"]; 77 if($row["id"] === $val['id'] && $row["extension"] == "mp4"){ 78 echo ("<video src=\"import_media.php?target=$target\" width=\"426\" height=\"240\" controls></video>"); 79 } 80 elseif($row["id"] === $val['id'] && $row["extension"] == "jpeg" || $row["extension"] == "png" || $row["extension"] == "gif"){ 81 echo ("<img src='import_media.php?target=$target'>"); 82 // echo '<img src="./import_media.php?id='.$row["id"].'" />'; 83 } 84 // echo ("<br/><br/>"); 85 } 86 87 } 88 ?> 89<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 90<script> 91$(function(){ 92 $('.delp').click(function(){ 93 $('.confirm').addClass('open'); 94 }); 95 $('.batsu').click(function(){ 96 $('.confirm').removeClass('open'); 97}); 98 }); 99</script> 100</body> 101</html>

php

1<?php 2 if(isset($_GET["target"]) && $_GET["target"] !== ""){ 3 $target = $_GET["target"]; 4 } 5 else{ 6 header("Location: index.php"); 7 } 8 $MIMETypes = array( 9 'png' => 'image/png', 10 'jpeg' => 'image/jpeg', 11 'gif' => 'image/gif', 12 'mp4' => 'video/mp4' 13 ); 14 try { 15 $user = "kadai2_user"; 16 $pass = "kadai2_pass"; 17 $pdo = new PDO("mysql:host=localhost;dbname=;charset=utf8", $user, $pass); 18 $sql = "SELECT * FROM board WHERE fname = :target;"; 19 $stmt = $pdo->prepare($sql); 20 $stmt -> bindValue(":target", $target, PDO::PARAM_STR); 21 $stmt -> execute(); 22 $row = $stmt -> fetch(PDO::FETCH_ASSOC); 23 header("Content-Type: ".$MIMETypes[$row["extension"]]); 24 echo ($row["raw_data"]); 25 } 26 catch (PDOException $e) { 27 echo("<p>500 Inertnal Server Error</p>"); 28 exit($e->getMessage()); 29 } 30?>

投稿2020/02/14 14:32

huku

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/02/15 00:26

質問は編集できるので回答やコメントを使うのではなく、質問本文を更新してください。
huku

2020/02/15 05:30

文字数オーバーでで入らなかったんです(>人<)
m.ts10806

2020/02/15 06:37

ではコードをもっとミニマムな構成のコードにされては。現象が再現するとのであれば良いわけですし、回答者としても単に全部投げられてもストレスなので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問