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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

926閲覧

【PHPメールフォーム】アップロードファイル名が表示されません。

Masa-Y

総合スコア30

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2019/05/10 03:16

ファイルアップロード機能付きのメールフォームを、自作練習しています。
ほぼできたのですが、通知メール上にファイル名だけが表示されません。
原因がわかる方いらっしゃったら教えていただきたいです。
名前などの他の情報は表示されています。
アップロードされたファイルもサーバーのほうに届いています。
イメージ説明
イメージ説明
イメージ説明
イメージ説明

php

1【confirm.php】 2 3<?php 4if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) { 5 $upfilename = $_FILES["upfile"]["name"]; 6 if (move_uploaded_file($_FILES["upfile"]["tmp_name"], "files/" . $_FILES["upfile"]["name"])) { 7 chmod("files/" . $_FILES["upfile"]["name"], 0644); 8 } 9} 10 11$page_flag = 0; 12 13if( !empty($_POST['confirm']) ) { 14 $page_flag = 1; 15 if (isset($_POST['job']) || is_array($_POST['job'])) { 16 $your_job = implode("、", $_POST["job"]); 17 } 18} elseif( !empty($_POST['submit']) ) { 19 $page_flag = 2; 20 require_once('mail.php'); 21} 22?> 23 24 <body> 25 26 <header> 27 </header> 28 <main> 29 30 <section class="contact_form"> 31 32 <?php if( $page_flag === 1 ): ?> 33 34 <div class="container"> 35 <h1 class="bolder pb-3">以下の内容でよろしければ、下の<span class="inlineblock">「送信する」をクリックしてください。</span></h1> 36 </div> 37 38 <div class="contact_form_wrapper px-3"> 39 <form class="confirm_form" action="" method="post"> 40 <input type="hidden" name="scroll_top" value="" class="st"> 41 42 <div class="form_flex"> 43 <div class="form_titles"> 44 お名前 45 </div> 46 <div class="confirm_item"> 47 <p><?php echo htmlspecialchars($_POST["name"], ENT_QUOTES); ?></p> 48 </div> 49 </div> 50 51 <div class="form_flex"> 52 <div class="form_titles"> 53 ご職業 54 </div> 55 <div> 56 <p class="confirm_item"><?php echo $your_job; ?></p> 57 </div> 58 </div> 59 60 <div class="form_flex"> 61 <div class="form_titles"> 62 メールアドレス 63 </div> 64 <div> 65 <p class="confirm_item"><?php echo htmlspecialchars($_POST["mail"], ENT_QUOTES); ?></p> 66 </div> 67 </div> 68 69 <div class="form_flex"> 70 <div class="form_titles"> 71 添付ファイル 72 </div> 73 <div> 74 <p class="confirm_item"><?php echo htmlspecialchars($_FILES["upfile"]["name"], ENT_QUOTES). "&emsp;"; echo round(htmlspecialchars($_FILES["upfile"]["size"], ENT_QUOTES)/1000) . "KB"; ?></p> 75 </div> 76 </div> 77 78 <div class="form_flex"> 79 <div class="form_titles"> 80 その他 81 </div> 82 <div> 83 <p class="confirm_item"><?php echo nl2br(htmlspecialchars($_POST["message"], ENT_QUOTES)); ?></p> 84 </div> 85 </div> 86 87 <div class="btn_wrapper"> 88 <p class="submit"> 89 <input type="submit" name="submit" value="送信する" /> 90 </p> 91 <p class="goback"> 92 <button type="button" onclick=history.back() name="goback" value="もどる" />もどる</button> 93 </p> 94 </div> 95 <input type="hidden" name="name" value="<?php echo $_POST["name"]; ?>"> 96 <input type="hidden" name="job" value="<?php echo $your_job; ?>"> 97 <input type="hidden" name="mail" value="<?php echo $_POST["mail"]; ?>"> 98 <input type="hidden" name="upfile" value="<?php echo $_FILES["upfile"]["name"]; ?>"> 99 <input type="hidden" name="message" value="<?php echo htmlspecialchars($_POST["message"]); ?>"> 100 <input type="hidden" name="recaptchaResponse" id="recaptchaResponse"> 101 </form> 102 </div> 103 104 <?php elseif( $page_flag === 2 ):?> 105 106 <div class="mail_done"> 107 <div class="container"> 108 <h1 class="bolder pb-3">送信完了しました。</h1> 109 <p class="small text-dimgray text-center">2営業日以内に担当よりご連絡させて頂きますので、しばらくお待ちください。<span class="inlineblock"></span></p> 110 <a class="back_to_top" href="index.php">トップページにもどる</a> 111 </div> 112 </div> 113 114 <?php else: ?> 115 <?php endif; ?> 116 117 </section> 118 119

php

