出産前後の痔にはご注意!

CGIの掲示板のCGI管理者ページの仕様を変更したいのですが(投稿した内容をまず確認し、実際ページに反映させる「許可」「不許可」を決定し、許可されたコメントに返信をつけるページです)、「許可」「不許可」を設定した際、その対象のスレッドの位置から遷移しないようにしたいのですが、フォームのactionで設定したページにリロードされてしまい、「許可「不許可」を編集した位置と違う位置になるので使いづらく困っています。actionで設定したCGIに値だけ送信して、現在編集している位置から移動させず「許可」「不許可」の反映を確認できるようにしたいのですが、そのような設定のためにはどのようなスクリプトがひつようなのでしょうか。

A 回答 (3件)

 えーと。


 </BODY> タグの直前に、

<iframe name="f1" width=0 height=0 style="visibility:hidden"></iframe>

 というタグを置きます。

 で次に、当該の <FORM> タグのオプションの1つとして、target="f1" と追加します。
 具体的にいうとこんな感じ。

<FORM ACTION="...." TARGET="f1">

 どうでしょ?
    • good
    • 4
この回答へのお礼

すごい!できました!
ありがとうございます!!

実際に反映させるにはリロードを押す必要がありますが(「不許可」を選ぶとそのボタンが「許可」というボタンに書き換わるようになっているので)、何の移動もなくできました。
これはどういった意味のものなのですか?

お礼日時:2004/10/19 18:24

すみません、なにをなさりたいのかがいまひとつわかりません・・・。



CGIは配布されているものですか?
またはyuriwolfさんがお作りになられたものですか?

現状では許可・不許可を決定するボタンかなにかが対象スレッドの近くにあるということでしょうか・・・?

とりあえず、決定ボタンのFORMのターゲットに「_blank」を指定すれば、新しい画面において画面遷移して元画面はそのままにすることは出来ますが・・・。

プログラム的に行うのであれば、許可処理が終わってからスレッド画面に飛ばすか、スレッドを表示するサブルーチン等に移行させるなりをすれば十分に可能だとは思いますが。
    • good
    • 1
この回答へのお礼

本当に説明がわかりづらくてすみません!!

CGIは基本的に配布されたものです。先任者が設置したものですが、仕様に関してより使いやすくするためテコ入れをしているところなのです。

対象スレッドという言い方が悪いのかと思うのですが、管理者CGIの中にある投稿一覧のことです。

掲示板への全投稿データが並んでおり、各投稿内容に投稿「許可」「不許可」を決定するボタンが1つづつ配置されております。
そして、管理者CGIは20投稿ごとにページを分けるように設定されていて(CGI内ですので、実際に複数ページが存在するわけではないのですが)、困っているのは、1ページ目の20件の投稿より前の投稿=2ページ目以降にある投稿で「許可」or「不許可」のボタンを押すと、CGIごとリロードされてしまい、1ページ目(実際にアドレスでCGIファイルを表示した際出てくるページ)に戻ってしまいます。
そうすると2ページ目以降の「許可」「不許可」を決定した部位を即時確認したり、その投稿前後の投稿に「許可」「不許可」を決定しようとするのに面倒があるというわけです。
私がこの管理者でしたらそこまで気にはならないのですが、他者にやっていただいていますので。。

CGI初心者には無理があるとは思うのですが、シンプルに解決できる手段があれば・・・とご相談した次第です。

お礼日時:2004/10/19 18:14

 不可視の <IFRAME> を作って、そのフレームをターゲットに指定する方法は駄目ですか?

    • good
    • 0
この回答へのお礼

申し訳ありません!ほとんど初心者なもので、カスタマイズレベルなのですが、ご回答の内容が今ひとつ分かりません。
私の質問内容が分かりにくいせいではございますが、もう少しご案内いただけないでしょうか。

