#!/usr/bin/perl -- ################################################################################ # # Star-tour MOvile Reservation cgi ( st_mor.cgi ) # # Code by T.Kamakura @ Office Tandem 2009.2.17 # ################################################################################ require 'jcode.pl'; require 'common.pl'; require 'const.pl'; require 'template.pl'; require 'config.pl'; require 'yoyaku.pl'; require 'counter.pl'; require 'check.pl'; require 'maintenance.pl'; ################################################################################ # 定数定義 ################################################################################ ################################################################################ # プロパティ ################################################################################ # システム設定 %g_SysConfig = (); ################################################################################ # for TEST ################################################################################ # ダミーデータ ################################################################################ # メインロジック ################################################################################ # 日本語コードライブラリの初期化 &jcode'init; # HTMLヘッダを出力 &common'printHtmlHeader; # CGIへの引数を読みこむ &common'getCgiParam($ENV{'REQUEST_METHOD'}); $func_name = $common'FORM{'Func'}; # システム設定ファイルの読み込み &config'readSysConfig( $const'g_SysConfigPath, *g_SysConfig); # テンプレートモジュールに設定 &template'setSysItemTable( %g_SysConfig); $template'g_Empty2Space = 0; # メンテナンスモード判定 if( &maintenance'onMaintenance() != 0) { if( $common'FORM{'Lang'} ne 'jp' ) { &maintenance'showMaintenancePrompt('t_mov_maintenance_en.html'); } else { &maintenance'showMaintenancePrompt('t_mov_maintenance.html'); } exit; } if( $func_name eq "") { &startYoyakuInput(); } else { if( $func_name eq 'Input' ) { &doYoyakuInput(); } elsif( $func_name eq 'YoyakuInputConfirm') { &doYoyakuInputConfirm(); } elsif( $func_name eq 'YoyakuInputCheck') { &doYoyakuInputCheck(); } elsif( $func_name eq 'ExecYoyaku') { &doExecYoyaku(); } elsif( $func_name eq 'SendConfirmMail') { &doSendConfirmMail( $common'FORM{'DataID'} ); } else { # 未定義機能 print "未知の機能名称です。

"; print "CGIの呼び出し方法を確認してください。"; print "

