#現状起こっていること
ファイルをアップロードした際に、条件に入らないです。
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 ) ) )
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。