近いイメージとしましては、アンケートフォームなどで、1問目などで県名を選択すると、選択した直後、その直下に選択した県内の地名が現れる…と言う様な、即時的な反映が実践できればと思っております。
ただ、もしかするとその方法は一瞬で別ページに飛ばしているのかなぁとも思うのですが。
説明不足で申し訳ございません!!

お礼日時:2004/10/19 17:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QプルダウンメニューでValue値をPHPへの受け渡しができません

こんばんは。

HTML(apache)+MySQL+PHPの連携で、プルダウンメニュ
ー2つとテキストボックス2つの入力内容をPHPにデー
タとして渡し、それをキーワードにして、データベー
スの検索をする、という処理をさせようと思い、PHP
にデータを渡すためのタグを書いています。

http://ns1.php.gr.jp/pipermail/php-users/2002-December/012011.html

を参考に、テキストボックス2つの内容をPHPに渡すこ
とはできたのですが($_POST関数で渡しています)、
プルダウンメニューで選択した場合のvalue値を、PHP
に渡す処理ができず、行き詰っています。

http://www.big.or.jp/~mio/ga/ht/htref/ht_ref_optio.htm

で、プルダウンメニューで選択した場合のvalue値を
渡すことは可能と思い、タグを書きましたが、PHPで
データをダンプさせると何も表示されませんでした。
つまりはPHPにはデータが渡されていない状態で、HTM
Lタグレベルでの問題という事が分かり、タグの勉強
もしましたが、option部分の記述は間違っていないの
では?、と思っています。

ではform actionの、データを送信する送信ボタンの
記述で足りないところがあるのでは、と思い、調べた
のですが解決方法が見つかりません。
どなたかご教授いただけましたら幸いです‥
宜しくお願い申し上げます。

クライアント環境はWin2000、IE6.0
サーバーはRedHat9.0でPHPは4.2.2です。

こんばんは。

HTML(apache)+MySQL+PHPの連携で、プルダウンメニュ
ー2つとテキストボックス2つの入力内容をPHPにデー
タとして渡し、それをキーワードにして、データベー
スの検索をする、という処理をさせようと思い、PHP
にデータを渡すためのタグを書いています。

http://ns1.php.gr.jp/pipermail/php-users/2002-December/012011.html

を参考に、テキストボックス2つの内容をPHPに渡すこ
とはできたのですが($_POST関数で渡しています)、
プルダウンメニューで選択した場合のvalue値を、PHP
...続きを読む

Aベストアンサー

この場合、
<form> タグの位置を変えるだけで動作します。
<select>タグの前に移動させてください。
PHP4.0.6で動作確認済みです。
JavaScript使うまでもなかったですね。失礼しました。
=== 以下ソース ===

<html>
<body>
<form action="yamaha0.php" method="post"> <!-- ここに移動 -->

<br>分類<br>
<select name="clasfct" size="3">
<option value="1">新機能</option>
<option value="2">仕様変更</option>
<option value="3">バグ修正</option>
</select>

<p>

Rev<br>
<select name="rev" size="3">
<option value="1">ver 8.01.15</option>
<option value="2">ver 7.01.34</option>
<option value="3">ver 7.00.29</option>
</select>
<br>

キーワード1を入力してください(必須):<input type="text" name="key1"><br>
<p>
キーワード2を入力してください(任意):<input type="text" name="key2"><br>
<p><input type="submit" name="exec" value="検索">
</form>
</body>
</html>

この場合、
<form> タグの位置を変えるだけで動作します。
<select>タグの前に移動させてください。
PHP4.0.6で動作確認済みです。
JavaScript使うまでもなかったですね。失礼しました。
=== 以下ソース ===

<html>
<body>
<form action="yamaha0.php" method="post"> <!-- ここに移動 -->

<br>分類<br>
<select name="clasfct" size="3">
<option value="1">新機能</option>
<option value="2">仕様変更</option>
<option value="3">バグ修正</option>
</select>

<p>

Rev<br>
<...続きを読む

Q連動させたいセレクトボックスについて。

