/*****************************************************************************/
/*** ファイル名 ***/
//fa
// mailform.php ( Version 3.23 2012/12/22 )
// Qdmail対応版
// メール送信モード追加
// エンコーディングモード追加(多国語対応用)
//fa
/*** 処理概要 ***/
//sg
// アンケート入力・確認・送信完了画面表示
// アンケート入力内容メール送信処理
//sg
/*****************************************************************************/
/********** 初期処理 **********/
// エンコード初期設定
mb_language("Japanese");
//
//メーラータイプ設定
//
define("MAILER_TYPE", "MAIL");
//define("MAILER_TYPE", "SMTP");
//define("MAILER_TYPE", "SENDMAIL");
// 初期設定変数
define("VIEW_DIR", "./Html/");// VIEW格納ディレクトリ
//設定ファイル
require_once("mailform.ini");
//モバイル確認用モジュール
require_once("Net/UserAgent/Mobile.php");
//コンボボックス部品
require_once ("Combo.inc");
$combo = new Combo($dbcon);
define("COMBO_NORMAL", 0);// コンボ部品表示制御用(通常)
define("COMBO_CONFIRM", 1);// コンボ部品表示制御用(確認)
//メール送信用
require_once("qdmail.php");
//出力ヘッダ設定
$head_http_output = "UTF-8";
if (!Net_UserAgent_Mobile::isMobile()) {
$m_type = "pc";
$head_default_charset = "UTF-8";
$head_http_output = "UTF-8";
} else {
$agent = &Net_UserAgent_Mobile::factory();
//型番の入手
//$model = $agent->getModel();
//キャリアの判定
if ($agent->isDoCoMo()) {
$m_type = "docomo";
$head_default_charset = "SJIS-win";
$head_http_output = "SJIS-win";
} else if ($agent->isEZweb()) {
$m_type = "ezweb";
$head_default_charset = "SJIS-win";
$head_http_output = "SJIS-win";
} else if ($agent->isSoftBank()) {
$m_type = "softbank";
$head_default_charset = "SJIS-win";
$head_http_output = "SJIS-win";
} else {
$m_type = "other";
$head_default_charset = "SJIS-win";
$head_http_output = "SJIS-win";
}
}
ini_set('output_buffering', 'On');
ini_set('output_handler', 'mb_output_handler');
ini_set('mbstring.script_encoding', 'UTF-8');
ini_set('mbstring.internal_encoding', 'UTF-8');
ini_set('mbstring.detect_order', 'UTF-8,eucJP-win,SJIS-win,jis');
ini_set('default_charset', $head_default_charset);
ini_set('mbstring.http_output', $head_http_output);
/********** データ処理部 **********/
//パラメータの取得
$mfdata = $_REQUEST["mfdata"];
//パラメータ情報の設定
$p_array = array();
foreach( $_REQUEST as $req_key => $req_value ) {
if ( is_array($req_value) ) {
$tmp_value = array();
foreach( $req_value as $ar_values ) {
$tmp_value[] = mb_convert_encoding($ar_values,"UTF-8","auto");
}
} else {
$tmp_value = mb_convert_encoding($req_value,"UTF-8","auto");
}
$p_array[$req_key] = $tmp_value;
if ( $req_key != "actype" && $req_key != "mfdata" ) {
if ( is_array($tmp_value) ) {
foreach( $tmp_value as $ar_values ) {
$hid_data .= ''."\n";
}
} else {
$hid_data .= ''."\n";
}
}
}
//メールアドレス情報(確認保持用)
$tmp_address = "";
//メールアドレス情報
$send_address = "";
//エラー情報
$e_array = "";
//画面毎の処理
$comboType = COMBO_NORMAL;
if ( $mfdata == "input" ) {
//入力値のチェック処理
foreach( $from_items as $form_key => $form_conf_array ) {
//入力値
$p_value = $p_array[$form_key];
form_check($p_value,$form_conf_array);
}
if ( $e_array != "" ) {
$mfdata = "input";
$comboType = COMBO_NORMAL;
} else {
$mfdata = "confirm";
$comboType = COMBO_CONFIRM;
}
} else if ( $mfdata == "input_back" ) {
//入力画面に戻る
$mfdata = "input";
$comboType = COMBO_NORMAL;
} else if ( $mfdata == "confirm" ) {
//確認画面の処理
//入力値のチェック処理
foreach( $from_items as $form_key => $form_conf_array ) {
//入力値
$p_value = $p_array[$form_key];
form_check($p_value,$form_conf_array);
}
if ( $e_array != "" ) {
$mfdata = "input";
$comboType = COMBO_NORMAL;
} else {
$mfdata = "send";
if ( TEXT_OUT_FLG == "1" ) {
//
//ファイル出力
//
//ファイルの存在確認
$file_exists = true;
if ( !file_exists(TEXT_OUT) ) {
$file_exists = false;
}
//ファイルのオープン
$fp = fopen(TEXT_OUT,'a');
//ファイルのロック(参照が可能な共有ロック)
flock($fp, LOCK_SH);
//ファイルに書きこみ
//ファイルが存在しない場合、タイトルを出力
if ( $file_exists == false ) {
$form_line = "";
$form_data = "";
foreach( $from_items as $form_key => $form_conf_array ) {
if ( $form_conf_array[3] != "メールアドレス確認" ) {
//入力値
$p_value = $p_array[$form_key];
$p_value = showCheckBoxs($p_value);
$form_data = '"'.$form_conf_array[0].'",';
$form_line .= $form_data;
}
}
$form_line = mb_convert_encoding($form_line,"SJIS-win","auto");
fputs($fp,$form_line."\n");
}
//登録内容
$form_line = "";
$form_data = "";
foreach( $from_items as $form_key => $form_conf_array ) {
if ( $form_conf_array[3] != "メールアドレス確認" ) {
//入力値
$p_value = $p_array[$form_key];
$p_value = showCheckBoxs($p_value);
$form_data = '"'.$p_value.'",';
$form_line .= $form_data;
}
}
$form_line = mb_convert_encoding($form_line,"SJIS-win","auto");
fputs($fp,$form_line."\n");
//ファイルのクローズ
fclose($fp);
}
if ( MAIL_OUT_FLG == "1" || MAIL_OUT_FLG == "2" ) {
//
//完了メールの送信
//
//メール送信情報の設定
$toArray = array();
$tmp = explode(",",$send_address);
foreach ( $tmp as $val ) {
$toArray[] = array($val,"");
}
$toBccArray = array();
$tmp = explode(",",MAIL_ADDRESS_ADMIN);
foreach ( $tmp as $val ) {
$toBccArray[] = array($val,MAIL_ADDRESS_ADMIN_JPN);
}
//半角カナを変換
$subject = MAIL_ADDRESS_SUBJECT;
$subject = mb_convert_kana($subject,"K");
//メールボディ設定
$mail_body = MAIL_ADDRESS_BODY_H."\n";
$mail_body .= "--登録内容--\n";
foreach( $from_items as $form_key => $form_conf_array ) {
if ( $form_conf_array[3] != "メールアドレス確認" ) {
//入力値
$p_value = $p_array[$form_key];
$p_value = showCheckBoxs($p_value);
$mail_body .= $form_conf_array[0].":".$p_value."\n";
}
}
$mail_body .= "--ここまで--\n\n";
$mail_body .= MAIL_ADDRESS_BODY_F."\n";
//差し込み文字の置き換え
while ( preg_match("/\[--(.+)--\]/",$subject,$matchArray) ) {
$subject = str_replace("[--".$matchArray[1]."--]",showCheckBoxs($p_array[$matchArray[1]]),$subject);
}
while ( preg_match("/\[--(.+)--\]/",$mail_body,$matchArray) ) {
$mail_body = str_replace("[--".$matchArray[1]."--]",showCheckBoxs($p_array[$matchArray[1]]),$mail_body);
}
//半角カナを変換
$mail_body = mb_convert_kana($mail_body,"K");
//メールオブジェクト生成
if ( ENCODING_MODE == "1" ) {
$mail_obj = new Qdmail('UTF-8','base64');
} else {
$mail_obj = new Qdmail();
}
$mail_obj->setSendMode(MAIL_SEND_MODE);
//メールの送信
if ( MAIL_OUT_FLG == "1" ) {
//ユーザー、管理者に送信
$mail_obj->to($toArray);
$mail_obj->bcc($toBccArray);
} else if ( MAIL_OUT_FLG == "2" ) {
//管理者のみ送信
$mail_obj->to($toBccArray);
} else {
die("メール送信フラグエラー".MAIL_OUT_FLG);
}
$mail_obj->from(MAIL_ADDRESS_FROM,MAIL_ADDRESS_FROM_JPN);
$mail_obj->replyto(MAIL_ADDRESS_REPLY,MAIL_ADDRESS_REPLY_JPN);
$mail_obj->subject($subject);
$mail_obj->text($mail_body);
$mail_obj->send();
}
}
}
/********** 関数宣言部 **********/
//配列の展開
function showCheckBoxs($p_value) {
if ( is_array($p_value) ) {
return join(" ",$p_value);
} else {
return $p_value;
}
}
//入力値確認
function form_check($p_value,$form_conf_array) {
$form_name = $form_conf_array[0];
$form_require = $form_conf_array[1];
$form_max_size = $form_conf_array[2];
$form_check = $form_conf_array[3];
//必須チェック
if ( $form_require == 1 ) {
$ch = checkRequire($p_value);
if ( $ch === FALSE ) {
$GLOBALS["e_array"] .= $form_name."を入力してください。"."
";
}
}
//必須チェック(エラー付加文字なし)
if ( $form_require == 2 ) {
$ch = checkRequire($p_value);
if ( $ch === FALSE ) {
$GLOBALS["e_array"] .= $form_name."
";
}
}
//文字数チェック
if ( !is_array($form_max_size) && $form_max_size > 0 ) {
$str_count = mb_strlen($p_value);
if ( $str_count > $form_max_size ) {
$GLOBALS["e_array"] .= $form_name."は".$form_max_size."文字以内で入力してください。"."
";
}
}
//数字チェック
if ( $form_check == "数字" ) {
$ch = checkNumber($p_value);
if ( $ch === FALSE ) {
$GLOBALS["e_array"] .= $form_name."は半角数字で入力してください。"."
";
}
}
//英数字チェック
if ( $form_check == "英数字" ) {
$ch = checkAscii($p_value);
if ( $ch === FALSE ) {
$GLOBALS["e_array"] .= $form_name."は半角英数字で入力してください。"."
";
}
}
//メールアドレスチェック
if ( $form_check == "メールアドレス" ) {
$ch = checkMailAddress($p_value);
if ( $ch === FALSE ) {
$GLOBALS["e_array"] .= $form_name."は正しい形式ではありません。"."
";
}
$GLOBALS["send_address"] = $p_value;
//メールアドレス確認用保存
$GLOBALS["tmp_address"] = $p_value;
}
//メールアドレス確認チェック
if ( $form_check == "メールアドレス確認" ) {
if ( $ch == TRUE && $p_value != $GLOBALS["tmp_address"] ) {
$GLOBALS["e_array"] .= $form_name."が正しく入力されていません。"."
";
}
}
}
//必須チェック
function checkRequire($value) {
if ( is_array($value) ) {
if ( count($value) == 0 ) {
return FALSE;
}
} else {
if ( strlen($value) == 0 || $value == "---" ) {
return FALSE;
}
}
return TRUE;
}
//数字チェック
function checkNumber($value) {
if ( strlen($value) == 0 ) return TRUE;
if ( !is_numeric($value) ) {
return FALSE;
}
return TRUE;
}
//英数字チェック
function checkAscii($value) {
if ( strlen($value) == 0 ) return TRUE;
if ( !mb_ereg("^[a-zA-Z0-9\-_]+$",$value) ) {
return FALSE;
}
return TRUE;
}
//メールアドレスチェック
function checkMailAddress($value) {
if ( strlen($value) == 0 ) return TRUE;
if ( !mb_ereg("^[\/\-_.a-zA-Z0-9]+@[\-_.a-zA-Z0-9]+\.[-_.a-zA-Z0-9]+$",$value) ) {
return FALSE;
}
return TRUE;
}
/********** 画面出力部 **********/
//画面出力
ob_start();
if ( $mfdata == "confirm" ) {
//確認画面
require_once (VIEW_DIR."confirm.html");
} else if ( $mfdata == "send" ) {
//送信完了画面
require_once (VIEW_DIR."send.html");
} else {
//入力画面
require_once (VIEW_DIR."input.html");
}
ob_end_flush();
?>