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

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

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

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

Q&A

解決済

2回答

1452閲覧

FILEをアップロードした時にアップロードの条件に入らない

aushijima

総合スコア55

PHP

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

0グッド

0クリップ

投稿2018/11/08 03:23

編集2018/11/28 05:07

#現状起こっていること
ファイルをアップロードした際に、条件に入らないです。

logger('セッションの値を確認する1'.$_SESSION['upfile'][$i]);

※ログを見ても出力されておらず、条件に入っていないです。
#実現したいこと
chat_theme.phpで、ファイルがアップロードされたら、その情報をセッションに入れて、テーマチャット作成ボタンを押した後にChat.phpでDBへのアップロードファイルのパスを登録したり、移動するためのディレクトリを作成して、ファイルをディレクトリに移動するようにしたいと思っています。
登録ボタンを押すまでにファイルをアップロードしたら、エラーがなかったらセッションに格納されているファイルが上書きされて、それが、Chat.phpに送られた(登録されるファイルが確定された状態)時にファイルを移動したいからです。
※これよりももっと良い方法があればそこも教えてください。
#仕様など
ファイルのアップロードでは、画像以外の.csv、.txtなどのファイルもアップロードできるようにと考えています。
※添付ファイルを追加するを押すとファイルアップロード部分のhtmlができるようになっており、複数登録をする仕様になっています。
chat_theme.phpなどは、主にフォームのバリデーションチェックや入力した値を登録用や検索用のクラスのChat.phpに送る役目です。
※リロードするとjavaScriptでhtmlのタグを出しているので消えてしまいますが、ここは、この仕様(参考にして欲しいと言われたサイト)に似せています。

html部分

<form action="" method="post" name="chat_theme" enctype="multipart/form-data"> <div id="attachedFileAdd" class="attachedFileAdd"> <a href="javascript:void(0);" class="fileadd iconLink" onclick="attachFileClick();"> <img src="" alt=""> <span>添付ファイルを追加する</span> </a> </div> </form>

js部分

// ############################################## // 添付画像の処理を記載 // ############################################## // TODO 番号のリセットなどを実装して、DB上で複数登録させる //カウンターを設定する var attachcount = 0; //添付ファイルのボタンが押された際と削除した際の画像にファイル名を動的に与える為に必要 var attachbox = document.getElementById('attachedFileAdd'); //添付ファイルを追加するボタン function attachFileClick(){ //添付ファイルを追加するを押した回数をカウントアップする attachcount++; var counter = attachcount; var test = document.getElementById('ui-id-1'); //要素内の、最後の子要素の後ろ test.insertAdjacentHTML('beforeend', '<div id="cba_commonAttachedFile'+ counter +'"'+'class="attachedFileParts" data-file-count="'+counter +'">' +'<input type="file" size="30" name="file[] class="inputFile">' +'<input type="hidden" name="MAX_FILE_SIZE value="26,214,400">' +'<span class="guide">(25MBまで)</span>' +'<a href="javascript:void(0);" class="attachedFileList__delete attachedFileDeleteiconLink" onclick="deleteFileClick();">' +'<img src="" alt class="icon">' +'<span>削除</span>' +'</a>' +'</div>');

php部分 chat_theme.php