こんにちは。DB+PHPが初心者のものです。
前にもここで質問させていただきましたが、
自分なりにコードを書いてみたので
コードの訂正、ご教授をよろしくお願いいたします。

セレクトボックス1には、[table 1]の、種類が入り
れレクトボックス2には、[table 1]の種類に連動して、[table 2]の名前が選択できるようにする。

下記のようにソースを書いてみましたが、
table1の値は、セレクトボックスでちゃんと表示されますが、table2はセレクトボックスは表示されるものの、何も値がありません(T_T)

動きとしては、table1のセレクトボックスで選択したら、その項目をDBへ問い合わせ、その項目に対応した、DBに登録されているtable2の値を二つ目のセレクトボックスに表示させたいです。

<html>
<body>

<select name="mkoumoku">
<option selected>-------------</option>

<?php
//DB接続
$dbcon=mysql_connect("localhost","abcd","defg");
//DB選択
mysql_select_db("zozozo");

//table1を取得
$res=mysql_query("select distinct * from table1");
while ($rows=mysql_fetch_array($res)) {
echo "<option value=\"".$rows['id']."\">".$rows['kind']."\n";
}
echo "</select>";
?>

<select name="skoumoku">
<option selected>-------------</option>
<?
//table1に連動して項目を変えたいところのコード
$res1=mysql_query("select * from table2 where key =$_POST[mkoumoku] order by id");
while ($rows=mysql_fetch_array($res1)) {
echo "<option value=\"".$rows['id']."\">".$rows['name']."\n";
}

//Dbクローズ
mysql_close($dbcon);

?>
</body>
</html>

こんにちは。DB+PHPが初心者のものです。
前にもここで質問させていただきましたが、
自分なりにコードを書いてみたので
コードの訂正、ご教授をよろしくお願いいたします。

セレクトボックス1には、[table 1]の、種類が入り
れレクトボックス2には、[table 1]の種類に連動して、[table 2]の名前が選択できるようにする。

下記のようにソースを書いてみましたが、
table1の値は、セレクトボックスでちゃんと表示されますが、table2はセレクトボックスは表示されるものの、何も値がありません(T_T)

...続きを読む

Aベストアンサー

#5です。

> <form method="post" action="a.php">
> がありますが、この中の「action=」で指定される
> ファイルは、もう一回自分自身を呼び出すため?コード> と同じものでよいのでしょうか?

そうです。まずは1つ目のコンボは何を選ばれたかを自分自身
にページ遷移して$_POSTで受け取り、2つ目のコンボの内容を
決定しています。

>「登録ボタン」を押してDBへ登録するようにしたいので><input type="submit" value="登録">

OnChangeなどの部分で「submit()」ってするとページ遷移するっぽいです^^;
JavaScriptとして動作しているのかどうか知りませんが、
そのままform送信処理するようです。
初めて知りました(笑)
以下のコードでは上記内容にも対応する為、変更しています。
ついでなので、ミスやら面倒な記述をしていたのを変えました。

あと、MySQLはテーブル名、項目は大文字・小文字を区別して記述しないとダメですよ。

登録は2つ目のコンボが選択されなければ動作しません。

<?php
//DB接続
$dbcon=mysql_connect("localhost","abcd","defg");
//DB選択
mysql_select_db("zozozo");

if (isset($_POST['skoumoku']) And $_POST['skoumoku'] <> "none") {
//登録処理
regist();
exit;
}
?>
<html>
<body>
<form method="post" name="frm" action="a.php">
<select name="mkoumoku" onChange="submit()">

<?php
$slctd = ((!isset($_POST['mkoumoku']) Or $_POST['mkoumoku'] == "none")?" selected":"");
echo '<option value="none"'.$slctd.'>-------------</option>'."\n";

//table1を取得
$res=mysql_query("select distinct * from table1");
while ($rows=mysql_fetch_array($res)) {
$slctd = (($_POST['mkoumoku'] == $rows['id'])?" selected":"");
echo '<option value="'.$rows['id'].'"'.$slctd.'>'.$rows['kind'].'</option>'."\n";
}
echo "</select>";
?>

