メニューをスキップして本文へ


// +---------------------------------------------------------------------------+ // | Geeklog FormMail Static Page | // +---------------------------------------------------------------------------+ // | Copyright (C) 2008-2010 by the following authors: | // | | // | Authors : Hiroshi Sakuramoto - hiro AT winkey DOT jp | // | Sponser : White Bear Family CO., LTD | // | Coordinate : Adeliae Planning CO., LTD - www.e-adeliae.com | // | Coordinate : IVY WE CO., LTD - www.ivywe.co.jp | // | Version: 2.1.4 | // +---------------------------------------------------------------------------+ global $_CONF, $_USER, $_PLUGINS; if (!defined('XHTML')) define('XHTML', ' /'); // +---------------------------------------------------------------------------+ // | 初期設定 | // +---------------------------------------------------------------------------+ // 静的ページPHPを作成する時に入力したIDを入れてください。 // (wikiドキュメントのサンプル例だと'formmail') $pageid = 'formmail'; # 問合せを管理者へ通知の設定 # 複数のE-mailはカンマ(,)で区切りで指定する(スペース等はあけない) # 例) 'info@hoge.com,admin@page.com' # 特定の入力項目に応じて送り先を変える # ※この方法を利用する時は必ず $owner_email_item_name を指定してください。 # 例) 'AAA=info@hoge.com,BBB=admin@page.com' $owner_email=$_CONF['site_mail']; # 管理者Emailを入力項目から選択する項目名 // ※送り先を変える指定をしたら先頭の#を削除してください。(コメントをはずします) #$owner_email_item_name = 'q_mail_to'; # メール送信者E-mail $email_from = $_CONF['site_mail']; #Geeklog1.5から,noreplyを指定できます。 #$email_from = $_CONF['noreply_mail']; # 問合せ者のメールアドレスの項目名 $email_input_name = 'q_mail'; # メール一致チェック項目指定 # メール確認でどちらも同じものを入力 というname属性を(=)で区切る(スペース等はあけない) # 例) 'email=reemail' $essential_email = 'q_mail=q_mail_re'; # メールアドレスチェック項目指定 # 入力された値がメールアドレスとして正しいかチェックをする # INPUTタグの name属性の値をカンマ(,)区切りで指定する(スペース等はあけない) # 例) 'email,reemail' $propriety_email = 'q_mail,q_mail_re'; # ログイン済みならユーザ情報を利用する指定 # ログインユーザーの名前やメールアドレスを利用 # $username = ''; $user_email = ''; if (isset ($_USER['uid']) && ($_USER['uid'] > 1)) { $username = isset($_USER['fullname']) ? $_USER['fullname'] : $_USER['username']; $user_email = $_USER['email']; } # CSVファイルに保存 # 指定方法 保存しない: 0 , 保存する(カンマ区切り): 1 , 保存する(タブ区切り): 2 $save_csv = 1; # CSVファイル保存場所 (直接入力時は最後にスラッシュ必須) $save_csv_path = $_CONF['path_data']; # CSVファイル名 $save_csv_name = 'formmail.csv'; # CSVファイル保存の文字コード # 文字コード変換をしない場合は '' と指定してください。 # 機能がOFFになります。(文字化けするようなら機能を''で # OFFにして別途フリーの文字変換ツールなどをご利用ください) # 注意) mb_convert_encodingで使える文字コードを指定してください # 例) UTF-8, SJIS, EUC-JP, JIS, ASCII $save_csv_lang = 'SJIS'; # 全角を半角に変換する項目名(英数字、スペース、カタカナ、ひらがな) # 入力された値を自動で変換する項目を指定 # INPUTタグの name属性の値をカンマ(,)区切りで指定する(スペース等はあけない) $zentohan_itemname = 'q_phone,q_code1_1,q_code2_1,q_code3_1,q_code1_2,q_code2_2,q_code3_2,q_code1_3,q_code2_3,q_code3_3'; # カタカナの半角をカタカナの全角に変換する項目名 # 入力された値を自動で変換する項目を指定 # INPUTタグの name属性の値をカンマ(,)区切りで指定する(スペース等はあけない) $kana_hantozen_itemname = 'q_kana_1,q_kana_2'; # ひらがなをカタカナに変換する項目名 # 入力された値を自動で変換する項目を指定 # INPUTタグの name属性の値をカンマ(,)区切りで指定する(スペース等はあけない) $kana_hiratokana_itemname = 'q_kana_1,q_kana_2'; # ==画像認証関係== # 画像認証(CAPTCHA)がインストールされていない場合のエラーメッセージ $msg_spformmail_notinstall_captcha = 'CAPTCHAプラグインがインストールされていません。'; # 送信時に画像認証でエラーの場合のエラーメッセージ # ※空文字にするとCAPTCHAプラグインが作成するエラーメッセージを使います。 # ※空文字意外にするとそれを無視して固定メッセージにできます。 $msg_spformmail_valid_captcha = ''; # # ※ CAPTCHAのテンプレートを自由に作成することも可能 # public_html/layout//sp_formmail/captcha.thmtl があればそちらが優先されます。 # 通常は private/plugins/captcha/templates/captcha_others.thtml # # 遷移の項目名 $seni_items = array('input' => '情報入力', 'confirm' => '入力項目確認', 'finish' => '入力完了'); # 必須入力の文字列 $required_string = '*必須'; # ==日付関係== # 下記JavaScriptカレンダーでの日付表記 # phpのdate(http://www.php.net/manual/en/function.date.php)で使う # 「d, D, j, l, N, w, S, F, m, M, n, Y, y」を指定できます。 $date_js_cal = 'Y/m/d'; # メールに記載される受付日時表記 # phpのdateのものがすべて使えます http://www.php.net/manual/en/function.date.php $date_mail = 'Y年m月d日H:i'; # csv書き出し時、1列目に記載される日時表記 # phpのdateのものがすべて使えます http://www.php.net/manual/en/function.date.php $date_csv = 'Y/m/d H:i'; # JavaScriptライブラリの利用 (カレンダー表示用) $use_jslib = TRUE; # JavaScriptライブラリ等の宣言 # カレンダー表示用JavaScript+CSS # Calendar RC4, (c) 2007 Aeron Glemann , MIT Style License # (http://www.electricprism.com/aeron/calendar/) $def_jslib = << JSLIB; ##### # 表示メッセージ ##### $lang = array( // { 完了HTML&メールのメッセージ 'receipt_admin' =>'管理者のみなさま'.LB.LB.$_CONF['site_name'].'サイトにおいて'.LB.'問い合わせがありました。'.LB.LB.'==========お問い合わせ =========='.LB.'受付日時:'.date($date_mail), 'receipt_user' =>'※本メールは、'.$_CONF['site_name'].'サイトより自動的に配信しています。'.LB.'このメールは送信専用のため、このメールにご返信いただけません。'.LB.'============================='.LB.'お問い合わせありがとうございました。'.LB.LB.'========== お問い合わせ内容 =========='.LB.'受付日時:'.date($date_mail), 'subject_admin'=> '['.$_CONF['site_name'].']お問い合わせ', 'subject_user'=> '['.$_CONF['site_name'].']お問い合わせを受け付けました', 'sign_admin' => '-----------------------------------------'.LB.$_CONF['site_name'].LB.$_CONF['site_url'].LB.'-----------------------------------------', 'sign_user' => '-----------------------------------------'.LB.$_CONF['site_name'].LB.'URL:' . $_CONF['site_url'].LB.'-----------------------------------------', // } 完了HTML&メールのメッセージ // { システムエラーのメッセージ 'ownertransmiterror'=>'オーナーメール処理中、一部のアドレスでエラーが発生しましたが、処理を続けました。', 'transmiterror'=>'処理中にエラーが発生しました。', // } システムエラーのメッセージ ); ##### # フォーム項目の設定 ##### $form_items = array( // < テーブル array('title' => 'お客様情報', 'table' => array( // < テーブル1行 array('header' => '法人様名', 'valid_notkanahan' => 'q_kaisha', 'error_notkanahan' => '法人様名に半角カタカナがあります。すべて全角で入力してください', 'data' => array( array('type' => 'text', 'name' => 'q_organization', 'size' => '40', 'maxlength' => '60', 'class' => 'bginput ime_on' ), array('input' => ''), ), ), // > テーブル1行 // < テーブル1行 array('header' => 'お名前(漢字)', 'valid_require' => $required_string, 'error_require' => 'お名前(漢字)が入力されていません', 'valid_notkanahan' => 'q_name', 'error_notkanahan' => 'お名前(漢字)に半角カタカナがあります。すべて全角で入力してください', 'data' => array( array('type' => 'text', 'name' => 'q_name', 'size' => '40', 'maxlength' => '40', 'class' => 'bginput ime_on', 'value' => $username ), array('input' => ' ※全角'), ), ), // > テーブル1行 // < テーブル1行 array('header' => 'お名前(カタカナ)', 'valid_require' => $required_string, 'error_require' => 'お名前(カタカナ)が入力されていません', 'valid_notkanahan' => 'q_kana', 'error_notkanahan' => 'お名前(カタカナ)に半角カタカナがあります。すべて全角で入力してください', 'data' => array( array('type' => 'text', 'name' => 'q_kana', 'size' => '40', 'maxlength' => '40', 'class' => 'bginput ime_on', ), array('input' => ' ※全角'), ), ), // > テーブル1行 // < テーブル1行 array('header' => 'メールアドレス', 'valid_require' => $required_string, 'error_require' => 'メールアドレスが入力されていません', 'valid_equal' => $essential_email, 'error_equal' => 'メールアドレスが一致しません', 'valid_email' => $propriety_email, 'error_email' => 'メールアドレスを正しく入力してください', 'valid_hankaku' => 'q_mail,q_mail_re', 'error_hankaku' => 'メールアドレスはすべて半角で入力してください', 'data' => array( array('type' => 'text', 'name' => 'q_mail', 'size' => '40', 'maxlength' => '240', 'class' => 'bginput ime_off', 'value' => $user_email ), array('input' => ''), array('type' => 'text', 'name' => 'q_mail_re', 'size' => '40', 'maxlength' => '240', 'class' => 'bginput ime_off', 'not_confirm' => 'true', 'not_csv' => 'true', 'value' => $user_email ), array('string' => ''), array('input' => '※確認のため、もう一度入力してください'), ), ), // > テーブル1行 // < テーブル1行 array('header' => 'ご連絡方法', 'data' => array( array('type' => 'radio', 'name' => 'q_answer_means', 'value' => 'メール', 'checked' => 'checked' ), array('input' => 'メール '), array('type' => 'radio', 'name' => 'q_answer_means', 'value' => '電話' ), array('input' => '電話 '), array('string' => ''), array('input' => '※お問い合わせ内容によって、メールをご希望の場合も電話連絡とさせて頂く場合があります。'), ), ), // > テーブル1行 // < テーブル1行 array('header' => '電話番号', 'valid_require' => $required_string, 'error_require' => '電話番号が入力されていません', 'valid_phone' => 'q_phone', 'error_phone' => '電話番号を正しく入力してください。数字と+(プラス)と-(ハイフン)と (半角スペース)が使えます', 'valid_minlen' => 'q_phone=6', 'error_minlen' => '電話番号の文字数は6文字以上で入力してください', 'valid_maxlen' => 'q_phone=13', 'error_maxlen' => '電話番号の文字数は13文字以内で入力してください', 'data' => array( array('type' => 'text', 'name' => 'q_phone', 'size' => '20', 'maxlength' => '13', 'class' => 'bginput ime_off' ), array('string' => ''), array('input' => '※半角(例 0311112222)'), array('type' => 'radio', 'name' => 'q_phone_kind', 'value' => '自宅', 'checked' => 'checked' ), array('input' => '自宅   '), array('type' => 'radio', 'name' => 'q_phone_kind', 'value' => '勤務先' ), array('input' => '勤務先   '), array('type' => 'radio', 'name' => 'q_phone_kind', 'value' => '携帯' ), array('input' => '携帯'), ), ), // > テーブル1行 // < テーブル1行 array('header' => '希望日', 'data' => array( array('type' => 'text', 'name' => 'q_date1', 'id' => 'q_date1', 'size' => '20', 'maxlength' => '10', 'class' => 'bginput ime_off calendar', 'style' => 'float:left;' ), ), ), // > テーブル1行 // < テーブル1行 array('header' => '時間帯', 'data' => array( array('type' => 'select', 'name' => 'q_access_time', 'style' => 'width: 15em;', 'class' => 'bginput', 'options' => array('selected' => '特に希望なし', 'values' => '特に希望なし,午前,午後 - 夕方まで,夕方以降'), ), array('input' => '※電話連絡の場合のご連絡を希望する時間帯。'), ), ), // > テーブル1行 ), ), // > テーブル // < テーブル array('title' => '申し込み内容', 'table' => array( // < テーブル1行 array('header' => 'お申し込みセミナー', 'data' => array(array('type' => 'checkbox', 'name' => 'q_order_1', 'value' => 'セミナー1', ), array('input' => ' '), array('type' => 'checkbox', 'name' => 'q_order_2', 'value' => 'セミナー2', ), array('input' => ' '), array('type' => 'checkbox', 'name' => 'q_order_3', 'value' => 'セミナー3', ), ), ), // > テーブル1行 // < テーブル1行 array('header' => 'お問い合わせ内容', 'valid_notkanahan' => 'q_other', 'error_notkanahan' => 'お問い合わせ内容に半角カタカナがあります。すべて全角で入力してください', 'valid_maxlen' => 'q_other=200', 'error_maxlen' => 'お問い合わせ内容の文字数は200文字以内で入力してください', 'data' => array( array('type' => 'textarea', 'name' => 'q_other', 'class' => 'bginput ime_on', 'style' => 'width: 95%; height: 100px;', 'onKeyup' => "var n=200-this.value.length;var s=document.getElementById('tasp1');s.innerHTML='('+n+')';" ), array('input' => '※お問い合わせ内容を入力してください。'), ), ), // > テーブル1行 ), ), // > テーブル // < テーブル (画像認証) array('title_captcha' => '画像認証', 'table_captcha' => array( // < テーブル1行 (画像認証) array('header_captcha' => '画像認証', 'valid_captcha' => $required_string, 'error_captcha' => $msg_spformmail_valid_captcha, 'error_notcaptcha' => $msg_spformmail_notinstall_captcha, 'data' => array() ), // > テーブル1行 (画像認証) ), ), // > テーブル (画像認証) // < 送信ボタン - 入力画面 array('action' => 'input', 'data' => array( array('string' => '
'), array('type' => 'submit', 'name' => 'submit', 'class' => 'button_form_next', 'value' => '入力項目確認画面へ' ), array('string' => '
'), ), ), // > 送信ボタン - 入力画面 // < 送信ボタン - 確認画面 array('action' => 'confirm', 'data' => array(array('string' => '
'), array('type' => 'submit', 'name' => 'goback', 'class' => 'button_form_prev', 'value' => '戻る' ), array('string' => ' '), array('type' => 'submit', 'name' => 'submit', 'class' => 'button_form_next', 'value' => '送信する' ), array('string' => '
'), ), ), // > 送信ボタン - 確認画面 ); // +---------------------------------------------------------------------------+ // | 初期処理 | // +---------------------------------------------------------------------------+ # POSTデータを直接変換 (全角から半角へ、カタカナ半角からカタカナ全角へ) if (!empty($zentohan_itemname)) { foreach (explode(',',$zentohan_itemname) as $k) { if (!empty($_POST[$k])) $_POST[$k] = mb_convert_kana($_POST[$k], 'askh'); } } if (!empty($kana_hantozen_itemname)) { foreach (explode(',',$kana_hantozen_itemname) as $k) { if (!empty($_POST[$k])) $_POST[$k] = mb_convert_kana($_POST[$k], 'K'); } } if (!empty($kana_hiratokana_itemname)) { foreach (explode(',',$kana_hiratokana_itemname) as $k) { if (!empty($_POST[$k])) $_POST[$k] = mb_convert_kana($_POST[$k], 'C'); } } # データを保存用に加工 foreach ($_POST as $k => $v) { $fld_list[$k] = preg_replace('/,/', ',', $_POST[$k]); $fld_list[$k] = preg_replace('/"/', '”', $fld_list[$k]); $fld_list[$k] = preg_replace("/'/", "’", $fld_list[$k]); $fld_list[$k] = preg_replace('/`/', '‘', $fld_list[$k]); $fld_list[$k] = preg_replace('/;/', ';', $fld_list[$k]); $fld_list[$k] = preg_replace(preg_quote('#'.chr(92).'#'), '¥', $fld_list[$k]); $fld_list[$k] = COM_applyFilter($fld_list[$k]); } # CSVファイルのフルパス $save_csv_file = $save_csv_path . $save_csv_name; # pageidからpageurlを作成 if (!empty($pageid)) { $pageurl = COM_buildUrl($_CONF['site_url'].'/staticpages/index.php?page='.$pageid); } // +---------------------------------------------------------------------------+ // | 関数群: | // +---------------------------------------------------------------------------+ if(!function_exists('getAction')){ function getAction ($err) { $buf = ''; $action = COM_applyFilter($_POST['action']); if (!empty($action) && empty($err) && $action == 'input') { $buf = 'confirm'; } elseif (!empty($action) && empty($err) && $action == 'confirm') { $buf = empty($_POST['goback']) ? 'finish' : 'input'; } else { $buf = 'input'; } return $buf; } function mkJS4MG ($lib) { $buf = preg_replace("@]+mootools.js[^>]+>[^<]*@", "", $lib); return str_replace('calendar.js', 'calendar_mg.js', $buf); } function mkJS ($use,$lib,$action,$plg) { $buf=''; if (!empty($action) && $action == 'input' && isset($use) && $use == TRUE) { if (in_array('mediagallery', $plg)) { global $_MG_CONF; $mgv = $_MG_CONF['pi_version']; $mglib = $_MG_CONF['js_lib']; if (!empty($mgv) && !empty($mglib) && (version_compare($mgv, '1.6.10', '<') || strtolower($mglib) == 'mootools')) { $buf = mkJS4MG($lib); } elseif(!empty($mglib) && strtolower($mglib) == 'jquery') { $buf = << JQNC; } else { $buf = $lib; } } else { $buf = $lib; } } return $buf; } function mkSeni ($items, $action) { $buf = '
    '.LB; foreach ($items as $key => $value) { if ($action == $key) { $buf .= '
  • '.$value.'
  • '.LB; } else { $buf .= '
  • '.$value.'
  • '.LB; } } $buf .= '
'.LB; return $buf; } function putiFilter($s) { $se = array('%','(',')',chr(92),chr(13).chr(10),chr(13),chr(10)); $re = array('%','(',')','\','','',''); return str_replace($se, $re, htmlspecialchars($s,ENT_QUOTES)); } function vldCAPTCHA ($type, $errmsg) { global $_CP_CONF, $_USER; $msg = ''; if (!function_exists('CAPTCHA_sid')) { return $msg; } if ( ($_CP_CONF['anonymous_only'] && $_USER['uid'] < 2) || $_CP_CONF['anonymous_only'] == 0 || ($_CP_CONF['remoteusers'] == 1 && SEC_inGroup("Remote Users") ) ) { $str = COM_applyFilter($_POST['captcha']); list( $rc, $msg ) = CAPTCHA_checkInput( $type, $str ); } if ( !empty($msg) && !empty($errmsg) ) { $msg = $errmsg; } return $msg; } function vld_isPhone($s) { return (preg_match('/^(?:[0-9'.chr(92).'+'.chr(92).'-'.chr(92).'s])+$/D',$s)) ? TRUE : FALSE; } function vld_isHankaku($s) { return (preg_match('/^(?:'.chr(92).'xEF'.chr(92).'xBD['.chr(92).'xA1-'.chr(92).'xBF]|'.chr(92).'xEF'.chr(92).'xBE['.chr(92).'x80-'.chr(92).'x9F]|['.chr(92).'x20-'.chr(92).'x7E])+$/D',$s)) ? TRUE : FALSE; } function vld_isZenkaku($s) { return (preg_match('/(?:'.chr(92).'xEF'.chr(92).'xBD['.chr(92).'xA1-'.chr(92).'xBF]|'.chr(92).'xEF'.chr(92).'xBE['.chr(92).'x80-'.chr(92).'x9F]|['.chr(92).'x20-'.chr(92).'x7E])+/D',$s)) ? FALSE : TRUE; } function vld_isEisuHan($s) { return (preg_match('/^(?:[0-9A-Za-z])+$/D',$s)) ? TRUE : FALSE; } function vld_isKanaZen($s) { return (preg_match('/^(?:'.chr(92).'xE3'.chr(92).'x82['.chr(92).'xA1-'.chr(92).'xBF]|'.chr(92).'xE3'.chr(92).'x83['.chr(92).'x80-'.chr(92).'xB6])+$/D',$s)) ? TRUE : FALSE; } function vld_isHiraZen($s) { return (preg_match('/^(?:'.chr(92).'xE3'.chr(92).'x81['.chr(92).'x81-'.chr(92).'xBF]|'.chr(92).'xE3'.chr(92).'x82['.chr(92).'x80-'.chr(92).'x93])+$/D',$s)) ? TRUE : FALSE; } function vld_isNotKanaHan($s) { return (preg_match('/(?:'.chr(92).'xEF'.chr(92).'xBD['.chr(92).'xA1-'.chr(92).'xBF]|'.chr(92).'xEF'.chr(92).'xBE['.chr(92).'x80-'.chr(92).'x9F])+/D',$s)) ? TRUE : FALSE; } function ChkValidate ($mode, $datas, $errmsg, $attributes = '') { $msg = ''; foreach ($datas as $data) { if (isset($data['type'])) { $name = $data['name']; switch ($mode) { // 必須チェック case 'require': if (empty($data['notrequire']) && empty($_POST[$name]) && $_POST[$name] != "0") { $msg = $errmsg; } break; // 一致チェック case 'equal': if (!empty($attributes)) { $es_emails = explode(',', $attributes); foreach ($es_emails as $es_email) { list($eq1,$eq2) = explode('=', $es_email); // 最初のキー かつ チェックするキーが存在 if ($name == $eq1 && !empty($_POST[$eq2])) { if ($_POST[$eq1] != $_POST[$eq2]) { $msg = $errmsg; } } } } break; // メールチェック case 'email': if (!empty($attributes)) { $pr_emails = explode(',', $attributes); foreach ($pr_emails as $pr_email) { if ($name == $pr_email) { if (!COM_isemail($_POST[$name])) { $msg = $errmsg; } } } } break; // 数値チェック - 足して0以上 case 'notzero': if (!empty($attributes)) { $values_key = explode(',', $attributes); foreach ($values_key as $val_key) { // 最初のキーのときにチェック if ($name == $val_key) { $sum_val = 0; foreach ($values_key as $chk_key) { if (!empty($_POST[$chk_key])) { $sum_val += $_POST[$chk_key]; } } if ($sum_val <= 0) { $msg = $errmsg; break; } } } } break; // 数値のみかチェック case 'numeric': if ((!empty($_POST[$name]) || $_POST[$name] == "0") && in_array($name,explode(',',$attributes)) && !ctype_digit($_POST[$name])) { $msg = $errmsg; } break; // 電話番号かチェック case 'phone': if ((!empty($_POST[$name]) || $_POST[$name] == "0") && in_array($name,explode(',',$attributes)) && !vld_isPhone($_POST[$name])) { $msg = $errmsg; } // 半角チェック case 'hankaku': if ((!empty($_POST[$name]) || $_POST[$name] == "0") && in_array($name,explode(',',$attributes)) && !vld_isHankaku($_POST[$name])) { $msg = $errmsg; } break; // 全角チェック case 'zenkaku': if (!empty($_POST[$name]) && in_array($name,explode(',',$attributes)) && !vld_isZenkaku($_POST[$name])) { $msg = $errmsg; } break; // 半角英数字チェック case 'eisuhan': if ((!empty($_POST[$name]) || $_POST[$name] == "0") && in_array($name,explode(',',$attributes)) && !vld_isEisuHan($_POST[$name])) { $msg = $errmsg; } break; // 全角カタカナチェック case 'kanazen': if (!empty($_POST[$name]) && in_array($name,explode(',',$attributes)) && !vld_isKanaZen($_POST[$name])) { $msg = $errmsg; } break; // 全角ひらがなチェック case 'kanazen': if (!empty($_POST[$name]) && in_array($name,explode(',',$attributes)) && !vld_isHiraZen($_POST[$name])) { $msg = $errmsg; } break; // 半角カタカナ以外かチェック case 'notkanahan': if ((!empty($_POST[$name]) || $_POST[$name] == "0") && in_array($name,explode(',',$attributes)) && vld_isNotKanaHan($_POST[$name])) { $msg = $errmsg; } break; // 文字数チェック case 'maxlen': if ((!empty($_POST[$name]) || $_POST[$name] == "0")) { foreach (explode(',', $attributes) as $attr1) { list($name2,$max2) = explode('=',$attr1); if ($name === $name2) { if ($max2 < mb_strlen($_POST[$name], 'UTF-8')) { $msg = $errmsg; } } } } break; // 最低文字数チェック case 'minlen': if ((!empty($_POST[$name]) || $_POST[$name] == "0")) { foreach (explode(',', $attributes) as $attr1) { list($name2,$min2) = explode('=',$attr1); if ($name === $name2) { if ($min2 > mb_strlen($_POST[$name], 'UTF-8')) { $msg = $errmsg; } } } } break; } } } // 画像認証チェック if ( $mode == 'captcha' ) { $msg = vldCAPTCHA('sp_formmail', $errmsg); } return $msg; } function ChkFormValidateLines ($lines) { $errmsg; foreach (array('require','equal','email','notzero','numeric','phone','hankaku','zenkaku','eisuhan','kanazen','hirazen','notkanahan','captcha','maxlen','minlen') as $chk) { // 必須,一致,メール,画像認証,エラー のチェック if (isset($lines['valid_'.$chk])) { $errmsg = ChkValidate($chk, $lines['data'], $lines['error_'.$chk], $lines['valid_'.$chk]); // エラーがあれば配列に格納 if ($errmsg) { break; } } } return $errmsg; } function ChkFormValidate ($items) { $errs; foreach ($items as $item) { // 各テーブル foreach ($item as $key => $value) { // 1テーブル if ($key == 'table' || $key == 'table_captcha') { $action = getAction(''); if ($key == 'table_captcha' && $action == 'finish') { continue; } foreach ($value as $key2 => $value2) { // テーブル1行 $errmsg = ChkFormValidateLines($value2); if ($errmsg) { $errs[] = $errmsg; } } } } } return $errs; } function FormValidate ($items) { $buf = ''; $errs = ChkFormValidate($items); if (!empty($errs)) { $errmsg = ''; foreach ($errs as $err) { $errmsg .= '
  • '.$err.'
  • '.LB; } $buf = <<入力エラーがありました。下記について再度ご確認の上、ご記入ください。

      $errmsg
    END; } return $buf; } function mkTitle ($title) { return <<$title END; } function mkForm_Value ($name, $value) { return (empty($_POST[$name]) && $_POST[$name] != "0") ? $value : putiFilter($_POST[$name]); } function mkForm_Radio_Checked (&$attributes) { $name = $attributes['name']; if ((!empty($_POST[$name]) || $_POST[$name] == "0")) { if (isset($attributes['checked'])) unset($attributes['checked']); if ($_POST[$name] == $attributes['value']) { $attributes['checked'] = 'checked'; } } } function mkForm_Input ($attributes, $hidden = false) { if ($hidden) { if ($attributes['type'] == 'radio' || $attributes['type'] == 'checkbox') { if ($attributes['value'] != $_POST[$attributes['name']]) return ''; } $attributes['type'] = 'hidden'; } if ($attributes['type'] == 'radio' || $attributes['type'] == 'checkbox') { mkForm_Radio_Checked($attributes); } else { if ($attributes['type'] != 'submit') $attributes['value'] = mkForm_Value($attributes['name'], $attributes['value']); } $buf = ' $value) { if ($key != 'not_confirm') { $buf .= ' '.$key.'="'.$value.'"'; } } $buf .= XHTML.'>'; if ($hidden || $attributes['type'] == 'checkbox') { if ( !isset($attributes['not_confirm']) || ! $attributes['not_confirm'] ) { $buf .= ' ' . $attributes['value']; } } return $buf; } function mkForm_Select_Options ($name, $attributes) { $buf = ''; $selected = mkForm_Value($name, $attributes['selected']); $values = explode(',', $attributes['values']); foreach ($values as $value) { list($k,$v) = explode('=',$value); if (empty($v)) $v = $k; if ($selected == $k) { $buf .= ''; } else { $buf .= ''; } } return $buf; } function mkForm_Select ($attributes) { $buf = ' $value) { if ($key != 'options') { $buf .= ' '.$key.'="'.$value.'"'; } } $buf .= '>'; $buf .= mkForm_Select_Options($attributes['name'], $attributes['options']); $buf .= ''; return $buf; } function mkForm_Textarea ($attributes) { $attributes['value'] = mkForm_Value($attributes['name'], $attributes['value']); $buf = ' $value) { if ($key != 'value') $buf .= ' '.$key.'="'.$value.'"'; } $buf .= '>'.$attributes['value'].''; return $buf; } function mkForm_Item ($items, $action) { $buf = ''; if ($action != 'input' && $items['type'] != 'submit' && $items['type'] != 'hidden') { $buf .= mkForm_Input($items, true); } else { switch ($items['type']) { case 'text': $buf .= mkForm_Input($items); break; case 'password': $buf .= mkForm_Input($items); break; case 'hidden': $buf .= mkForm_Input($items); break; case 'radio': $buf .= mkForm_Input($items); break; case 'checkbox': $buf .= mkForm_Input($items); break; case 'select': $buf .= mkForm_Select($items); break; case 'textarea': $buf .= mkForm_Textarea($items); break; case 'submit': $buf .= mkForm_Input($items); break; case 'reset': $buf .= mkForm_Input($items); break; case 'button': $buf .= mkForm_Input($items); break; } } return $buf; } function mkTable_Data ($datas, $action) { $buf = ''; foreach ($datas as $data) { // 1つのデータ if (!empty($data['type'])) { // フォーム $buf .= mkForm_Item($data, $action); } else { // 文字列 foreach ($data as $key => $value) { if ($key == 'string') { $buf .= $value; } elseif ($key == $action) { $buf .= $value; } } } } return $buf; } function plugin_templatePath_sp_formmail () { global $_CONF; $pi_name = 'sp_formmail'; $layout_path = $_CONF['path_layout'] . $pi_name; return $layout_path; } function chk_Use_CAPTCHA_HTML () { global $_CP_CONF, $_USER; if ( ($_CP_CONF['anonymous_only'] && $_USER['uid'] < 2) || $_CP_CONF['anonymous_only'] == 0 || ($_CP_CONF['remoteusers'] == 1 && SEC_inGroup("Remote Users") ) ) { return true; } return false; } function mkCAPTCHA_HTML ($name, $msg_notcaptcha) { global $_CP_CONF, $_USER, $_TABLES; $captcha = ''; if (!function_exists('CAPTCHA_sid')) { return $msg_notcaptcha; } if ( chk_Use_CAPTCHA_HTML() ) { $csid = 0; if ($_CP_CONF['gfxDriver'] != 1) { // housekeeping, delete old captcha sessions $oldSessions = time() - ($_CP_CONF['expire']+900); DB_query("DELETE FROM WHERE cptime < " . $oldSessions,1); // OK, we need to insert the CAPTCHA, so now we need to setup the session_id: // check to see if a failed entry happened... if ( isset($_POST['csid']) ) { $csid = COM_applyFilter($_POST['csid']); } else { $csid = CAPTCHA_sid(); } $time = time(); $counter = 0; $validation = ''; // this will be filled in by the CAPTCHA " `session_id` varchar(40) NOT NULL default '', " . " `cptime` INT(11) NOT NULL default 0, " . " `validation` varchar(40) NOT NULL default '', " . " `counter` TINYINT(4) NOT NULL default 0, " . DB_save($_TABLES['cp_sessions'],"session_id,cptime,validation,counter","'$csid','$time','','0'"); } $captcha = CAPTCHA_getHTML($csid,$name); } return $captcha; } function mkTable ($tables, $action) { $buf = ''; foreach ($tables as $lines) { $flg_valid_captcha = false; $errflg = ''; $tdclass=''; $buf .= LB .' ' . LB; $buf .= ' '.LB; $buf .= ' '; if (isset($lines['data'])) { if ($flg_valid_captcha) { $buf .= mkCAPTCHA_HTML('sp_formmail',$lines['error_notcaptcha']); } else { $buf .= mkTable_Data($lines['data'], $action); } } $buf .= ''.LB; $buf .= ' '.LB; } return $buf; } function mkForm ($items, $action) { $buf = ''; foreach ($items as $item) { // 各テーブル if (!empty($item['table'])) { foreach ($item as $key => $value) { // 1テーブル switch ($key) { case 'title': $buf .= mkTitle($value); break; case 'table': $buf .= mkTable($value, $action); break; } } $buf .= <<
    '; if (isset($lines['header'])) { $buf .= $lines['header']; } if (isset($lines['header_captcha'])) { $buf .= $lines['header_captcha']; } if (isset($lines['valid_require'])) { $buf .= $lines['valid_require']; } if (isset($lines['valid_captcha'])) { $buf .= $lines['valid_captcha']; $flg_valid_captcha = true; } // エラーチェック if (!empty($_POST)) { $errflg = ChkFormValidateLines($lines); } if ($errflg) { $tdclass=' class="warning_bgc"'; } $buf .= '
    END; } elseif (!empty($item['table_captcha'])) { // 画像認証テーブル if ((!empty($action) && $action == 'input') && chk_Use_CAPTCHA_HTML()) { foreach ($item as $key => $value) { // 1テーブル switch ($key) { case 'title_captcha': $buf .= mkTitle($value); break; case 'table_captcha': $buf .= mkTable($value, $action); break; } } $buf .= << END; } elseif (!empty($action)) { $buf .= LB . ' '; } } elseif (!empty($item['action'])) { // 送信ボタン if ($item['action'] == $action) { $buf .= LB . ' '; $buf .= LB . mkTable_Data($item['data'], $action); } } } return $buf; } function mkCsv ($items, $level=0, $dupcheck=array()) { global $_CONF; $ret = array(); if ($level > 5) { return; } $level++; if (!empty($items['type']) && strtolower($items['type']) != 'submit' ) { if((!empty($items['not_csv']) && $items['not_csv']) || empty($items['name'])) { return; } if(strtolower($items['type']) == 'radio' && in_array($items['name'], $dupcheck)) { return; } return $items['name']; } else { if (!is_array($items)) { return; } foreach ($items as $i) { $name = mkCsv($i,$level, $ret); if (!empty($name)) { if(is_array($name)) { $ret = array_merge($ret,$name); } else { $ret[] = $name; } } } } return $ret; } } // エラーチェック if (!empty($_POST) && !empty($_POST['action'])) { $valid = FormValidate($form_items); } $action = getAction($valid); // +---------------------------------------------------------------------------+ // | 第1ステップ: フォーム表示(入力&確認) | // +---------------------------------------------------------------------------+ if ($action == 'input' || $action == 'confirm') { /** * フォーム画面HTML { ここから */ // JS $js = mkJS($use_jslib, $def_jslib, $action, $_PLUGINS); // 遷移 $seni = mkSeni($seni_items, $action); // 入力フォーム $form = mkForm($form_items, $action); $retval = << $seni
    $valid
    $form
    END; /** * } ここまで フォーム画面HTML */ // +---------------------------------------------------------------------------+ // | 第2ステップ: 完了表示&メール送信 | // +---------------------------------------------------------------------------+ } elseif ($action == 'finish') { /** * 完了画面HTML { ここから */ // 遷移 $seni = mkSeni($seni_items, $action); $out_html = << $seni

    お問い合わせを受け付けました。

    ※お問い合わせ確認のメールを自動送信しました。
    メールが届かない場合は、ご登録のメールアドレスが間違っている可能性があります。
    その際は、お手数ですが再度お問い合わせください。

    END; /** * } ここまで 完了画面HTML */ #
    を改行コードに変換 foreach ($fld_list as $k => $v) { $fld_list[$k] = ereg_replace("
    ", LB, $fld_list[$k]); } $lang['sign_admin'] = ereg_replace("
    ", LB, $lang['sign_admin']); $lang['sign_user'] = ereg_replace("
    ", LB, $lang['sign_user']); // 入力内容 $input4mail=<< 0) { $fldnames = mkCsv($form_items); $delimiter = ','; if ($save_csv > 1) { $delimiter = chr(9); } $enclosure = '"'; # CSV出力 $str = ''; $escape_char = chr(92); foreach ($fldnames as $n) { $v = empty($fld_list[$n]) ? '' : $fld_list[$n] ; if (strpos($v, $delimiter) !== false || strpos($v, $enclosure) !== false || strpos($v, chr(10)) !== false || strpos($v, chr(13)) !== false || strpos($v, chr(9)) !== false || strpos($v, ' ') !== false) { $str2 = $enclosure; $escaped = 0; $len = strlen($v); for ($i=0;$i<$len;$i++) { if ($v[$i] == $escape_char) { $escaped = 1; } else if (!$escaped && $v[$i] == $enclosure) { $str2 .= $enclosure; } else { $escaped = 0; } $str2 .= $v[$i]; } $str2 .= $enclosure; $str .= $str2.$delimiter; } else { $str .= $v.$delimiter; } } $str = date($date_csv) . $delimiter . substr($str,0,-1); $str .= LB; if( !empty( $save_csv_lang ) ) { $str = mb_convert_encoding($str, $save_csv_lang); } $fp = fopen($save_csv_file, 'a'); fwrite($fp, $str); # CSV書き出し fclose($fp); } $retval = $out_html; } else { $retval = $lang['transmiterror']; # メール送信が失敗したら } } // Geeklog1.6 PHPを実行 echo $retval; // Geeklog1.6 PHPを実行(return) の場合、上のechoをコメント(#)にして以下のreturnのコメントをはずしてください # return $retval;

    最終更新日:: 2011年3月11日(金) 13:54 JST|閲覧数: 144

    サブメニュー1をスキップしてサブメニュー2へ

    サブメニュー1をスキップしてフッタへ

    ログイン

    ログイン

    オンラインユーザー

    ゲストユーザ: 5

    QRコード

    QR code