//テーマチャット作成ボタンが押される前にファイルがアップロードされることは、ないのでファイルがアップロードされたら、セッションに入れておく //上書きをした場合は、書き換わる $file_list = array(); for($i=0;$i<count($_FILES['file']);$i++){ if(empty($_SESSION['upfile'][$i]) || $_FILES['file']['error'][$i] === 0) { unset($_SESSION['upfile']); $_SESSION['upfile'][$i] = $_FILES['file']; logger('セッションの値を確認する1'.$_SESSION['upfile'][$i]); //名前の被りを防いで登録するために、拡張子とファイル名の所を分割する(デバッグ用のコード) $file_list = preg_split("/[.]/",$_SESSION['upfile']['name'][$i]); $_SESSION['filelist'] = $file_list; } //テーマチャット作成時バリデーションチェック if(!empty($_POST['chat_theme_create'])){ //グループタイトルのバリデーション if(empty($_POST['GROUP_CHAT_TITLE'])){ $_POST['err'][] = 'タイトルが入力されていません。'; //グループタイトル文字数上限超過 }elseif($chat->getGroupChatByName($_POST['GROUP_CHAT_TITLE'])) { $_POST['err'][] = '入力されたタイトルは既に登録済みです。'; } //バリデーションエラー時に入力画面で表示させる為にセッションに入れておく //所属メンバーのリスト if($_SESSION['belong_member']){ //バリデーションエラーにひっかかって後にさらに追加した場合 $_SESSION['belong_member'] = array_merge($_SESSION['belong_member'],(array)$_REQUEST['addressId']); }else{ //バリデーションエラー前に初回追加した時(複数登録されることを想定して配列にしておく) $_SESSION['belong_member'] = (array)$_REQUEST['addressId']; } //グループチャット作成登録画面に遷移してきた時 if($_GET['edit_type'] == 'register'){ //ファイルのアップロード状況を確認 logger('登録ボタンを押した瞬間'.$_SESSION['file']); logger('登録ボタンを押した瞬間'.var_dump($_SESSION['file'])); //エラーがなければ登録処理を行う if(empty($_POST['err'])){ $chat->setGroupChat($_POST['GROUP_GHAT_NO'],$_POST['GROUP_CHAT_TITLE'],$_POST['GROUP_CHAT_MEMO'],$_FILE['file']['tmp_name'],$_POST['modifiable'],$_SESSION['belong_member']); //チャットの一覧ページ(ダイレクトページとテーマチャットが一覧で見れるページ)メッセージは、 $_SESSION['edit_topic_msg'] = 'トピックが'.$chat->getGroupChatEditType($_GET['edit_type']).'されました'; //登録がうまく行った場合は、ページ遷移させずに表示させていたセレクトボックスの値などのデータをセッションに入れていたものをクリアする unset($_SESSION['belong_member']); header("Location:chat_top"); } } }

#セッションの中身です。

Array ( [4] => Array ( [name] => Array ( [0] => テスト確認.txt ) [type] => Array ( [0] => text/plain ) [tmp_name] => Array ( [0] => /tmp/php5U3RYZ ) [error] => Array ( [0] => 0 ) [size] => Array ( [0] => 14 ) ) )

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

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

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

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

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

guest

回答2

0

ベストアンサー

こちらの質問の回答が参考になりそうです。
https://teratail.com/questions/66833

PHPのマニュアル見ましたが、PHPのファイルは実際にテンポラリフォルダにファイルを置いているみたいですね。
そしてリクエストが完了次第テンポラリのファイルは削除される。
なので、別のトランザクションからテンポラリファイルを見に行っても消えているようです。

トランザクションの異なるリクエストから先にアップロードしたファイルを見るためにはサーバ上で別のフォルダにファイルを移動してあげる必要があるみたいです。
あと使用後のファイルの削除も自分でコードを書く必要があるとのこと。

やってみて下さい。

投稿2018/11/08 03:59

SE-studying-now

総合スコア351

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

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

0

'<input type="file" size="30" name="file[] class="inputFile">'

nameの指定の、閉じる「"」が足りてない

投稿2018/11/08 03:49

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

aushijima

2018/11/08 08:33

ありがとうございます。条件に入ってセッションに値を格納できました。
aushijima

2018/11/08 08:42

ただ、アップロードしたファイル名を.の部分で分割したりできてなくて、理由がわかりません。
退会済みユーザー

退会済みユーザー

2018/11/08 11:35

文法エラーやタイプミスを検出できる優秀な開発環境の導入を強くおすすめします。Pleiades(Eclipse)やNetbieans IDEやPhpStormなど。
aushijima

2018/11/09 02:22 編集

ありがとうございます。PhpStormを導入してみました。波線が緑で入っているのが、つづり間違いがある所ですか?セッションへの代入の仕方が良くないから出ている表示なのですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問