<select name="skoumoku">
<option value="none" selected>-------------</option>
<?php
//table1に連動して項目を変えたいところのコード
$res1=mysql_query("select * from table2 where table2.key='{$_POST['mkoumoku']}' order by id");
while ($rows=mysql_fetch_array($res1)) {
echo '<option value="'.$rows['id'].'">'.$rows['name'].'</option>'."\n";
}
echo "</select>";

//Dbクローズ
mysql_close($dbcon);

?>
<input type="submit" value="登録">
</form>
</body>
</html>
<?php
function regist() {
//登録処理
print <<< registed
<html>
<head>
<title>.....</title>
</head>
<body>
登録完了<br>
<p>
<a href="a.php">戻る</a>
</body>
</html>
registed;
}
?>

あと、思い通りの動作や表示がされなかった場合、
その状態のソースを見る事で原因がわかる場合もありますので、
状態が表示されている時に、ブラウザからソースの表示を行ってみて下さい。

#5です。

> <form method="post" action="a.php">
> がありますが、この中の「action=」で指定される
> ファイルは、もう一回自分自身を呼び出すため?コード> と同じものでよいのでしょうか?

そうです。まずは1つ目のコンボは何を選ばれたかを自分自身
にページ遷移して$_POSTで受け取り、2つ目のコンボの内容を
決定しています。

>「登録ボタン」を押してDBへ登録するようにしたいので><input type="submit" value="登録">

OnChangeなどの部分で「submit()」ってするとページ遷移するっぽい...続きを読む

QPHP ボタンが押されたら処理を実行する

PHPプログラミングをしています。
「はい」というボタンが押されたらこの処理を行い、
「いいえ」というボタンが押されたらこの処理を行う
ということはどうすれば実装できるのでしょうか?

Aベストアンサー

どういう環境下で作っておられるのかが全然わかりませんが、
PHPというこですので、Webベースのフォームですよね。

たとえば、「はい」ボタンと「いいえ」ボタンをそれぞれフォームのSubmitにしておいて、
POST先のフォームで処理を分ければどうでしょうか。

送信元
<form name="Hai" method="POST" action="hoge.php">
<input type="hidden" name="answer" value="1">
<input type="submit" value="はい">
</form>

<form name="Hai" method="POST" action="hoge.php">
<input type="hidden" name="answer" value="0">
<input type="submit" value="いいえ">
</form>


送信先
$answer = $_POST["answer"];

if($answer == 1){
// 「はい」の時の処理
}else{
// 「いいえ」の時の処理
}


ちなみに、自分から自分へPOSTすればPHPスクリプトも2つに分けずにできると思います。
また、POSTじゃなくGETでも同様のことはできると思います。

どういう環境下で作っておられるのかが全然わかりませんが、
PHPというこですので、Webベースのフォームですよね。

たとえば、「はい」ボタンと「いいえ」ボタンをそれぞれフォームのSubmitにしておいて、
POST先のフォームで処理を分ければどうでしょうか。

送信元
<form name="Hai" method="POST" action="hoge.php">
<input type="hidden" name="answer" value="1">
<input type="submit" value="はい">
</form>

<form name="Hai" method="POST" action="hoge.php">
<input type="hidden" name="answer" ...続きを読む

QonClickに複数の関数を挿入する方法

初心者なのですがアニメーションの関数anime1、anime2、anime3を作成し、onClickに下記のように設定しました。
クリックするとアニメーション2つの設定ではは動くのですが、3つ目を設定すると動かなくなります。
通常はこのような設定はしないものなのでしょうか?
教えてください。
よろしくお願いします。
<INPUT type="button" value="START" onClick="anime1(), anime2()">・・・OKです。
<INPUT type="button" value="START" onClick="anime1(), anime2(),anime3()">・・・動きません。

Aベストアンサー

セミコロンでつなぐのが常道ですが、3つ以上なら
別途function化したほうが、可読性が高くなると
思います。