"; } } exit; ################################################################################ # 予約入力開始 ################################################################################ sub startYoyakuInput { local( $lang ) = $common'FORM{'Lang'}; local( $filename, $i ); local( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime(time()); # テンプレート出力関数の呼び出し $filename = "t_mor_input_num"; if( $lang ne 'jp' ) { $filename = $filename . "_" . $lang . ".html"; } else { $filename = $filename . ".html"; } # 初期値を設定 $g_SysConfig{'PNUM_Sel1'} = "checked"; for( $i = 0; $i < 5; $i++ ) { $g_SysConfig{"I_Sex$i"} = "男"; } $year += 1900; $g_SysConfig{'I_Year1'} = $year; $g_SysConfig{'I_Mon1'} = 1; $g_SysConfig{'I_Day1'} = 1; $g_SysConfig{'I_Year2'} = $year; $g_SysConfig{'I_Mon2'} = 1; $g_SysConfig{'I_Day2'} = 1; # 日付コンボ作成 # &makeDateCombo(); # テンプレートモジュールに設定 &template'setSysItemTable( %g_SysConfig ); # 先頭画面を表示 &template'printTemplate( $const'g_TemplateDir, $filename, 0 ); } ################################################################################ # 入力 ################################################################################ sub doYoyakuInput { local( $page, $lang, $next_template, $pnum, $fret, $template_file, $i, $empty, $pageNo ); $empty = 0; # カレントページから、次のテンプレートを選択する $page = $common'FORM{'Page'}; $lang = $common'FORM{'Lang'}; $pnum = $common'FORM{'PersonNum'}; if( $common'FORM{'submit'} eq '[8] 戻る' || $common'FORM{'submit'} eq '[8] Prev' ) { $fret = 1; } else { $fret = 0; } if( $page eq 'num' ) { $next_template = 'person_1'; } elsif( $page eq 'person_1' ) { if( $fret == 1 ) { # 戻る $next_template = 'num'; } else { # 次へ if( $common'FORM{'FName0'} eq '' || $common'FORM{'LName0'} eq '' ) { $next_template = $page; $empty = 1; } elsif( $pnum >= 2 ) { $next_template = 'person_2'; } else { $next_template = 'phone'; } } } elsif( $page eq 'person_2' ) { if( $fret == 1 ) { # 戻る $next_template = 'person_1'; } else { # 次へ if( $common'FORM{'FName1'} eq '' || $common'FORM{'LName1'} eq '' ) { $next_template = $page; $empty = 1; } elsif( $pnum >= 3 ) { $next_template = 'person_3'; } else { $next_template = 'phone'; } } } elsif( $page eq 'person_3' ) { if( $fret == 1 ) { # 戻る $next_template = 'person_2'; } else { # 次へ if( $common'FORM{'FName2'} eq '' || $common'FORM{'LName2'} eq '' ) { $next_template = $page; $empty = 1; } elsif( $pnum >= 4 ) { $next_template = 'person_4'; } else { $next_template = 'phone'; } } } elsif( $page eq 'person_4' ) { if( $fret == 1 ) { # 戻る $next_template = 'person_3'; } else { # 次へ if( $common'FORM{'FName3'} eq '' || $common'FORM{'LName3'} eq '' ) { $next_template = $page; $empty = 1; } elsif( $pnum >= 5 ) { $next_template = 'person_5'; } else { $next_template = 'phone'; } } } elsif( $page eq 'person_5' ) { if( $fret == 1 ) { # 戻る $next_template = 'person_4'; } else { # 次へ if( $common'FORM{'FName4'} eq '' || $common'FORM{'LName4'} eq '' ) { $next_template = $page; $empty = 1; } else { $next_template = 'phone'; } } } elsif( $page eq 'phone' ) { if( $fret == 1 ) { # 戻る $next_template = $pnum == 5 ? "person_5" : $pnum == 4 ? "person_4" : $pnum == 3 ? "person_3" : $pnum == 2 ? "person_2" : "person_1"; } else { # 次へ if( $common'FORM{'PhonNo'} eq '' ) { $next_template = $page; $empty = 1; } else { $next_template = 'fax'; } } } elsif( $page eq 'fax' ) { # FAX if( $fret == 1 ) { # 戻る $next_template = 'phone'; } else { # 次へ $next_template = 'mail_m'; } } elsif( $page eq 'mail_m' ) { if( $fret == 1 ) { # 戻る $next_template = 'fax'; } else { # 次へ if( $common'FORM{'MailAdr'} eq '' ) { $next_template = $page; $empty = 1; } else { $next_template = 'mail_pc'; } } } elsif( $page eq 'mail_pc' ) { if( $fret == 1 ) { # 戻る $next_template = 'mail_m'; } else { # 次へ $next_template = 'ticket_type'; } } elsif( $page eq 'ticket_type' ) { if( $fret == 1 ) { # 戻る $next_template = 'mail_pc'; } else { # 次へ $next_template = 'day_dep'; } } elsif( $page eq 'day_dep' ) { if( $fret == 1 ) { # 戻る $next_template = 'ticket_type'; } else { # 次へ if( $common'FORM{'TicketType'} eq '片道' ) { $next_template = 'dest'; } else { $next_template = 'day_arv'; } } } elsif( $page eq 'day_arv' ) { if( $fret == 1 ) { # 戻る $next_template = 'day_dep'; } else { # 次へ $next_template = 'dest'; } } elsif( $page eq 'dest' ) { if( $fret == 1 ) { # 戻る if( $common'FORM{'TicketType'} eq '片道' ) { $next_template = 'day_dep'; } else { $next_template = 'day_arv'; } } else { # 次へ if( $common'FORM{'Dest'} eq '' ) { $next_template = $page; $empty = 1; } else { $next_template = 'air'; } } } elsif( $page eq 'air' ) { if( $fret == 1 ) { # 戻る $next_template = 'dest'; } else { # 次へ $next_template = 'other'; } } elsif( $page eq 'other' ) { if( $fret == 1 ) { # 戻る $next_template = 'air'; } else { # 次へ $next_template = 'confirm'; } } elsif( $page eq 'confirm' ) { if( $fret == 1 ) { # 戻る $next_template = 'other'; } else { # 予約実行 &doExecYoyaku(); return ; } } #------------------------------------------------------------------------- # 入力不正時のメッセージ #------------------------------------------------------------------------- if( $empty == 1 ) { if( $lang ne 'jp' ) { $g_SysConfig{'InputCaution'} = 'Check your input.
'; } else { $g_SysConfig{'InputCaution'} = '入力をチェックしてください。
'; } } #------------------------------------------------------------------------- # テンプレートファイル名を確定 #------------------------------------------------------------------------- if( $lang ne 'jp' ) { $template_file = "t_mor_input_" . $next_template . "_". $lang . ".html"; } else { $template_file = "t_mor_input_" . $next_template . ".html"; } #------------------------------------------------------------------------- # ラジオボタン選択用 #------------------------------------------------------------------------- $g_SysConfig{'PNUM_Sel1'} = $pnum == 1 ? "checked" : ""; $g_SysConfig{'PNUM_Sel2'} = $pnum == 2 ? "checked" : ""; $g_SysConfig{'PNUM_Sel3'} = $pnum == 3 ? "checked" : ""; $g_SysConfig{'PNUM_Sel4'} = $pnum == 4 ? "checked" : ""; $g_SysConfig{'PNUM_Sel5'} = $pnum == 5 ? "checked" : ""; for( $i = 0; $i < 5; $i++ ) { $key = "Sex$i"; $key2 = "Sel_Sex$i" . "_M"; $key3 = "Sel_Sex$i" . "_F"; #print "*** $key $key2 $key3 ***
"; $g_SysConfig{$key2} = $common'FORM{$key} eq "男" ? "checked" : ""; $g_SysConfig{$key3} = $common'FORM{$key} eq "女" ? "checked" : ""; # 2009.03.05 2人目以降名字の連動なし #$key = "FName$i"; #if( ($i > 0) && ($common'FORM{$key2} eq '') ) { # $key2 = "FName0"; # $common'FORM{$key} = $common'FORM{$key2}; #} } $g_SysConfig{'Sel_TicketType1'} = $common'FORM{'TicketType'} eq "往復" ? "checked" : $common'FORM{'TicketType'} eq "" ? "checked" : ""; $g_SysConfig{'Sel_TicketType2'} = $common'FORM{'TicketType'} eq "片道" ? "checked" : ""; #------------------------------------------------------------------------- # プログレスバー #------------------------------------------------------------------------- $g_SysConfig{'Progress'} = &makeProgress( $pnum, $next_template ); #------------------------------------------------------------------------- # 入力内容確認用 #------------------------------------------------------------------------- # ★旅行者 $Confirm = ""; for( $i = 0; $i < $pnum; $i++ ) { $key = "FName$i"; $key2 = "LName$i"; $key3 = "Sex$i"; if( $lang ne 'jp' ) { $sex = $common'FORM{$key3} eq '男' ? "Mr." : $common'FORM{$key3} eq '女' ? "Ms." : " "; $work = "[" . ($i + 1) . "]" . $common'FORM{$key} . " " . $common'FORM{$key2} . "(" . $sex . ")
"; } else { $work = "[" . ($i + 1) . "]" . $common'FORM{$key} . " " . $common'FORM{$key2} . "(" . $common'FORM{$key3} . ")
"; } $Confirm = $Confirm . $work; } $g_SysConfig{'C_NameList'} = $Confirm; # ★往復/片道と日程 $Confirm = ""; if( $lang ne 'jp' ) { $ttype = $common'FORM{'TicketType'} eq '片道' ? "One way" : "Round trip"; } else { $ttype = $common'FORM{'TicketType'}; } if( $common'FORM{'TicketType'} eq '片道' ) { $Confirm = $ttype . " (" . $common'FORM{'Year1'} . "/" . $common'FORM{'Mon1'} . "/" . $common'FORM{'Day1'} . "〜)
"; } else { $Confirm = $ttype . " (" . $common'FORM{'Year1'} . "/" . $common'FORM{'Mon1'} . "/" . $common'FORM{'Day1'} . "〜" . $common'FORM{'Year2'} . "/" . $common'FORM{'Mon2'} . "/" . $common'FORM{'Day2'} . ")
"; } $g_SysConfig{'C_Plan'} = $Confirm; # フォームの入力内容をシステム環境設定に登録 foreach $key (keys %common'FORM) { $g_SysConfig{"I_$key"} = $common'FORM{$key}; } # 日付コンボ作成 &makeDateCombo(); # テンプレートモジュールに設定 &template'setSysItemTable( %g_SysConfig ); # テンプレート出力関数の呼び出し &template'printTemplate( $const'g_TemplateDir, $template_file, 0 ); } ################################################################################ # 予約入力確認実行 ################################################################################ sub doYoyakuInputConfirm { # 予約データモジュールの初期化 if( &yoyaku'init(0) < 0) { return -1; } # 代表者の名前はアクセスキーになるので、前後の空白を除去 $common'FORM{'FName0'} = &common'trimString($common'FORM{'FName0'}); $common'FORM{'LName0'} = &common'trimString($common'FORM{'LName0'}); # 予約フォームの入力データからレコード作成 if( &yoyaku'makeRecord( %common'FORM) < 0) { return -1; } # テンプレートモジュールの初期化 &template'setItemTable( %yoyaku'g_Items); &template'setLoopCount( &yoyaku'getLoopCount()); # 入力エラーチェック if( &checkInputError() < 0) { # テンプレートモジュールにエラー項目設定 &template'setSysItemTable( %g_SysConfig); # テンプレート出力関数の呼び出し &template'printTemplate( $const'g_TemplateDir, "t_yoyaku_input_ng.html", 0); } else { # テンプレート出力関数の呼び出し &template'printTemplate( $const'g_TemplateDir, "t_yoyaku_input_confirm.html", 0); } # 予約データモジュールの終了 &yoyaku'end; return 0; } ################################################################################ # 予約入力チェック実行(チェック結果を別ウィンドウ表示するためのインタフェース) ################################################################################ sub doYoyakuInputCheck { # 予約データモジュールの初期化 if( &yoyaku'init(0) < 0) { return -1; } # 代表者の名前はアクセスキーになるので、前後の空白を除去 $common'FORM{'FName0'} = &common'trimString($common'FORM{'FName0'}); $common'FORM{'LName0'} = &common'trimString($common'FORM{'LName0'}); # 予約フォームの入力データからレコード作成 if( &yoyaku'makeRecord( %common'FORM) < 0) { return -1; } # テンプレートモジュールの初期化 &template'setItemTable( %yoyaku'g_Items); &template'setLoopCount( &yoyaku'getLoopCount()); # 入力エラーチェック if( &checkInputError() < 0) { # テンプレートモジュールにエラー項目設定 &template'setSysItemTable( %g_SysConfig); # テンプレート出力関数の呼び出し &template'printTemplate( $const'g_TemplateDir, "t_yoyaku_input_ng_ow.html", 0); } else { # テンプレート出力関数の呼び出し &template'printTemplate( $const'g_TemplateDir, "t_yoyaku_input_ok_ow.html", 0); } # 予約データモジュールの終了 &yoyaku'end; return 0; } ################################################################################ # 入力エラーチェック # return # 正常:0 # 異常:負($g_SysConfig{'InputError'} にエラーとなった項目名を入れる) ################################################################################ sub checkInputError { local( %input_data) = @_; # 固定部分の項目をチェック $count = 0; foreach $key (@yoyaku'g_FixLabel) { $type = $yoyaku'g_FixConfig[$count]; $value = $yoyaku'g_Items{"Yoyaku.$key"}; if( !$value) { $value = ""; } if( check'checkInputValue( $type, $value) != 1) { # エラー発見 $g_SysConfig{'InputError'} = $key; return -1; } $count++; } # 代表者のみ入力チェック $type = 'INPUT'; if( check'checkInputValue( $type, $yoyaku'g_Items{"Yoyaku.FName0"}) != 1) { $g_SysConfig{'InputError'} = 'FName'; return -1; } if( check'checkInputValue( $type, $yoyaku'g_Items{"Yoyaku.LName0"}) != 1) { $g_SysConfig{'InputError'} = 'LName'; return -1; } # 繰り返し部分のデータ形式をチェック $LoopCount = 10; $count = 0; foreach $key (@yoyaku'g_LoopLabel) { $type = $yoyaku'g_LoopConfig[$count]; if( $type ne 'INPUT' && $type ne 'NON') { # 必須入力はチェック済みなので形式のみ for( $i = 0; $i < $LoopCount; $i++) { $value = $yoyaku'g_Items{"Yoyaku.$key$i"}; #print "$value:$type
"; if( !$value) { $value = ""; } if( $value ne "") { # 記述があるものだけを形式チェック if( check'checkInputValue( $type, $value) != 1) { # エラー発見 $g_SysConfig{'InputError'} = $key; return -1; } } } } $count++; } # パスワード再入力チェック if( $common'FORM{'Passwd'} ne $common'FORM{'Passwd2'}) { $g_SysConfig{'InputError'} = 'Passwd2'; return -1; } return 0; } ################################################################################ # 予約実行 ################################################################################ sub doExecYoyaku { local( $lang ) = $common'FORM{'Lang'}; local( $filename ); local( $work ); # 予約データモジュールの初期化(3:追加モード) if( &yoyaku'init(3) < 0) { return -1; } # 入力の調整 &adjustInput(); # 拡張データをその他文字列に連結 $work = $common'FORM{'Others'}; # 予約方法 $work = $work . "[携帯予\約:lang=$lang]"; $common'FORM{'Others'} = $work; # 予約フォームの入力データからレコード作成 if( &yoyaku'makeRecord( %common'FORM) < 0) { return -1; } #print "レコード追加
"; # レコード追加 &yoyaku'addRecord(); # テンプレートモジュールの初期化 &template'setItemTable( %yoyaku'g_Items); &template'setLoopCount( &yoyaku'getLoopCount()); # テンプレート出力関数の呼び出し $filename = "t_mor_yoyaku_thankyou"; if( $lang ne 'jp' ) { $filename = $filename . "_" . $lang . ".html"; } else { $filename = $filename . ".html"; } &template'printTemplate( $const'g_TemplateDir, $filename, 0); # 予約データモジュールの終了 &yoyaku'end; # 予約メール送信 &sendYoyakuMail(0, '', ''); # 2009.03.05 ここで強制送信(復活) &sendYoyakuMail(1, $common'FORM{'MailAdr'}, $common'FORM{'MailAdr2'}); } ################################################################################ # 予約確認メール送信(お客様宛て) ################################################################################ sub doSendConfirmMail { local( $id ) = @_; local( $lang ) = $common'FORM{'Lang'}; local( $filename ); # 予約データモジュールの初期化(1:ファイル読み込み) if( &yoyaku'init(1) < 0) { return -1; } # 予約データの当該レコード読み込み if( &yoyaku'readRecordId( $id) < 0) { return -1; } # テンプレートモジュールの初期化 &template'setItemTable( %yoyaku'g_Items); &template'setLoopCount( &yoyaku'getLoopCount()); # テンプレート出力関数の呼び出し $filename = "t_mor_yoyaku_thankyou"; if( $lang ne 'jp' ) { $filename = $filename . "_" . $lang . ".html"; $g_SysConfig{'Comment'} = 'The reservation confirmation mail was sent. '; } else { $filename = $filename . ".html"; $g_SysConfig{'Comment'} = 'ご予約確認メールを送信しました。'; } # テンプレートモジュールに設定 &template'setSysItemTable( %g_SysConfig); &template'printTemplate( $const'g_TemplateDir, $filename, 0); # 予約データモジュールの終了 &yoyaku'end; # 予約メール送信 &sendYoyakuMail(1, $template'g_tableItems{'Yoyaku.MailAdr'}, $template'g_tableItems{'Yoyaku.MailAdr2'}); } ################################################################################ # 予約メール送信 # params # $mode : 0:管理者宛て/1:お客様宛て(user_adr / user_adr2を参照する) ################################################################################ sub sendYoyakuMail { local( $mode, $user_adr, $user_adr2) = @_; local( $sendmail) = $g_SysConfig{'SendMail'}; local( $sender_adr) = $g_SysConfig{'MAIL1'}; local( $lang ) = $common'FORM{'Lang'}; local( $filename ); local( $user_subject ); local( $user_subject2 ); if( $mode == 0) { # 管理者宛てメール $manager_adr = $g_SysConfig{'MAIL1'}; $manager_body = &createMailBody( $const'g_TemplateDir, "t_mng_yoyaku.mail"); &common'sendMail( $sendmail, $manager_adr, $sender_adr, $g_SysConfig{'MngMailSbj'}, $manager_body ); } elsif( $mode == 1) { # お客様宛てメール $filename = "t_mor_user_yoyaku"; if( $lang ne 'jp' ) { $filename = $filename . "_" . $lang . ".mail"; $user_subject = "Thank you for the reservation. "; $user_subject2 = "Thank you for the reservation. "; } else { $filename = $filename . ".mail"; $user_subject = $g_SysConfig{'UserMailSbj'} . "(" . $template'g_tableItems{'Yoyaku.FName0'} . " " . $template'g_tableItems{'Yoyaku.LName0'} . " 様)"; $user_subject2 = $g_SysConfig{'UserMailSbj'}; } $user_body = &createMailBody( $const'g_TemplateDir, $filename ); &common'sendMail( $sendmail, $user_adr, $sender_adr, $user_subject, $user_body ); if( $user_adr2 ne "") { &common'sendMail( $sendmail, $user_adr2, $sender_adr, $user_subject2, $user_body); } } } ################################################################################ # メールボディ生成 # params # $dir_path :テンプレートディレクトリパス # $tpl_name :テンプレート名 # return # メールボディ文字列 ################################################################################ sub createMailBody { local( $dir_path, $tpl_name) = @_; local( $dest_path) = $dir_path . '/mail_temp.txt'; # テンプレート出力先ファイルを開く &template'openOutputFile( $dest_path); # テンプレート出力 &template'printTemplate( $dir_path, $tpl_name, 0); # テンプレート出力先ファイルを閉じる &template'closeOutputFile(); return &common'readText( $dest_path); } ################################################################################ # 入力の調整 ################################################################################ sub adjustInput() { local( $work ); # 年 $work = $common'FORM{'Year1'}; $common'FORM{'Year1'} = sprintf( "%04d", $work ); $work = $common'FORM{'Year2'}; $common'FORM{'Year2'} = sprintf( "%04d", $work ); # 月 $work = $common'FORM{'Mon1'}; $common'FORM{'Mon1'} = sprintf( "%02d", $work ); $work = $common'FORM{'Mon2'}; $common'FORM{'Mon2'} = sprintf( "%02d", $work ); # 日 $work = $common'FORM{'Day1'}; $common'FORM{'Day1'} = sprintf( "%02d", $work ); $work = $common'FORM{'Day2'}; $common'FORM{'Day2'} = sprintf( "%02d", $work ); } ################################################################################ # 日付コンボ作成 ################################################################################ sub makeDateCombo() { local( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime(time()); $year += 1900; $g_SysConfig{'YearCombo1'} = &common'makeNumCombo( "Year1", "%04d", $year, $year + 4, $g_SysConfig{'I_Year1'}, 1 ); $g_SysConfig{'YearCombo2'} = &common'makeNumCombo( "Year2", "%04d", $year, $year + 4, $g_SysConfig{'I_Year2'}, 1 ); $g_SysConfig{'MonCombo1'} = &common'makeNumCombo( "Mon1", "%02d", 1, 12, $g_SysConfig{'I_Mon1'}, 2 ); $g_SysConfig{'MonCombo2'} = &common'makeNumCombo( "Mon2", "%02d", 1, 12, $g_SysConfig{'I_Mon2'}, 2 ); $g_SysConfig{'DayCombo1'} = &common'makeNumCombo( "Day1", "%02d", 1, 31, $g_SysConfig{'I_Day1'}, 3 ); $g_SysConfig{'DayCombo2'} = &common'makeNumCombo( "Day2", "%02d", 1, 31, $g_SysConfig{'I_Day2'}, 3 ); } ################################################################################ # プログレスバー作成 ################################################################################ sub makeProgress { local( $pnum, $template ) = @_; local( $allPage ) = 10 + $pnum; local( $i, $page, $wk ); @g_TemplateTable = ("person_1","person_2","person_3","person_4","person_5","phone","fax","mail_m","mail_pc","ticket_type","day_dep","day_arv","dest","air","other"); $page = 0; for( $i = 0; $i <= $#g_TemplateTable; $i++ ) { if( $g_TemplateTable[$i] eq $template ) { $page = $i + 1; last; } } if( $page >= 5 ) { $page -= (5 - $pnum); } $wk = ""; for( $i = 0; $i < $page; $i++ ) { $wk = $wk . '*'; # $wk = $wk . '★'; } $wk = $wk . ''; for( ; $i < $allPage; $i++ ) { $wk = $wk . '*'; # $wk = $wk . '☆'; } # $wk = $wk . $page . '/' . $allPage; return $wk; }