私はすべてのフォームデータを取得します:
_$jinput = JFactory::getApplication()->input;
$formData = new JRegistry($jinput->post->getArray());
_
次にそれをデコードし、次のコマンドでカスタム配列に変換します。
_$formDataAsJson = json_decode($formData);
$arrayOfFields = array();
foreach($formDataAsJson as $name => $value) {
if(!empty($value) && $name !== 'submit') {
$arrayOfFields[] = '<strong>'.$name.'</strong>: '.$value;
}
}
_
次にメールで送信:
_$mailer = JFactory::getMailer();
...
$mailer->setBody(implode('<br/>',$arrayOfFields));
_
私のフォームには_type="file"
_の1つの入力があり、この入力に触れず、_type="text"
_で入力のみを入力し、_type="radio"
_で入力を確認すると、すべてのコードが機能します。ただし、入力_type="file"
_を使用してファイルを選択すると、コードが機能しなくなり、メールが届きません。
ファイルを選択したが、デコードして配列に変換せずに_$formData
_をJSONとして送信した場合と:
_$mailer->setBody($formData);
_
それから私は電子メールを受け取ります。そのとき、JSON行の中に入力_type="file"
_の名前はありません。
したがって、入力_type="file"
_がJSON行にプッシュされていないように見えますが、この場合にコードが機能しなくなるのはなぜですか?変ですね。ファイルを選択した場合でも、フォームデータをデコードして配列に変換し、メールを送信するにはどうすればよいですか?または、入力_type="file"
_を->post->getArray()
から除外するにはどうすればよいですか?
ファイルをアップロードおよび送信するためのコード:
_jimport('joomla.filesystem.file');
$file = $jinput->files->get('nameOfFileInput');
if(!empty($file['name'])) {
$filename = JFile::makeSafe($file['name']);
$src = $file['tmp_name'];
$dest = JPATH_SITE . DIRECTORY_SEPARATOR . "tmp" . DIRECTORY_SEPARATOR . $filename;
if(JFile::upload($src, $dest)) {
$mailer->addAttachment($dest);
}
}
_
Joomla 3.5.1
これでファイル入力データを取得できます:
_$files = $input->files->get('inputName');
_
JRegistry
を使用してから_json_decode
_を使用する必要はありません。最初に$jinput->post->getArray()
からarray
を取得します。
だからあなたのコードは
_$jinput = JFactory::getApplication()->input;
$formData = $jinput->post->getArray();
$arrayOfFields = array();
foreach($formData as $name => $value) {
if(!empty($value) && $name !== 'submit') {
$arrayOfFields[] = '<strong>'.$name.'</strong>: '.$value;
}
}
_
しかし、ファイル入力の入力に関する問題については、どちらの方法でも機能するはずです。
ファイル入力は$jinput->post->getArray()
に含まれていないため、問題は別の場所に依存しています。
エラー報告をオンにして、エラーがスローされていないか確認することをお勧めします。どのように行われるかは この答え で確認できます。サーバーの構成に応じて、最初のポイントでそれを行う必要があります。
また、コードをtry-catchにラップして、スローされたエラーをキャッチできます。
_try {
// Your code here
// Create arrayOfFields and send email
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
_
どうなるか教えてください。