name = $name; //2008.8.9 修正 $this->longname = addslashes($longname); $this->type = $type; $this->require = $require; $this->min = $min; $this->max = $max; } } /** * フォーム定義配列を使用してフォームをチェック * エラーがあった場合はグローバル変数$errにメッセージ追加 * @param $forms FormValueクラスのオブジェクトの配列、フォームの定義 * @return htmlspecialchars加工済みの前回入力フォーム値 */ function checkValue($forms) { global $err; $temp = array(); foreach ($forms as $form) { //ラベルはチェックなし if ($form->name === false) continue; //フォームネームのチェック if (!isset($_REQUEST['form_name'])) { $temp[$form->name] = ""; continue; } //必須チェック if (!$form->require) { if (!isset($_REQUEST[$form->name]) || $_REQUEST[$form->name] == "") { $temp[$form->name] = ""; continue; } } else { if (!isset($_REQUEST[$form->name]) || $_REQUEST[$form->name] == "") { $temp[$form->name] = ""; $err[$form->name] = $form->longname . "は必ずご入力ください。"; continue; } } //プライバシーポリシー、同意=1,非同意=2 if ($form->name == 'privacy') { if ($_REQUEST[$form->name] == "同意しない") { $err[$form->name] = "フォームを送信する場合は、規約に同意ください。"; $temp[$form->name] = "同意しない"; } else { $temp[$form->name] = "同意する"; } continue; } //値チェック switch ($form->type) { case FORM_TYPE_ARRAY: if (is_array($_REQUEST[$form->name])) { for ($i=0;$iname]);$i++) { $temp[$form->name][$i] = htmlspecialchars(stripslashes($_REQUEST[$form->name][$i])); } if (($form->min !== false && count($_REQUEST[$form->name]) < $form->min) || ($form->max !== false && count($_REQUEST[$form->name]) > $form->max)) { $err[$form->name] = $form->longname . "は" . $form->min . "~" . $form->max . "個ご選択ください。"; } } else { $err[$form->name] = "システムエラー(管理者にお問い合わせください。)"; } break; default: if (isset($_REQUEST[$form->name]) && $_REQUEST[$form->name] != "") { $temp[$form->name] = htmlspecialchars(stripslashes($_REQUEST[$form->name])); $temp_err = check($form, $_REQUEST[$form->name]); if ($temp_err !== false) { $err[$form->name] = $temp_err; } } } } if (isset($temp['email1']) && isset($temp['email2'])) { //比較チェック compare_value('email1','email2'); } return $temp; } //チェック実体 function check($form, $value) { switch ($form->type) { case FORM_TYPE_ZEN_KANA: $temp = mb_convert_encoding(str_replace("ー", "", $value),"EUC-JP","auto"); if(!preg_match("/^(\xA5[\xA0-\xF6])+$/", stripslashes($temp))) { return $form->longname . "は全角カタカナでご入力ください。"; } break; case FORM_TYPE_TEL: if (!preg_match("/^[0-9-\/()]+$/", $value)) { return $form->longname . "は半角数字と記号「-」でご入力ください。"; } break; case FORM_TYPE_POSTCODE: if (!preg_match("/^[0-9-]+$/", $value)) { return $form->longname . "は半角数字と記号「-」でご入力ください。"; } break; case FORM_TYPE_HAN: if (!preg_match("/^[ -~\s]+$/", $value)) { return $form->longname . "は半角英数記号でご入力ください。"; } break; case FORM_TYPE_HAN_ABC_NUM: if (!preg_match("/^[a-zA-Z0-9\s]+$/", $value)) { return $form->longname . "は半角英数字でご入力ください。"; } break; case FORM_TYPE_HAN_NUM: if (!preg_match("/^[0-9-]+$/", $value)) { return $form->longname . "は半角数字でご入力ください。"; } if (($form->min !== false && $value < $form->min) || ($form->max !== false && $value > $form->max)) { return $form->longname . "は" . $form->min . "~" . $form->max . "の範囲でご入力ください。"; } break; case FORM_TYPE_MAIL: if (!preg_match("/^[^@]+@[^.]+\..+$/", $value)) { return $form->longname . "を正しくご入力ください。"; } break; } return false; } function radio_chk($arg1, $arg2) { if ($arg1 == $arg2) return "checked"; return ""; } function check_chk($arg1, $array) { if (is_array($array)) { for ($i=0;$iname == $name) { if (isset($err[$name])) return DEF_CSS_ERR; //必須でない if ($form->require) return DEF_CSS_REQ; } } return DEF_CSS_ROW; } function pre_hidden($forms) { foreach ($forms as $form) { //ラベルは出力なし if ($form->name === false) continue; if (!isset($_REQUEST[$form->name])) continue; if ($form->type == FORM_TYPE_ARRAY) { for ($i=0;$iname]);$i++) { //2008.8.3 修正 print "name . "[]\" value=\"" . htmlspecialchars(stripslashes($_REQUEST[$form->name][$i])) . "\">\n"; } } else { //2008.8.3 修正 print "name . "\" value=\"" . htmlspecialchars(stripslashes($_REQUEST[$form->name])) . "\">\n"; } } return; } function put_err() { global $err; //エラー出力 if ($err !== false) { print "以下の項目は必須です。
"; foreach ($err as $key => $value) { print "$value
"; } print "
"; } return; } //比較エラー function compare_value($name1, $name2) { global $FORM_LIST; global $err; $longname1 = false; $longname2 = false; $value1 = false; $value2 = false; foreach ($FORM_LIST as $form) { if ($form->name === $name1 && isset($_REQUEST[$form->name])) { $value1 = $_REQUEST[$form->name]; $longname1 = $form->longname; } if ($form->name === $name2 && isset($_REQUEST[$form->name])) { $value2 = $_REQUEST[$form->name]; $longname2 = $form->longname; } } if ($value1 !== false && $value2 !== false && $value1 !== $value2 && !isset($err[$name1]) && !isset($err[$name2])) { $err[$name2] = $longname2 . "は" . $longname1 . "と同じ内容を入力してください。"; } return true; } //必須フラグ変更 function chg_req_flg($name, $flg) { global $FORM_LIST; for($i=0;$iname === $name) { $FORM_LIST[$i]->require = $flg; return true; } } return false; } ?>