1【mail.php】 2<?php 3 4$header = null; 5$auto_reply_subject = null; 6$auto_reply_text = null; 7 8$admin_reply_subject = null; 9$admin_reply_text = null; 10 11date_default_timezone_set('Asia/Tokyo'); 12 13 14/*--------- 自動メール送信 ---------*/ 15$header = "MIME-Version: 1.0\n"; 16$header .= "From: TEST <noreply@test.com>\n"; 17$header .= "Reply-To: TEST <noreply@test.com>\n"; 18 19$auto_reply_subject = '【自動返信テスト】お問い合わせありがとうございます。'; 20$auto_reply_text = "この度は、お問い合わせ頂き誠にありがとうございます。\n下記の内容でお問い合わせを受け付けました。\n\n"; 21$auto_reply_text .= "お問い合わせ日時:" . date("Y-m-d H:i") . "\n"; 22$auto_reply_text .= "お名前:" . $_POST['name'] . "\n"; 23$auto_reply_text .= "ご職業:" . $_POST['job'] . "\n"; 24$auto_reply_text .= "メールアドレス:" . $_POST['mail'] . "\n"; 25$auto_reply_text .= "添付ファイル:" . $_FILES["upfile"]["name"] . "\n\n"; 26$auto_reply_text .= "その他:\n" . $_POST['message'] . "\n\n"; 27$auto_reply_text .= "2営業日中に担当より返信させていただきますので、しばらくお待ちください。\n"; 28$auto_reply_text .= "◯◯◯事務局 \n\n"; 29$auto_reply_text .= "※自動返信のため、このアドレスにメールは返信できません。\n\n"; 30 31// メール送信 32mb_send_mail( $_POST['mail'], $auto_reply_subject, $auto_reply_text, $header); 33 34 35/*--------- 運営側にお知らせ ---------*/ 36$admin_reply_subject = "お問い合わせを受け付けました"; 37 38$admin_reply_text = "下記の内容でお問い合わせがありました。\n\n"; 39$admin_reply_text .= "お問い合わせ日時:" . date("Y-m-d H:i") . "\n"; 40$admin_reply_text .= "お名前:" . $_POST['name'] . "\n"; 41$admin_reply_text .= "ご職業:" . $_POST['job'] . "\n"; 42$admin_reply_text .= "メールアドレス:" . $_POST['mail'] . "\n"; 43$admin_reply_text .= "添付ファイル:" . $_FILES["upfile"]["name"] . "\n\n"; 44$admin_reply_text .= "その他:\n" . $_POST['message'] . "\n\n"; 45 46mb_send_mail( 'xxxxx@gmail.com', $admin_reply_subject, $admin_reply_text, $header); 47 48

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

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

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

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

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

guest

回答2

0

confirmで受けた$_FILESは次のページにpostした時点で消えているので
mailで参照できません

投稿2019/05/10 03:27

yambejp

総合スコア114843

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

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

Masa-Y

2019/05/10 04:14

ありがとうございます。 そうなんですか、わかりました。 $_FILESのファイル名だけ変数に入れたりしてmail.phpで参照する方法は、ありますか。
Masa-Y

2019/05/10 04:50

解決しました。 ご指摘ありがとうございました。
guest

0

ベストアンサー

$auto_reply_text .= "添付ファイル:" . $_FILES["upfile"]["name"] . "\n\n";

<input type="hidden" name="upfile" value="<?php echo $_FILES["upfile"]["name"]; ?>">

hiddenに入れてるなら$_POSTでは。
いずれにしても、「ファイルを添付して送信したい」のであればmove_uploaded_file()でアップロードした先のファイルパスをどこかに持っておく必要はあります。


蛇足:

php

1 <input type="hidden" name="name" value="<?php echo $_POST["name"]; ?>"> 2 <input type="hidden" name="job" value="<?php echo $your_job; ?>"> 3 <input type="hidden" name="mail" value="<?php echo $_POST["mail"]; ?>"> 4 <input type="hidden" name="upfile" value="<?php echo $_FILES["upfile"]["name"]; ?>"> 5 <input type="hidden" name="message" value="<?php echo htmlspecialchars($_POST["message"]); ?>"> 6

↑hiddenでもきちんとhtmlspecialchars()でHTMLエスケープしておきましょう。

投稿2019/05/10 03:47

編集2019/05/10 03:48
m.ts10806

総合スコア80850

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

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

Masa-Y

2019/05/10 04:08

気をつけます、ありがとうございます。 >hiddenに入れてるなら$_POSTでは。 こちらはどういう意味でしょうか? hiddenの箇所は$_FILESを$_POSTにするのでしょうか? 教えていただきたいです。
m.ts10806

2019/05/10 04:13

>hiddenの箇所は$_FILESを$_POSTにするのでしょうか? そういう意味ではないですよ。 confirmに最初送信されたときに下記 <input type="hidden" name="upfile" value="<?php echo $_FILES["upfile"]["name"]; ?>"> となっていてhiddenに$_FILESの情報を埋め込んでいます(何が入っているかはわかっているとは思いますが) そのあとsubmitすることでmail.phpが呼び出されるわけですよね。 そのときに送信されるupfileはinput=hiddenに設定された情報です。 mail.phpでは$_FILESでは送信されていません。$_POSTでinput=hiddenのname=upfileが送信されています。 $_FILESはあくまでinput=fileの情報がformのenctype='multipart/form-data'が設定されていた時に送信されます。
m.ts10806

2019/05/10 04:41

つまり、こう。 mail.php $auto_reply_text .= "添付ファイル:" . $_FILES["upfile"]["name"] . "\n\n"; ↓ $auto_reply_text .= "添付ファイル:" . $_POST["upfile"]. "\n\n";
Masa-Y

2019/05/10 04:49

解決しました! いただいた内容を何度も読み直して、 仰っていることがようやくわかりました。 mail.phpのFILEの箇所を、$_POST[name]に修正したら表示されました。 hiddenとPOSTの理解が深まりました、 ありがとうございました。
m.ts10806

2019/05/10 04:54

hiddenとPOSTというよりフォーム送信、果てはリクエストとレスポンスのところの根本的な理解かと思います。 phpとはいえ、ブラウザで確認する限りは見えているのはhtmlなので、「ソースを表示」で確認の上、対応を検討してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問