罪と罰++二律背反


* park.cgiのクローンスプリクト_ゲスト閲覧 [#ue0345d5]

- ページ: [[罪罰改造板2]]
- 投稿者: [[封天雷冥]]
- 優先順位: 緊急
- 状態: 提案
- カテゴリー: エラーが出ます
- 投稿日: 2007-08-01 (水) 22:27:17
- バージョン: 

** 内容 [#s9af727f]
park.cgiをコピーし、手を加えて各国宣伝掲示板を作りました。
これは、ぜひわが国に入国を!というものを各国の君主・軍師が宣伝するというものです。
新規登録をしようとしている人に各国の雰囲気を解かっていただくためにも見れるようにしたい。と思うのですが、どうもうまくいきません。
過去の栄光・覇者の石碑と同様に登録していなくても見れるようにしたいのですが・・・・。
状況は次の通りです。
普通にリンクをindex.cgiに置いた場合・・・文字数エラー3(これは、$pwがおかしい時に出るエラーのようです。)

他のindex.cgiにリンクがおいてあるhist.cgiや、stone.cgiを参考にした($ore_game_ =($mode eq 'guest') ? $index : $ore_game ;ここら辺を導入してみた。もちろんリンクアドレスにも?mode=guestを追加済み)場合・・・・文字数エラー3(上記と同様)

./inc/ore_sub-bbs.cgi の、文字数エラー部分をコメントアウトした場合・・・見ることは可能。しかし、戻るボタンを押した時、&error("ユーザーIDが間違っているか、登録されていません。<br>Open Error : $usrdata$id\.cgi"部の表示が出る。
しかも、登録済みキャラクター使用時でも同様に、&error("ユーザーIDが間違っているか、登録されていません。<br>Open Error : $usrdata$id\.cgi"部の表示が出る。

どこをどう修正すればいいかを教えてください。
クローンスプリクトをはっておきます。
--------


 
 #!/usr/local/bin/perl
 # サーバーの環境に合わせて変更して下さい。
 #-----------------------------------------------------------#
 #  罪と罰++ 二律背反									 #
 #  Copyright(C) 2001-2002 by Vivid Studio. BLANK BOARD		#
 #  Vivid Studio.[ http://www17.big.or.jp/~obochan/vivid/ ]	#
 #  BLANK BOARD [ http://pom.to/ ]							 #
 #-----------------------------------------------------------#
 $ver = '交流広場 v1.1';			# バージョン情報(変更不可)
 #--- [注意事項] --------------------------------------------#
 # 1.このスクリプトは以下の利用規程に従って配布しています。	#
 #   http://www24.big.or.jp/~obo/game/ore_/gild/				#
 #-----------------------------------------------------------#
  
 #===============================================================================
 # 設定項目
  
 #-------------------------------------------------------------------------------
 # 各種ファイル
  
 require './inc/ore_sub-bbs.cgi';		# 各種掲示板共通な設定項目読み込み
  
 $script		= "./come.cgi";				# このスクリプトのパス
  
 $logfile	= "./logdata/come_log.cgi";	# ログファイル
 
 $lockkey	= 0;						# ファイルロック(0=no 1=yes)
 
 $lockfile = "./come.lock";				# ロックファイル名
 
 #-------------------------------------------------------------------------------
 # 環境設定
 
 $title		= "各国宣伝掲示板";			# タイトル名
 
 $max		= 100;						# 最大保有記事数
 
 $reload_mn	= 5;						# 最短リロード間隔(この秒数以内に発言するとエラー[負荷対策])
  
 $reload_limit= 120;						# この秒数発言がないと退室扱いにする
 
 $com_limit	= 240;						# コメントの最大文字数(半角換算)
 
 $tagkey		= 0;						# タグの許可 (0=no 1=yes)
 
 $nolink		= 1;						# URL宣伝排除 (0=no 1=yes)
 
 # 機種別設定
 if($mv_mode eq 'mv'){
 
	# モバイル用設定
 
	$log_last= 15;						# 表示行数(モバイル)
 
	# BODYタグ装飾
	$body	= 'bgcolor="black" text="white" link="pink" vlink="pink" alink="pink"';
 
	$hr_color= 'white';					# 罫線の色(モバイル)
 }else{
 
	# PC用設定
 
	@reload_time= (90,120,180);			# リロード時間
 
	$log_last= 50;						# 表示行数(PC)
 
	# BODYタグ装飾
	$body	= 'bgcolor="#111122" text="#ddddee" link="#ffddee" vlink="#ffddee" alink="#ffddee"';
 }
 
 #===============================================================================
 # 以下処理 基本的にこれ以下はいじらないように。
 
 #-------------------------------------------------------------------------------
 # メイン処理
 &axs_check;		# アクセス制御
 &decode;		# フォームデコード
 &get_time;		# 日時取得
 &html;			# ページ表示
 
 
 #-------------------------------------------------------------------------------
 # 記事表示部
 sub html {
	# 表示開始
	&header;
 
	if($mv_mode eq 'mv'){
		print <<"EOM";
 $camp_info[$DAT{'camp'}][0]専用<br>$title
 <form name="park" method="$method" action="$script">
 <input type=hidden name=mode value="regist">
 <input type=hidden name=id value="$id">
 <input type=hidden name=pw value="$pw">
 <input type=text name=comment size=8>
 <input type=submit value="発言"><input type=reset value="クリア">
 </form>
 <form name="ore_" method="$method" action="$ore_game">
 <input type=hidden name=id value="$id">
 <input type=hidden name=pw value="$pw">
 <input type=hidden name=cmd value="-1">
 <input type=submit value="戻る">
 </form>
 EOM
	}
	else{
 
		print <<"EOM";
 <table>
 <tr>
 <td width="220"><img src="./imgs/title_game.png" width="220" height="52"></td>
 <td valign="bottom" align="left">
 <b>$title</b><br>
 <small>〜 各国の宣伝文です。仕官の参考にしましょう。 〜</small>
 </td>
 </tr>
 <tr>
 <form name="park" method="$method" action="$script">
 <td colspan="2" nowrap>
 <input type="hidden" name="mode" value="regist">
 <input type="hidden" name="id" value="$id">
 <input type="hidden" name="pw" value="$pw">
 <input type="hidden" name="rd" value="$rd">
 <input type="text" name="comment" class="button1" style="width:300px">
 <input type="submit" value="発言/更新" class="button1" style="width:80px">
 <input type="reset" value="クリア" class="button1" style="width:60px">
 </td>
 </form>
 </tr>
 <tr>
 <form method="$method" action="$script">
 <input type="hidden" name="mode" value="regist">
 <input type="hidden" name="id" value="$id">
 <input type="hidden" name="pw" value="$pw">
 <td align="left">
 <tt>更新:<select name="rd" size="1" class="button1" style="width:60px">
 EOM
 
		print qq|<option value="$rd">$reload_time[$rd]秒</option>|;
		foreach(0 .. $#reload_time){
			print qq|<option value="$_">$reload_time[$_]秒</option>| if($rd!=$_);
		}
  
		print <<EOM;
 </select> <input type="submit" value="変更" class="button1" style="width:60px">
 </td>
 </form>
 <form name="ore_" method="$method" action="$ore_game">
 <td align="right">
 <input type=hidden name=id value="$id">
 <input type=hidden name=pw value="$pw">
 <input type=hidden name=cmd value="-1">
 <input type=submit value="戻る" class="button1" style="width:80px">
 </td>
 </form>
 </tr>
 </table>
 <br>
 <br>
 EOM
	}
 
	# ログを展開
	open(IN,"$logfile") || &error("Open Error : $logfile");
	local $log_last_flag=0;
	while (<IN>) {
		$log_last_flag++;
		local($date,$nm,$camp,$com,$sogo,$sogo2,$addr,$host) = split(/<>/);
		$nm = qq|$nm <small>[[$sogo_p[$sogo]][$sogo_p[$sogo2]]]</small>|;
		($mv_mode eq 'mv') ? $com =~ s/ハァト/<font color="pink">\&\#63726<\/font>/g : $com =~ s/ハァト/<span class="f1">ゥ<\/span>/g ;
 
		($mv_mode eq 'mv') ?
			print qq|$nm:$com [$camp_info[$camp][0] $date]<br>\n|:
			print qq|<span style="color:$camp_info[$camp][1]">$nm : $com </span><span class="date">[ $camp_info[$camp][0] $date ]</span><hr>\n|;
		last if $log_last_flag > $log_last;
	}
	close(IN);
 
	# 著作権表示(削除禁止)
	print "<hr>\n";
	&copyright;
	exit;
 }
 
 #-------------------------------------------------------------------------------
 # ログ書き込み処理
 sub regist {
  
	# ファイルロック
	if ($lockkey) { &lock; }
 
	# ログを読み込み
	open(IN,"$logfile") || &error("Open Error : $logfile");
	@lines = <IN>;
	close(IN);
 
	# 最大記事数処理
	while ($max <= @lines) { pop(@lines); }
 
	# ログ更新処理
	if($DAT{'sogo2'} ne 10){
		if($DAT{'sogo2'} ne 9){
	&error('君主以外は投稿できません。');
		}else{
		unshift (@lines,"$date<>$DAT{'nm'}<>$DAT{'camp'}<>$com<>$DAT{'sogo2'}<>$addr<>$host<>$agent<>\n");
		open(OUT,">$logfile") || &error("Write Error : $logfile");
		print OUT @lines;
		close(OUT);
			}
	}else{
		unshift (@lines,"$date<>$DAT{'nm'}<>$DAT{'camp'}<>$com<>$DAT{'sogo2'}<>$addr<>$host<>$agent<>\n");
		open(OUT,">$logfile") || &error("Write Error : $logfile");
		print OUT @lines;
		close(OUT);
	}
	# ロック解除
	if (-e $lockfile) { unlink($lockfile); }
 }
  
 #-------------------------------------------------------------------------------
 # HTMLのヘッダー
 sub header {
	print "Content-type: text/html\n\n";
	print <<"EOM";
 <html>
 <head>
 <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
 <title>$title</title>
 EOM
	if($mv_mode eq 'pc'){
		print <<"EOM";
 <META HTTP-EQUIV="refresh" CONTENT="$reload_time[$rd];URL=$script?id=$id&pw=$pw&rd=$rd">
 $css
 <script language="JavaScript">
 <!--
 function textfocus(){
	document.park.comment.focus();
	return true;
 }
 //-->
 </script>
 EOM
	}
	(!$_[0] && $mv_mode eq 'pc') ? print qq|</head>\n<body $body onLoad="return textfocus()">| : print "</head>\n<body $body>" ;
 }


長くなってしまいましたが、宜しくお願いします<封天雷冥>
- Open Error : $usrdata$id\.cgi が表示されるときに$idは実際に使用されているユーザ名になっているはず。それが期待値と違っているならユーザが渡っていないのでは? -- [[あくあ]] &new{2007-08-01 (水) 23:29:04};
- それを考えたのですが、文字数エラー3が出ないということはすなわち$idと$pwが届いてるということだと考えました。補足ですが、\usrdata\.cgi と表示されます。 -- [[封天雷冥]] &new{2007-08-02 (木) 09:52:17};
- 発言・更新・戻るの各id&pwを持たせる処理のとこに、$mode(index.cgiから来る時は$mode="guest")を持たせて、各処理で$modeが付いてまわるようになってない気がしますが。。。>>で、メイン処理のトコで$back =($mode) ? $index : $ore_game ;で、$modeの内容で、戻る場合の振り分けも。。。 -- [[三毛猫]] &new{2007-08-02 (木) 14:32:17};
- <input type=hidden name=id value="$pw">が書かれているところの下に<input type=hidden name=mode value="$mode">でいいのでしょうか?? -- [[封天雷冥]] &new{2007-08-03 (金) 20:03:02};
- メイン処理のところに $back =($mode) ? $index : $ore_game ; を入れればいいのでしょうか。メイン処理の中ならどこでも良いのですか? -- [[封天雷冥]] &new{2007-08-03 (金) 20:06:43};
- 各処理といいますと、書き込み等の入るのでしょうか。guestモードの時は書き込みが出来ないようにしたいのですが、どうしたらいいでしょうか? -- [[封天雷冥]] &new{2007-08-07 (火) 09:12:35};
- ぁ、デフォだと「$ore_game_ =($mode eq 'guest') ? $index : $ore_game ;」でしたね。>$back〜>>>$modeの内容を条件に分岐させればよいだけかと思いますが。。。>書き込み制限 -- [[三毛猫]] &new{2007-08-07 (火) 09:59:20};
- 補足ですが、$back〜に関しては、石碑のゲスト閲覧関係でどこかの改造サイトに詳しく出ていますので、この手の改造をするなら一度見ておくことをお勧めします。(導入がかなり昔なので、私もどこだったか覚えてませんが、昔参照したトコはどこも健在なので、検索かければ見つかるかと思います。) -- [[三毛猫]] &new{2007-08-07 (火) 10:03:02};
- $modeの条件分岐は、 if($mode==guest){○○}でいいのでしょうか? -- [[封天雷冥]] &new{2007-08-11 (土) 10:50:09};
- ○○の中身は・・・・?&error('ゲストは書き込み出来ません。');でいいのでしょうか?? -- [[封天雷冥]] &new{2007-08-11 (土) 10:54:09};
- エラーにしてしまうと戻ったりなんだり、使う側がメンドイと思うので、ぉぃらなら、guestの場合は発言ボタン非表示か、更新ボタン(更新しかしない。発言処理はしない)に分岐しますね。 -- [[三毛猫]] &new{2007-08-11 (土) 14:33:04};
- ああ〜〜。そうですね。では、条件分岐で、if($mode ne guest){○○} ○○の中身は、ボタンを表示するもの でいいのでしょうか? -- [[封天雷冥]] &new{2007-08-18 (土) 20:32:38};

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS