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

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

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

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

Q&A

解決済

1回答

1729閲覧

PHP mysqlにファイルをアップロード時、msgs[]に文字を格納したい

Nobuyasu

総合スコア12

PHP

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

0グッド

0クリップ

投稿2017/05/04 13:51

mysqlに動画、画像をアップロードする簡易掲示板を作成しています。
143行目からINSERT処理を行なっているのですが、3行目のmsgsに記されている通りの内容を格納したいのですが、

// INSERT処理 $stmt = $dbh->prepare('INSERT INTO items(id,account,comment,fileType,fileDate) VALUES(?,?,?,?,?)'); $stmt->execute(id,$_POST['account'],$_POST['comment'],$extension,$_FILES['upfile']['name']); $msgs[] = ['green', '投稿は正常にアップロードされました'];
Parse error: syntax error, unexpected '[' inupload.php on line 103

と表示されます。
色々変更して、その部分のコードそのものを消してみましたが、消すと次にmsgsについて書いている部分にエラーが移ります。
しかし、エラーの内容が一向に理解できません。
閉じ忘れも探したつもりなのですが、見つからないので、何かしら間違えているのだと思われるのですが、どこを変更すれば良いのでしょうか。よろしくお願いします。

全体のコードが下のものになります。

<?php session_start(); // ログイン状態チェック(完成後にコメント外す) if (!isset($_SESSION["ACCOUNT"])) { header("Location: logout.php"); exit; } /* HTML特殊文字をエスケープする関数 */ function h($str) { return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); } // XHTMLとしてブラウザに認識させる // (IE8以下はサポート対象外) #header('Content-Type: application/xhtml+xml; charset=utf-8'); header('Content-Type: text/html; charset=utf-8'); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// $link = mysql_connect('localhost','ユーザ名','パスワード'); $dbname = "データベース名"; $tablename ="items"; //-------↓↓↓さっきのfanction----------------------------------- if (!table_check($dbname,$tablename,$link)) { //---------------↓↓↓ここでテーブル作成----------------------- $sql1 = "CREATE TABLE `{$tablename}`" ."(" . "`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY," . "`account` VARCHAR(10) NOT NULL," . "`comment` VARCHAR(10)," . "`fileType` VARCHAR(10) NOT NULL," . "`fileDate` MEDIUMBLOB" . ");"; $rs=mysql_query($sql1)or die(mysql_error()); } if(!$link){ die('接続失敗です。'.mysql_error()); } $db_selected = mysql_select_db('co_668_it_3919_com', $link); if(!$db_selected){ die('データベース選択失敗です。'.mysql_error()); } mysql_set_charset('utf8'); $result = mysql_query('SELECT id,account,comment,fileType,fileDate FROM items'); if(!$result){ die('SELECTクエリーが失敗しました。'.mysql_error()); } $sql = "INSERT INTO items (id,account,comment,fileType,fileDate) VALUES (id,account,comment,fileType,fileDate)"; $result_flag = mysql_query($sql); if(!$result_flag){ die('INSERTクエリーが失敗しました。'.mysql_error()); } $result = mysql_query('SELECT id,account,comment,fileType,fileDate FROM items'); if(!$result){ die('SELECTクエリーが失敗しました。'.mysql_error()); } $close_flag = mysql_close($link); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //ここでデータベースに登録する try{ // データベースに接続 $dbh = db_connect(); /* コメントがない場合-->コメントがない場合は、ファイルの投稿が必須となる*/ if(!isset($_POST['comment'])){ if(isset($_FILES['upfile']['error']) && is_int($_FILES['upfile']['error'])) { // バッファリングを開始 #ob_start(); try { // $_FILES['upfile']['error'] の値を確認 switch ($_FILES['upfile']['error']) { case UPLOAD_ERR_OK: // OK break; case UPLOAD_ERR_NO_FILE: // ファイル未選択 throw new RuntimeException('ファイルが選択されていません', 400); #break; case UPLOAD_ERR_INI_SIZE: // php.ini定義の最大サイズ超過 case UPLOAD_ERR_FORM_SIZE: // フォーム定義の最大サイズ超過 throw new RuntimeException('ファイルサイズが大きすぎます', 400); default: throw new RuntimeException('その他のエラーが発生しました', 500); } // INSERT処理 $stmt = $dbh->prepare('INSERT INTO items(account,comment,fileType,fileDate) VALUES(?,?,?,?)'); $stmt->execute($_POST['account'],$_POST['comment'],$extension,$_FILES['upfile']['name']); #$msgs[]=['green','投稿は正常にアップロードされました']; $msgs[] = ['green','投稿は正常にアップロードされました']; } catch (RuntimeException $e){ while(ob_get_level()){ ob_end_clean(); // バッファをクリア } http_response_code($e instanceof PDOException ? 500 : $e->getCode()); $msgs[] = ['red', $e->getMessage()]; } } } /*コメントがあったとき*/ elseif(isset($_POST['comment'])){ /*コメントがあって、ファイルの投稿があったとき*/ if(isset($_FILES['upfile']['error']) && is_int($_FILES['upfile']['error'])) { // バッファリングを開始 #ob_start(); $file_nm = $_FILES['upfile']['name']; $tmp_ary = explode('.', $file_nm); $extension = $tmp_ary[count($tmp_ary)-1]; try { // $_FILES['upfile']['error'] の値を確認 switch ($_FILES['upfile']['error']) { case UPLOAD_ERR_OK: // OK break; #case UPLOAD_ERR_NO_FILE: // ファイル未選択 # throw new RuntimeException('ファイルが選択されていません', 400); #break; case UPLOAD_ERR_INI_SIZE: // php.ini定義の最大サイズ超過 case UPLOAD_ERR_FORM_SIZE: // フォーム定義の最大サイズ超過 throw new RuntimeException('ファイルサイズが大きすぎます', 400); default: throw new RuntimeException('その他のエラーが発生しました', 500); } // INSERT処理 $stmt = $dbh->prepare('INSERT INTO items(id,account,comment,fileType,fileDate) VALUES(?,?,?,?,?)'); $stmt->execute(id,$_POST['account'],$_POST['comment'],$extension,$_FILES['upfile']['name']); $msgs[] = ['green', '投稿は正常にアップロードされました']; }catch(RuntimeException $e){ while(ob_get_level()){ ob_end_clean(); // バッファをクリア } http_response_code($e instanceof PDOException ? 500 : $e->getCode()); $msgs[] = ['red', $e->getMessage()]; } } /*コメントがあるが、ファイルの投稿はない場合*/ elseif(){ } } /*ここまではインデント揃えた*/ /* ID指定があったとき */ elseif(isset($_GET['id'])){ try{ $stmt = $dbh->prepare('SELECT type, raw_data FROM image WHERE id = ? LIMIT 1'); $stmt->bindValue(1, $_GET['id'], PDO::PARAM_INT); $stmt->execute(); if (!$row = $stmt->fetch()) { throw new RuntimeException('該当する画像は存在しません', 404); } header('X-Content-Type-Options: nosniff'); header('Content-Type: ' . image_type_to_mime_type($row['type'])); echo $row['raw_data']; exit; } catch(RuntimeException $e){ http_response_code($e instanceof PDOException ? 500 : $e->getCode()); $msgs[] = ['red', $e->getMessage()]; } } // サムネイル一覧取得 $rows = $pdo->query('SELECT id,name,type,thumb_data,date,account,comment FROM image ORDER BY date DESC')->fetchAll(); } catch (PDOException $e) { http_response_code(500); $msgs[] = ['red', $e->getMessage()]; } ?> <!DOCTYPE html> <html> <head> <title>画像アップロード</title> <style><![CDATA[ fieldset { margin: 10px; } legend { font-size: 12pt; } img { border: none; float: left; } ]]></style> </head> <body> <form enctype="multipart/form-data" method="post" action=""> <fieldset> <legend>投稿フォーム</legend> 名前:<br /> <?php $user = htmlspecialchars($_SESSION["ACCOUNT"], ENT_QUOTES)?> <input type="text" name="account" size="30" value="<?php echo (htmlspecialchars($_SESSION["ACCOUNT"], ENT_QUOTES)); ?>" /><br /> コメント:<br /> <textarea name="comment" cols="30" rows="5"></textarea><br /> <legend>画像ファイルを選択(GIF, JPEG, PNGのみ対応)</legend> <input type="file" name="upfile" /><br /> <input type="submit" value="送信" /> </fieldset> </form> <?php if (!empty($msgs)): ?> <fieldset> <legend>メッセージ</legend> <?php foreach ($msgs as $msg): ?> <ul> <li style="color:<?=h($msg[0])?>;"><?=h($msg[1])?></li> <li> <input type="button" onclick="location.href='new_keijiban.php'"value="掲示板へ"></li> </ul> <?php endforeach; ?> </fieldset> <?php endif; ?> </body> </html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

php

1 /*コメントがあるが、ファイルの投稿はない場合*/ 2 elseif(){

elseifの中身に何も書かれていないとシンタックスエラーが出ると思うのですが、コピーミスでしょうか?

あとexecuteは可変引数ですか?
よくあるものだと配列を渡すものが多いと思いますが。

投稿2017/05/04 14:15

編集2017/05/04 14:25
shiroyuki

総合スコア169

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問