We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 33003
    • 26 Posts
    eForm を iso-2022-jp 版の v.1.4.4a で使用しています。

    普通の問い合わせ受け付け(テキストメール)は、問題なく運用できているのですが。

    今回、画像投稿を受け付けることになり、eForm で画像を添付して送れるようにしたいのですが、添付ファイルが内状態でメールが送られてきます。
    なんとか、解決方法を探しているのですが、皆さんのお知恵をお借りできませんでしょうか?


    スニペットコール
    [!eForm? &formid=`tokoform` &tpl=`TokoForm` &report=`tokoThanksRpt` &to=`***@****.jp` &thankyou=`tokoThanks` &sendAsHtml=`1` !]



    テンプレートチャンク : TokoForm
    <!-- Chunk: ContactForm : START -->
    <p class="form_error_p">[+validationmessage+]</p>
    <form id="tokoform" action="[~[*id*]~]" method="post" enctype="multipart/form-data">
    <table border="0" cellpadding="0" cellspacing="0" class="contactus_tbl" summary="投稿フォーム">
    <tbody>
    <tr>
    <th><label class="cfPhoto" for="cfPhoto">写真画像</label></th>
    <td><input type="file" name="attachment" id="cfPhoto" eform="写真画像:file:1" /></td>
    </tr>
    
    <tr>
    <th><label class="cfMessage" for="cfMessage">コメント欄</label></th>
    <td><textarea name="message" id="cfMessage" eform="コメント:string:0"></textarea></td>
    </tr>
    
    <tr>
    <th><label class="cfName" for="cfName">お名前</label></th>
    <td><input name="name" id="cfName" class="text" type="text" eform="お名前:string:1" /></td>
    </tr>
    
    <tr>
    <th><label class="cfEmail" for="cfEmail">メールアドレス</label></th>
    <td><input name="email" id="cfEmail" class="text" eform="メールアドレス:email:1" /></td>
    </tr>
    
    </tbody>
    </table>
    <input type="hidden" value="投稿メール" name="subject" eform="件名:string:1" />
    <input class="submit" type="submit" value="投稿する" />
    </form> 
    <!-- Chunk: ContactForm : END -->
    



    メールチャンク(レポート) : tokoThanksRpt
    <h1>[+name+]様</h1>
    
    <p>
    投稿ありがとうございます!<br />
    投稿された画像のアップロードは、担当者が確認させて頂いてからになります。。</p>
    
    <p>
    ご投稿いただいた内容は以下です。</p>
    <p>	
    お名前:    [+name+]<br />
    メールアドレス:[+email+]<br />
    </p>
    <p>
    コメント:<br />
    [+message+]
    </p>
    <p>
    投稿ファイル:<br />
    [+attachment+]
    </p>
    



    ありがとうページ : tokoThanks
    <!-- Chunk : thankContact : START -->
    <div id="thankscontact">
    <h3>投稿を受け付けました</h3>
    <p>
    投稿頂きましてありがとうございます。</p>
    <p>
    お客様から頂きました投稿写真のアップロードは、後日担当者が確認させて頂いたうえでホームページで紹介させて頂きます。
    </p>
    <p>
    なお、画像のアップロードには、数日かかる場合もございますので、予めご了承ください。</p>
    </div>
    <!-- Chunk : thankContact : END -->
    



    上記の設定で、送信されたメールを見ると・・

    テスト様

    投稿ありがとうございます!
    投稿された画像のアップロードは、担当者が確認させて頂いてからになります。。

    ご投稿いただいた内容は以下です。

    お名前:    テスト
    メールアドレス:*****@*******.**.jp

    コメント:

    投稿ファイル:
    7
    ※実際は、HTMLメールで送られてきています。


    投稿ファイルのところ、([+attachment+])としたところが、送信したファイル名の最初の1文字みたいなのです。
    それ以降が、切り取られてしまっている事なのでしょうか?


    PHPのアップロード関係の設定は、以下の通りです。

    file_uploads On On
    post_max_size 8M 8M
    upload_max_filesize 2M 2M
    upload_tmp_dir no value no value

    upload_tmp_dir が no value なんですが、これは、問題ないでしょうか。
      • 33488
      • 429 Posts
      アップロードされたファイル名からフォルダ(ディレクトリ)を除いたファイル名だけを変数に入れてるみたいではあるんですが、除くロジックとしては/があれば、それで区切って最後に残った部分がファイル名として扱われます。
      けど、1文字だけっていうのもヘンですねぇ・・・。
      ちなみに、添付ファイルとしてメールにもアップロードされたものが送られるようになっていますが、それはどうなっていますか?
      また、eFormのパラメタにデバックオプション(&debug=`true`だったかな)をつけてより詳しくデバック情報に出てくるといいんですが・・。
      なお、upload_tmp_dirはno valueだとシステムの環境変数TMP?の設定を利用するようです。
      実体があるかどうかはそのフォルダにアクセス権にはなるんですが、ファイル名の件はそれとは違ってアップロード時に渡される情報をPHPが環境変数から取ってくるので別の要因なような気がします。
      $_FILESをvar_dumpしてみちゃうようにeFormのスニペットに埋め込んでみて、$_FILE[’attachment’][’name’]がおかしくなっていないかをまずはチェックした方が早いかも知れません。
      そういえば、添付ファイルでの動作確認は私もしてなかったような・・・・。
        • 33003
        • 26 Posts
        ZeRoさん、ありがとうございます。

        提案いただいたデバッグと、スニペットでのチェックをしてみましたが、ダメでした。


        1:デバッグモードにしてみる。

        スニペットコードに &isDebug=`1` を追加してみました。

        [!eForm? &formid=`tokoform` &tpl=`TokoForm` &report=`tokoThanksRpt` &to=`***@****.jp` &thankyou=`tokoThanks` &sendAsHtml=`1` &isDebug=`1` !] 


        ・・結果、変わらず。
        デバッグモードになると、どこかに何か出力されるんでしょうが、エラーはないみたいです。


        2:$_FILE[’attachment’][’name’]を出力してみる。
        eForm スニペットの最後の方を以下のようにしてみました。

        $output = eForm($modx,$params);
        
        if($_POST){
        $output .= '<p id="file_name">NAME=' . $_FILE['attachment']['name'] . '</p>';
        }
        # Return
        return $output;
        ?>

        if($_POST){} の部分を追加して出力させてみました。

        そうしたら、送信後のページに

        NAME=

        と出力されたんですが、ファイル名は取得できませんでした。
        このタイミングでは、すでに名前が破棄されちゃってるんでしょうか。

        eform.inc.php の方も確認してみます。

        もしかしたら、サーバーの環境による?
          • 33488
          • 429 Posts
          ちょっといい加減な記述だったかもです・・・。
          ピンポイントじゃなくてもvar_dump($_FILE)で表示でもOKです。
          http://www.php-ref.com/web/03_move_uploaded_file.htmlがそこら辺りの参考になるかと思います。
          サーバ環境は関係ないと思いたいんですが、、、アップロード失敗すると変数がちゃんとセットされないとかあるのかなぁ
            • 33003
            • 26 Posts
            ZeRoさんから、最初に言われた 「&debug=`1`」 をつけたら、デバッグ情報が取得できました。
            (スニペットに「$isDebug」って、あったのですが、こっちは違ったのでしょうか)

            WARNING - DEBUGGING IS ON
            Make sure you turn debugging off before making this form live!
            
            attachment
            array (
              0 => 'attachment',
              1 => '写真画像',
              2 => 'file',
              3 => '1',
            )
            
            name
            array (
              0 => 'name',
              1 => 'お名前',
              2 => 'string',
              3 => '1',
            )
            
            email
            array (
              0 => 'email',
              1 => 'メールアドレス',
              2 => 'email',
              3 => '1',
            )
            
            subject
            array (
              0 => 'subject',
              1 => '件名',
              2 => 'string',
              3 => '1',
            )
            
            array (
              0 => '',
              1 => '',
              2 => '',
              3 => 0,
            )
            
            formid
            array (
              0 => 'formid',
              1 => 'formid',
              2 => '',
              3 => 0,
            )
            
            '件名' passed using rule: #VALUE ギャラリー 投稿メール, (input=ギャラリー 投稿メール)
            'formid' passed using rule: #VALUE tokoform, (input=tokoform)
            SESSION HASH:718e9f386b0d74c35c605a0b3cc05d1c
            FORM HASH:c601c43bb9411a22316820c92939125c
            Mail Headers:
            From: all@****.jp
            Reply-to:all@****.jp
            To: ***@****.jp
            Subject: ギャラリー 投稿メール
            CC:
            BCC:
            


            添付ファイルのPOST送信までは、できているみたいなんですが、その後「メールに添付して送信」するところに問題があるみたいですね。

            ちなみに var_dump($_FILE) で出力させた結果は、 NULL でした。

              • 33003
              • 26 Posts
              あ、なんかすみません。
              できました!

              テンプレートチャンクを見直していて(サンプルファイルと同じテンプレートでやってみようと・・)


              <form id="tokoform" action="[~[*id*]~]" method="post" enctype="multipart/form-data">

              この部分をコピペしたエディタで見てて気づいたんですが。
              method="post" と enctype="multipart/form-data" の間が 全角スペース だったんです。
              半角に直したら、添付ファイル付きのメールが送信されてきました。

              すみません、またまた、こちらのケアレスミスだったみたいです。


              それにしてもVistaのフォントは、綺麗だけど、全角半角が区別しづらいですね。
              エディタにチャンク内容を持ってこないと気付けませんでした。

                • 33488
                • 429 Posts
                無事動いて何よりです、$_FILEぢゃなかったのかと一瞬思いましたが原因がそれだと確かにNULLになっちゃいますね。