• ベストアンサー

リロード禁止

現在、CGIゲームを製作している者です 名前と得点を http://www.~~~~~~/index.php?name=name&score=285 のようにしているのですが、この状態でリロードすると連続投稿みたいな感じになります 例えば 普通の状態 名無し 198点 リロードすると 名無し 198点 名無し 198点 のようになってしまいます JavaScriptを使えば出来そうなのですが、わかりません リロードできないようにするには、どうすればよいか教えてください

質問者が選んだベストアンサー

  • ベストアンサー
  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

>JavaScriptを使えば出来そうなのですが JavaScriptでリロードを制限することはできません。 >現在、CGIゲームを製作している者です CGI側がいじれるならばCGIでなんとかするしかないと思います。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

一度書き出されてしまったURLはリロードを 防げませんので、リロードしないように結果表示 ページを別にもうけて、投稿後に表示ページに 飛ばすようにすると二重投稿のリスクを減らすことが 可能です。 またユニークIDを発行してGETで送る際につけて もらえば、CGIがうけとったあとデータを追加するか どうかのキーにできると思います。

関連するQ&A

  • リファラーを変えずに自動的にリロードする方法はないでしょうか?

    リファラーを変えずに自動的にリロードする方法はないでしょうか? サイトトップのリンクから遷移した先のレンタルBBSを30秒おきにリロードしてチェックしたいのですが、フレームを使って <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <META HTTP-EQUIV="Refresh" CONTENT="30"><TITLE>リロード</TITLE> </head> <body><FRAMESET COLS="0,*" TITLE="リロード"> <FRAME SRC="http://okwave.jp/" NAME="Dummy" SCROLLING="auto" FRAMEBORDER="0" NORESIZE TITLE="ダミー"> <FRAME SRC="http://okwave.jp/" NAME="Main" SCROLLING="auto" FRAMEBORDER="0" TITLE="内容"> <BODY> といったやり方をした場合、トップページからどこか別ページに遷移した状態でページがリロードされると、表示されているページは元のトップに戻ってしまいます。 それならフレームセットをトップページからの指定にせずに最初からBBSのURLを入れて <FRAME SRC="http://okwave.jp/" NAME="Dummy" SCROLLING="auto" FRAMEBORDER="0" NORESIZE TITLE="ダミー"> <FRAME SRC="http://*********.jp/BBS.php" NAME="Main" SCROLLING="auto" FRAMEBORDER="0" TITLE="内容"> としておけばいいとお思いかもしれませんが、このBBSはリファラーを検出しているので、このような方法では「トップページからアクセスしていないから表示不能」ということになってしまうのです。 このため、一旦トップページからBBSに入った状態でBBSのフレームだけ定期的にリロードさせたいのですが、そういったJavascriptでもどこかで公開されていないでしょうか? ちなみに、私はJavascriptは簡単な文字数制限や文字種制限や、チェックボックスがチェックされたらテキストボックスを有効にするくらいしか自力で書くことが出来ず、他には既存のスクリプトを拾ってきて例えばonClickやonFofusなどで作動させるくらいのことしか出来ないので、自分でスクリプトを組むためのアドバイスを頂いても殆ど理解できません。 「このサイトにあるこのスクリプトのこの部分を書き換えれば出来る」程度のご回答を頂くことは出来ないでしょうか? どうかよろしくお願い致します。

  • javascriptでボタン作成

    こんばんわ,htmlでボタンを表示してcgiを動かすコードを書いています. 現在のhtmlのコードです.my_mkdir.cgiはディレクトリを2つ作るcgiです. <form action="/cgi-bin/my_mkdir.cgi" method="get" target"_self">   <input type="hidden" name="$args[0]">   <input type="hidden" name="$args[1]">   <input type="submit" name="button" value="PowerON"> </form> ボタンを押す→cgi実行の流れまではよいのですが,cgiでhtmlのコードがないとブラウザ上でエラーがでます. 対策として,cgiコード(python)でこのようにリロードするようにして回避しています. print "Location: リロードするURL\n\n" これでは不格好なので,ボタンを押す→cgi実行を可能にするにはjavascriptだとできるかもしれないと聞きました. javascriptでこのようなことは可能でしょうか?hiddenで渡しているパラメータはどのようにすればよいのでしょうか? html・javascript共に初心者です.よろしくおねがいします.

  • フレームセットのリンクを変更するCGI

    フレームセットを利用していると直リンクされると、レイアウトが崩れて嫌なので普段はJavaScriptで <body onLoad="if (top == self) { location.replace('index.html') };"> このタグで強制的にフレームセットのページであるindex.htmlにリロードしています。 でも、この場合だとindex.htmlにフレーム設定をしているA.htmlとB.htmlしか表示できません。 これを、直リンクされた場合に強制的にindex.htmlに飛んで、さらにフレームセットのページをA.htmlとC.html(直リンクされたページ)に変更させたいのです。 index.htmlを表示させた後、C.html(直リンクされたページ)のアドレスを取得してフレームセットを書き直すCGIなのだと思いますが、このようなCGIのフリーなどありましたら教えてください。 JavaScriptとCGIの混合技らしいので、JavaScriptカテゴリにも書き込んでおります。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=745359

    • ベストアンサー
    • CGI
  • リロード後にプルダウンの選択状態を維持する方法

    どなたかおしえてください。 2つのプルダウン(ドロップダウンリスト)があり、双方ともDBのテーブルのある一列を参照できます。 2つのプルダウンが、A,及びBと仮定した場合、Aのあるデータを選択すると自動的にBが選択される状態です。 Bを選択するには、submitボタンを押下する必要があるのですが、押下すると画面がリロードされてしまい、Aの選択項目がデフォルト値に戻ってしまいます。 解決したいことは、リロード後もAの値を維持したいということです。 私が試している方法は、JavaScriptを使う方法なのですが、どうもうまくいきません。下記のコードを追加すると、CGIエラーになってしまいます。 print "<script language=javascript src=pull.js>\n"; print "</script>\n"; print "<select name=from onChange=menuLink(this.options[this.selectedIndex].value)>\n"; 【pull.js】 <script language="JavaScript"> <!-- function menuLink(linkLoc){ if (linkLoc != ""){ parent.main.location.href = linkLoc; } } // --> </script> 識者の方情報を提供いただけないでしょうか。

    • ベストアンサー
    • CGI
  • PHPのリロード時の処理

    PHPのリロード時の処理 PHPプログラム初心者です。 掲示板のプログラムを作成しております。 以下のコードで、リロード時、自動で投稿ボタンが押されてsubmitしてしまいます。 自分で考えた解決策としては、下記のwriteDate()内で、条件を入れることです。 $_GET['personal_name'];のデータを変数に保持し、次にリロードされた時同じものが返ってきら、writeDate()内の処理をしないという方法です。 このときの変数の保存の仕方が解りません。 ご存じの方がおられましたら教えてください。 <?php if($_SERVER["REQUEST_METHOD"]=="GET"){ writeData(); } readData(); function readData(){ $keijban_file='keijiban.txt'; $fp=fopen($keijban_file,'rb'); if($fp){ if(flock($fp,LOCK_SH)){ while(!feof($fp)){ $buffer=fgets($fp); print($buffer); } flock($fp,LOCK_UN); }else{ print('ファイルロックに失敗しました'); } } fclose($fp); } function writeData(){ //--------ここで同じ書き込みデータがあればreturnしたい。------- $t=$_GET['personal_name']; $personal_name=$_GET['personal_name']; $contents=$_GET['contents']; $contents=nl2br($contents); $data="<hr>\r\n"; $data=$data."<p>[投稿者:".$personal_name."]</p>"; $data=$data."[内容]"; $data=$data."<p>".$contents."</p>"; $keijban_file='keijiban.txt'; $fp=fopen($keijban_file,'ab'); if($fp){ if(flock($fp,LOCK_EX)){ if(fwrite($fp,$data)===FALSE){ print('ファイル書き込みに失敗しました'); } flock($fp,LOCK_UN); }else{ print('ファイルロックに失敗しました'); } } $data=null; fclose($fp); } ?>

    • ベストアンサー
    • PHP
  • ブラウザリロードでの書き込みを防ぐ

    説明が上手くできないので 分かりにくくなりますが申し訳ございません。 練習で書いた構文の動作自体は問題ないようなのですが ブラウザをリロードさせると 直前に入力した内容が実行されてしまいます。 ---------------------------------------- <html> <body> <form action="" method="post"> <p>掲示板</p> <p>名前:<input type="text" name="name"></p> <p>内容:<br><textarea name="coment" cols=50 rows=4></textarea></p> <p><input type="submit" name="submit" value="送信"></p> </form> <?php error_reporting(1); function Aa($str){ return htmlspecialchars($str, ENT_QUOTES); } $now = date("Y年n月j日 H:i:s"); $name = Aa($_POST["name"]); $coment = nl2br(Aa($_POST["coment"])); $data = "名前:$name - $now <br>\r\n内容:<br>$coment </p>\r\n"; if($_POST["submit"]){ if(empty($name) || empty($coment)){ echo "<p>未入力があります。</p>"; }else{ $fp = fopen("test.txt", "a"); flock($fp, LOCK_EX); fputs($fp, $data); flock($fp, LOCK_UN); fclose($fp); } } $fp = fopen("test.txt", "r"); if($fp){ if(flock($fp, LOCK_SH)){ while(!feof($fp)){ $get = fgets($fp); echo $get; } }else{ echo "ファイルロック失敗"; } fclose($fp); } ?> </body> </html> ---------------------------------------- フォームに入力がない時に送信ボタンを押して 「未入力があります。」のエラーを出しておけば その状態でブラウザのリロードボタンをおしても ファイルに書き込み処理部分が実行されず それ以上ファイルに書き込みはされないのですが 入力成功した場合、ブラウザをリロードさせると 直前に入力した動作内容がそのまま実行され リロードさせるたび同じ内容が 繰り返し繰り返し書き込まれてしまいます。 条件分岐で何とかできそうなのですが なかなか上手くいきません。 リロードで同じ処理を繰り返させないよう なにか簡単で分かりやすい条件分岐方法がありますでしょうか? よろしくお願いいたいます。

    • ベストアンサー
    • PHP
  • javaプログラムについて

    クラスの出席番号順にString型配列nameに名前が、 * int型配列scoreにテストの点数が格納されています。 * * 出席番号1 大悟 74点 * 出席番号2 琴音 70点 * 出席番号3 勇輝 88点 *       ・ *       ・ *       ・ *       ・ *       ・ * * このクラスの最高得点者の名前と、最低得点者の名前を * 表示するメソッドを作成してください。 * */ public class MethodAdd8 { public static void main(String[] args){ String[] name = {"大悟", "琴音","勇輝","葵","綾乃","和樹","凛","愛花","結愛","孝太郎"}; int[] score = {74,70,88,82,96,64,80,61,72,79}; //メソッドの呼び出し score("綾乃",1); score("愛花",2); } //ここにメソッドを追加してください public static void score(String name,int score){ if(score==1){ System.out.println("綾乃"); }else{ System.out.println("愛花"); } } } この配列から、最高得点者と最低得点者は分かるので上記のようにしたところ、 score配列の中から最高得点者と最低得点者を探すように、と言われました。 考え方やヒントなどをお願いします。

  • FLASH(swf)2点のリロード毎の切り替えに関して

    FLASH(swf)を2点リロード毎の切り替えさせようと思い、JavaScriptで下記のようにしたとろこ表示はできました。 <script type="text/JavaScript"> <!-- rndimg = new Array(); rndimg[0]="boy.swf"; rndimg[1]="girl.swf"; rndnm = Math.floor(rndimg.length*Math.random()); rndimg = rndimg[Math.floor(rndnm)]; document.write('<embed src="'+ rndimg +'">'); // --> </script> が、サイズが小さく表示されます。基本サイズはW800×H270です。これさえクリアしたら現状の製作中のセサイトは80%完成なので、どなたか教えてください。 他の方法は昨日いろいろ試しましたが、一定のブラザのみで表示とか、どれも上手くいかず上記の方法にやっとたどり着きました。

  • 指定フレームに飛ばすのと同時にリロードしたい

    出来るかどうか分からないのですが、質問させてください。 Flashで作ったゲームが終了した時に、「もう一度」か「終了」を選べるメニューが出てくるとします。 その際、「もう一度」をクリックするとgotoAndPlay(1)で最初のフレームに飛ばしているのですが、このゲームはJavaScriptの変数を読み込んだりしている為、一度ページ(html)をリロードしなければ上手く再びゲームを始める事が出来ません。 つまり、一回目にゲームを再生した時に使った変数をクリアにしないともう一度やる事ができないんです。何かこの状態を解決する方法はないでしょうか?説明不足な点があるかもしれませんが、よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • cgiでポーリングして取得したデータが変化していた時のみHTMLをリロードする方法

    Perlのカテゴリで質問したところ(質問番号:5634620)、JavaScriptで実現 できるかもしれないとのアドバイスを頂いたので、こちらで質問します。 次のことをするcgiを作りたいのですが  1. cgiを起動したらある装置からデータを読み込んできて配列及びファイルに   書き込み、その内容を表(HTML)に表示。(即時)  2. 5秒ごとに装置に対してデータを読みに行き(ポーリング)、変化があったら   (セーブしてあるデータと読みに行ったデータに違いがあったら)表(HTML)を    リロードして新しいデータの内容を表示する。 perlのカテゴリで下記のようなアドバイスを頂きましたが、 Javascriptは全くわからず、お手上げ状態です。 >Ajaxを使えばできそうな気がします。 >setInterval(checkData,5000); >として5秒毎に、checkData関数を呼び出します。 >checkData関数内では、Ajaxを使ってサーバーのデータを読み込み、現在の >データと照合し、更新していれば、 >location.reload(true); >として、リロードさせます。 実際にどの様に記述すれば実現可能か、教えていただけませんでしょうか。 よろしくお願い致します。