現在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
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。