Qプルダウンの値をphpファイルへ渡したい

いつもお世話になっております。

現在、作成中のHPですが、データ取得をphpで行い表示をしています。

(1)a.phpでプルダウンのデータを取得し、b.phpで表示。
(2)b.phpでプルダウンを選択し、その値をtest.phpへ渡す。

(2)で、プルダウンの値を渡す処理がどうしてもうまくできず、
とても困っています。

どこを修正すればよいのかご教授願いたいのですが・・・。
スクリプトは下記の通りです。

-------------------------------------------------------
【b.php】
<html>
<head>
<title>テスト</title>
</head>
<body>

<SCRIPT language="JavaScript">
function testphp(){
try{

with(document.testform){
action="http://test/test.php";
test.value = testform.testselect[testform.testselect.selectedindex].value;
method="POST";
submit();
}
} catch(e) {
alert("エラーは " + e.description + " です。");
}
}
</SCRIPT>

<form name="testform" onchange="testphp()">
<select name="testselect">
<option value="あ">結果1</option>
<option value="い">結果2</option>
<option value="う">結果3</option>
<option value="え">結果4</option>
<option value="お">結果5</option>
</select>
</form>

</body>
</html>

【test.php】
<?php

//変数処理
$a = @$_POST["test"];

print "渡された値:".$a;
exit;

?>
-------------------------------------------------

どうぞ、宜しくお願い致します。

いつもお世話になっております。

現在、作成中のHPですが、データ取得をphpで行い表示をしています。

(1)a.phpでプルダウンのデータを取得し、b.phpで表示。
(2)b.phpでプルダウンを選択し、その値をtest.phpへ渡す。

(2)で、プルダウンの値を渡す処理がどうしてもうまくできず、
とても困っています。

どこを修正すればよいのかご教授願いたいのですが・・・。
スクリプトは下記の通りです。

-------------------------------------------------------
【b.php】
<html>
<head>
<title>テスト</title>
</hea...続きを読む

Aベストアンサー

>Array ( [test] => [testselect] => い )
ですから、testに値が入っていませんね。
$a = @$_POST["test"];
としても、testに値がないので、表示されません。

test.value = testform.testselect[testform.testselect.selectedIndex].value;
はまだ残っているんですよね?
単純に「い」だけを取り出したいなら、testに入れなくても
セレクトボックスの値を取り出せばいいと思うのですが。

【b.php】
<SCRIPT language="JavaScript">
function testphp(){
try{
with(document.testform){
action="http://test/test.php";
method="POST";
submit();
}
} catch(e) {
alert("エラーは " + e.description + " です。");
}
}
</SCRIPT><form name="testform">
<select name="testselect" onchange="testphp()">
<option value="あ">結果1</option>
<option value="い">結果2</option>
<option value="う">結果3</option>
<option value="え">結果4</option>
<option value="お">結果5</option>
</select>
</form>

【test.php】
<?php
//変数処理
$a = $_POST["testselect"];
print "渡された値:".$a;
exit;
?>

>Array ( [test] => [testselect] => い )
ですから、testに値が入っていませんね。
$a = @$_POST["test"];
としても、testに値がないので、表示されません。

test.value = testform.testselect[testform.testselect.selectedIndex].value;
はまだ残っているんですよね?
単純に「い」だけを取り出したいなら、testに入れなくても
セレクトボックスの値を取り出せばいいと思うのですが。

