2016-08-16 10 views
1

私はJavaScriptを使用しているので、JavaScriptは慣れていますが、構文は若干似ていますが、まだ学習曲線が少しあるように感じられます。ユーザーがフォームで選択したチェックボックスに基づいて添付ファイルを送信する必要があります(マニュアルをリクエストし、複数のリクエストを行うことができます)。PHPMailerを使用して、チェックしたチェックボックスに基づいてユーザに添付ファイルを送信しますか?

私は以前の質問を読んできました。明らかに、PHPMailerはファイルを添付するのに多くの時間と多くのエラーを保存するので、私はそのオプションを選択しました。ここに私のコードは次のとおりです。

フォーム:

<form method="post" action="form-confirm"> 
    Email: <input type="text" name="email" value="email"><br /> 
    Classic XL Parts: <input type="checkbox" name="document[]" value="ClassicXL" /><br /> 
    Racer 45 Parts: <input type="checkbox" name="document[]" value="Racing45" /><br /> 
    Flexer XL 45 Parts: <input type="checkbox" name="document[]" value="FlexerXL" /><br /> 
    <br /> 
    <input type="submit" value="Submit" /> 
</form> 

PHP(私は何をする必要があるかを説明するためのコメントを追加しました):

require_once '/php/PHPMailer/class.phpmailer.php'; 

    $files = array(
     'ClassicXL' => '/manuals/classic-xl-parts.pdf', 
     'Racing45' => '/manuals/racing-45-parts.pdf', 
     'FlexerXL' => '/manuals/flexer-xl-parts.pdf' 
    ); 

    $checkboxesChecked = array(
    // Do I need to have another array that stores the checkboxes ticked? 
    ); 

    if(isset($_POST) && ($_POST['submit'] == 1)) { 
     $email = new PHPMailer(); 
     $email->From  = '[email protected]'; 
     $email->FromName = 'Webmaster'; 
     $email->Subject = 'Here are the files you requested:'; 
     $email->addAddress($_POST['email']); 
     // My idea here, is that for every $checkboxesChecked, check through the $files 
     // for the corresponding file and attach to the email 
     for () { 
      $file_to_attach = 'PATH_OF_YOUR_FILE_HERE'; 
      $email->AddAttachment($file_to_attach , 'NameOfFile.pdf'); 

      return $email->Send(); 
     } 
    } else { 
     return false; 
    } 

あなたは私のコメント私から見ることができるようにどのようにタスクを完了するための一般的な考えを持って、私はちょうどそこに得るためにいくつかの助けが必要です。どんな助けでも大歓迎です!

答えて

0

これは、あなたが必要なものでなければなりません:

$email->addAddress($_POST['email']); 
if (array_key_exists('document', $_POST)) { 
    foreach ($_POST['document'] as $file) { 
     if (array_key_exists($file, $files)) { 
      $email->addAttachment($files[$file]); 
     } 
    } 
} 
//Don't send until you've attached everything 
return $email->send(); 

いくつかの他のビット - あなたは無効なアドレスを与えてきた場合には送信前addAddressからの戻り値をチェックしてください。送信に失敗した場合は、おそらく$email->ErrorInfoから何らかのエラー情報を取得したいと思うでしょう。

+0

こんにちはシンクロだから、チェックボックスをチェックするのに2番目の配列が必要だと思ったのは間違っていたのですか?私は、彼らがチェックされるコードの他のどこにも見ることができません。 –

+0

さらに詳しく説明すると、送信する必要のあるファイルは、フォームのチェックボックスでチェックされたファイルだけです。だから私はどこかにチェックしてから配列に格納する必要があると思っていましたが、foreachループは$ files配列に存在するチェックボックスにチェックマークをつけて、添付ファイルを追加します。あなたが何を意味するのか理解していれば?あなたはその部分で私を助けるためにあなたの答えを編集することができますか? –

+0

すべてのチェックボックスは同じ名前属性を持っているので、その中の選択はPHPの '$ _POST ['documents']'で表示されます。あなたのスクリプトの一番上に 'var_dump($ _ POST);'をつけて、あなたが意味するものを見てみましょう。私の解決策は、あなたの '$ files'配列のインデックスと正確に一致するチェックボックスの値属性に依存します。これは妥当なアプローチです。 2番目の配列は必要ありません。 – Synchro

関連する問題