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

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

ただいまの
回答率

88.92%

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,001

Nobuyasu

score 12

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>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

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


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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る