【b.php】
<SCRIPT language="JavaScript">
function testphp(){
try{
with(document.testform){
action="http://test/tes...続きを読む

QPHPで検索ボタンを押さずに検索結果を返したい

初めて質問させていただきます。
今、独学でPHP・MySQL・HTMLを使って、
検索結果を表示する画面を作っています。

作っているプログラムは、こんな感じです。
================================================
xxx.php
================================================
<?php
ここで、入力のエラーチェック
MySQLに接続
入力したコードに対応するデータを取得
?>
<html>
<form action="xxx.php" method="post">
<input type="text">
<select name="XX1"></select>
<select name="XX2"></select>
<input type="submit" name="submit" value="検索">
</html>
================================================

このプログラムでは、テキストタイプの部分にコードを
入力し、selectの部分で各項目を選択して、
最後に検索ボタンを押すと、
エラーチェックをした後に、検索結果のデータを
データベースから取得してHTMLで表示します。

毎回、検索ボタンを押すという動作を減らすため、
SELECTの部分が変わったら、
検索ボタンを押さなくても、上のPHPで記述されて
いる部分の処理に飛ばす方法がないかなあと
思いまして質問しました。

イメージ的にはJavaScriptの、onchangeみたいなものなのですが、何かいい方法は
ないでしょうか?

以前似たような質問があったかもしれませんが、
すみませんがよろしくお願いいたします。

初めて質問させていただきます。
今、独学でPHP・MySQL・HTMLを使って、
検索結果を表示する画面を作っています。

作っているプログラムは、こんな感じです。
================================================
xxx.php
================================================
<?php
ここで、入力のエラーチェック
MySQLに接続
入力したコードに対応するデータを取得
?>
<html>
<form action="xxx.php" method="post">
<input type="text">
<select name="XX1"></select>
<select...続きを読む

Aベストアンサー

XX1,XX2というのは2つのセレクトメニューがあると考えていいのでしょうか?
一応、2つのセレクトメニューがあると想定してタグを書くとこうなります。
(エラーが出るということですが、inputタグに入っているname="submit"の記述が原因です。不要)

<html>
<body>
<form action="xxx.php" method="post">
<input type="text">
<select name="XX1" onChange="javascript:submit()">
<option value="noselect">選択してください</option>
<option value="xx1-1">選択1</option>
<option value="xx1-2">選択2</option>
</select>
<select name="XX2" onChange="javascript:submit()">
<option value="noselect">選択してください</option>
<option value="xx2-1">選択1</option>
<option value="xx2-2">選択2</option>
</select>
<input type="submit" value="検索">
</form>
</body>
</html>

------- xxx.php ---------
<?php
echo $_POST['XX1'];// XX1の選択値
echo $_POST['XX2'];// XX2の選択値
?>

もっともこれだとどちらかのセレクトメニューを操作しただけでPOSTされてしまうので、入力済みの他のフォーム値がリセットされないような工夫が必要だと思います。

XX1,XX2というのは2つのセレクトメニューがあると考えていいのでしょうか?
一応、2つのセレクトメニューがあると想定してタグを書くとこうなります。
(エラーが出るということですが、inputタグに入っているname="submit"の記述が原因です。不要)

<html>
<body>
<form action="xxx.php" method="post">
<input type="text">
<select name="XX1" onChange="javascript:submit()">
<option value="noselect">選択してください</option>
<option value="xx1-1">選択1</option>
<option value="xx1-2"...続きを読む

QHTMLフォームのSELECTの幅を一定にするためには?

HTMLフォームのSELECTの幅を一定にするためにはどのようにすれば
いいのでしょうか?

CSS等で設定できるとありがたいのですが、やり方がわかりません。

Aベストアンサー

<select style="width: 200px">

Qページを遷移せずにデータ送信

はじめまして。こちらのカテゴリに質問投稿するのは初めてです。
投稿カテゴリが適切かどうかさえも不明ですが、お知恵を拝借したく投稿させて頂きます。

表題の通りですが、SNSなどに多く使われている、コメントを投稿する際、ページを遷移することなくフォームのデータを送信し、そのデータをMySQLに登録するとった流れを考えています。

http://shun-ichiro.com/log/reminder/php-jquery-ajax-mysql/

上記サイトは、フォーム上のデータではなく、ボタンを押した際に決まったデータをDB内に登録する者ですが、データ処理という意味での流れは理想に近く、上記サイトでサンプルとして配布されているものをテストしているのですが、このページ上にテキストフォームなどを加えた場合の処理が、お恥ずかしながら一向に見えてこないのが現状です。

上記ページを例にした場合、テキストフォームを設置し、そのデータをDBに登録するための、post.js はどのようなスクリプトとなるのでしょうか?

PHPはこれまで触ってきましたが、Ajax?Javascript?を触るのは初めてといっていい程で、色々と調べながら今日まで来ましたが、適切なキーワードさえも不明で、欲する情報になかなか辿り受けない状況です。(もうかれこれ1週間以上思考錯誤しています・・汗)

お忙しいなか恐縮ですが、アドバイスのほど宜しくお願い致します。

はじめまして。こちらのカテゴリに質問投稿するのは初めてです。
投稿カテゴリが適切かどうかさえも不明ですが、お知恵を拝借したく投稿させて頂きます。

表題の通りですが、SNSなどに多く使われている、コメントを投稿する際、ページを遷移することなくフォームのデータを送信し、そのデータをMySQLに登録するとった流れを考えています。

http://shun-ichiro.com/log/reminder/php-jquery-ajax-mysql/

上記サイトは、フォーム上のデータではなく、ボタンを押した際に決まったデータをDB内に登録する者ですが、...続きを読む

Aベストアンサー

>No.2お礼
>今回の質問時、サンプルとして提示させて頂いたのは、index.html、post.js、post.phpの3つのファイルから構成されていますが、今回ご提示頂いたスクリプトは、index.htmlに全て記述し、post.jsは利用しない。という認識で宜しかったでしょうか?

どちらでもいいです。
作りやすい方法で作ってください。


>それと、テキストフォームにnema属性としてsomethingが与えられていますが、このフォームの値はどのようにして取得したら宜しいのでしょうか?

全部jQueryがやってくれます。

PHPの話であれば、通常の<form>送信と同じです。

QJavascriptからSubmitして画面遷移せずにPHPを実行

やりたいこと{
「Javascript で」フォームに値を入れて、その値をPHPに読みこんでPHPを実行。
ただしPHPで実行するのは サーバー上のファイルに書き込むこと だけなので、ブラウザ上でPHPファイルへと遷移したくない。}

こういう条件でコードを書いていて(formを使わずAjaxでphpに値を渡す方法は難しいので断念)、
formを普通にsubmitしてPHPファイルへと遷移する場合は 正しくサーバー上のファイル書き込みができたのですが、
遷移しない場合のやりかたがうまくいきません。ご教示願います。

↓jsファイル(一部)。 HiscoreSave.phpというのが、ファイルに書き込むPHPファイルです
//hiscoreはあらかじめ定義・代入
var form = document.createElement( 'form' );
document.body.appendChild( form );
var input = document.createElement( 'input' );
input.setAttribute( 'type' , 'hidden' );
input.setAttribute( 'name' , 'name' );
input.setAttribute( 'value' , hiscore);
form.appendChild( input );
// form.setAttribute( 'action' , 'js/HiscoreSave.php' ); //ここをコメントしない時は遷移する
form.setAttribute( 'method' , 'post' );
form.setAttribute( 'onsubmit' ,'NoJump(); return false;');//NoJump()は下記
form.submit();//送信

function NoJump(){
var contact_form_contents = {
sender_name : $(':hidden[name="name"]').val()
};
$.ajax({
type: 'POST',
url: 'js/HiscoreSave.php', // 実行するPHPの相対パス
cache: false,
data: contact_form_contents, // PHPに渡すデータ。
success: function(html) {
//document.body.innerHTML += "<?php require 'js/HiscoreSave.php'; ?>";//有ってもなくても同じ
},
error: function() {
// エラーが返ってきた場合の処理
}
});

}//NoJump()終わり


//ちなみに、↓がHiscoreSave.php(全文)

<?php
$PhpHisc = $_POST['sender_name'];
$f=fopen('../saves/hiscore.txt',"ab+");
if (flock($f, LOCK_SH)){
ftruncate($f, 0);
fwrite($f, $PhpHisc);//書き換える
print($PhpHisc);//デバッグ用
}
else {print('ハイスコア更新書き込み失敗');}//デバッグ用
fclose($f);
?>


Ajaxって何かダウンロード等しなくてもJavascriptのコードに ただ書けば実行できるものなのでしょうか?Ajaxを使ったことがなく、そのへんが調べてもまったくわからなくて…(^_^;)

やりたいこと{
「Javascript で」フォームに値を入れて、その値をPHPに読みこんでPHPを実行。
ただしPHPで実行するのは サーバー上のファイルに書き込むこと だけなので、ブラウザ上でPHPファイルへと遷移したくない。}

こういう条件でコードを書いていて(formを使わずAjaxでphpに値を渡す方法は難しいので断念)、
formを普通にsubmitしてPHPファイルへと遷移する場合は 正しくサーバー上のファイル書き込みができたのですが、
遷移しない場合のやりかたがうまくいきません。ご教示願います。

↓jsファイ...続きを読む

Aベストアンサー

ちなみにライブラリとかつかわなくてもpostで送りっぱなしでよいならこんな感じ

<script>
function createXMLHttpRequest(){
if( window.XMLHttpRequest ){
return new XMLHttpRequest();
}else if( window.ActiveXObject ){
try{
return new ActiveXObject( "Msxml2.XMLHTTP" );
}catch(e){
return new ActiveXObject( "Microsoft.XMLHTTP" );
}
}
return null;
}
function sendPostData( serverURL, param){
var ajax = createXMLHttpRequest();
ajax.open( "POST", serverURL );
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
//「追加」はここ
ajax.send( param );
}
function test(){
var hiscore=100;
sendPostData("HiscoreSave.php","name="+hiscore);
}
</script>
<input type="button" value="test" onclick="test()">

戻り値をつかわないとユーザーが不安になるので「追加」のところに
ajax.onreadystatechange=function(){
if(( ajax.readyState == 4 ) && ( ajax.status == 200 )){
document.getElementById("hoge").innerHTML=ajax.responseText;
}
}
のような記述をしておくと更新されたことがわかってベター

ちなみにライブラリとかつかわなくてもpostで送りっぱなしでよいならこんな感じ

<script>
function createXMLHttpRequest(){
if( window.XMLHttpRequest ){
return new XMLHttpRequest();
}else if( window.ActiveXObject ){
try{
return new ActiveXObject( "Msxml2.XMLHTTP" );
}catch(e){
return new ActiveXObject( "Microsoft.XMLHTTP" );
}
}
return null;
}
function sendPostData( serverURL, param){
var ajax = createXMLHttpRequest();
ajax.open( "POST", serverURL );
ajax...続きを読む

Qonchangeイベントを強制的に発生させる

お世話になります。
onchangeイベントをjavascriptで強制的に動作させたいと思っております。

発生させたい場合
・ユーザーがtextボックスを入力
・リンクボタンを押下した場合

簡単なことなのかもしれませんが、
ご教授よろしくお願いいたします。


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<script type="text/javascript">

function change(){
alert('test');
}

function update(){
document.getElementById('1').value = "update";
document.getElementById('1').onchange = change;
}


</script>

<input id="1" type="text" value="1" onchange="change();">

<a href="javascript:update();">update</a>

お世話になります。
onchangeイベントをjavascriptで強制的に動作させたいと思っております。

発生させたい場合
・ユーザーがtextボックスを入力
・リンクボタンを押下した場合

簡単なことなのかもしれませんが、
ご教授よろしくお願いいたします。


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<script type="text/javascript">

function change(){
alert('test');
}

function update(){
document.getElementById('1').value = "update";
document.getElementById('1').onchan...続きを読む

Aベストアンサー

回答は出てますが・・・onchangeにこだわるなら、

document.getElementById('***').onchange();

()を付ければ呼び出せます。(Windows FireFox2、Opera8で確認)


var f = document.getElementById('***').onchange;
f();

IE6の場合はいったん変数に代入する必要があるようです。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング