- ベストアンサー
同一ページへのコメントの追加
Webページに簡単なコメント欄を追加したいと思っています。 フォームの内容をpostでPHPに渡す方法でファイルに書き込んで 同じページに表示したいのですがページがphpに遷移してしまいます。 具体的にはindex.htmlにフォームを設けて、submitすると そのコメントをファイルに出力し、 その内容をphpで編集して結果をindex.html上に表示したいと思っています。 <form action="index.php" method="post"> という渡し方自体が行けない気がしているのですが方法がわからず 教えていただけないでしょうか。 php, javascript(prototype)でできるとありがたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
方法としては、 一度画面をindex.phpに遷移させるけど、その後リダイレクト処理を行って、もとに戻ってくる、という方法でいかがでしょうか。 <form action="index.php?page={そのコメント欄入力ページのファイル名}" method="POST"> とでもして、{そのコメント欄入力ページのファイル名}が例えばindex.html だった場合、[index.php?page=index.html]とするとして、 -------index.php---------- <?php define('SITE_URL', 'http://example.com'); //そのコメント入力処理(データベースとかCSVファイルとか) //その後に、以下を記述 if(isset($_GET['page'])){ if(preg_match('/^[a-z0-9_-]+\.html$/i', $_GET['page'])){ header('Location: '.SITE_URL.'/'.$_GET['page']); exit(); } } ?> つまりindex.php内の最後に、元の場所に戻すためのHTTPヘッダを入れてやればよいということです。 これでは一度ページがリロードしてかっこ悪いという場合は、javascriptでAjaxといったところになると思いますが、そちらに関しては詳しくはJavascriptのカテゴリのほうで聞いてみたほうが良いと思います。
その他の回答 (3)
- seimurakam
- ベストアンサー率61% (21/34)
> 説明足らずで申し訳ないです。 > 画面遷移はないほうがBetterですがしたとしても最後の拡張子を > htmlにしたいと思っています。 上記の件について、再度投稿させていただきます。 拡張子「.index」でもPHPスクリプトを実行できる環境であれば、 以下の方法で実現可能です。 [index.html] -------------------------------------------------------- <?php if (intval($_POST['submit']) == "送信") { //$_POST['comment']の値でファイル加工処理 } require_once('index.html'); ?> <html> <head>~割愛~</head> <body> <form action="index.html" method="post"> <input type="text" name="comment" value="" /> <input type="hidden" name="execFlg" value="1"> <input type="submit" value="送信" /> </form> </body> -------------------------------------------------------- これですべての希望を満たせると思います。 .htmlでPHPスクリプトを実行する方法については php.iniや.htaccessの設定で可能ですので 一度調べてみるとよいのでは?
お礼
ありがとうございます。 おっしゃるとおりphpのコードを埋め込み自身にsubmitすれば 動作できますね。 ありがとうございます。
- seimurakam
- ベストアンサー率61% (21/34)
こんな方法はいかがでしょうか? 遷移後の拡張子が.phpとなってしまうのですが、 表示される内容はindex.htmlのものとなります。 [index.php] <?php if (intval($_POST['execFlg']) == 1) { //$_POST['comment']の値でファイル加工処理 } require_once('index.html'); ?> [index.html] <html> <head>~割愛~</head> <body> <form action="index.php" method="post"> <input type="text" name="comment" value="" /> <input type="hidden" name="execFlg" value="1"> <input type="submit" value="送信" /> </form> </body> 実現したいことをもう少し詳細に書いていただけると さらにアドバイスできると思います!
お礼
ありがとうございます。 説明足らずで申し訳ないです。 画面遷移はないほうがBetterですがしたとしても最後の拡張子を htmlにしたいと思っています。 理由は見た目としてhtmlがなんとなくいい、、という非常に本質的ではない理由です・・・ 少なくとも拡張子をphpにすればできそうだということはわかりました。 ありがとうございます。
- aegills
- ベストアンサー率70% (7/10)
まず、phpに遷移している原因は、formのaction要素です。 index.phpを指定しているので、index.phpが呼び出されています。 index.htmlを指定すればindex.htmlへ遷移します。 さて、コメント欄の実装はいくつか方法があります。 1. prototypeのAjaxとPHPを使う a. formのactionをAjax.Requestへ指定しPHP呼び出し。(作動は同期で) b. PHPにてコメント用ファイルを作成。 c. Ajax.Updaterを実行しページへ反映。 [参考] 書き込み:http://www.openspc2.org/JavaScript/Ajax/ref/prototype.js/ver1.6.0/ref/Ajax/Request/index.html 読み込み:http://www.openspc2.org/JavaScript/Ajax/ref/prototype.js/ver1.6.0/ref/Ajax/Updater/index.html 2. PHPを使う a. formのactionを書き込み用PHPファイルへ指定。 b. phpにてコメントをindex.htmlへ書き込み。 c. header関数でindex.htmlへリダイレクト。 1番はprototype.jsとPHP+XMLもしくはPHP+JSONの知識が必要となります。 2番はPHPでindex.htmlを書き換えるだけでOKです。 簡単に実装したいなら2番を使うといいかと思います。
お礼
やはりactionでphpへ移行しているので phpに移るのは当然ですよね。 くだらない点かもしれませんが 表示URLがhtmlにしたいというのが目的となります。 いただいた情報からAjax.Updaterでphpを呼び出しフォームの情報を渡せれば 比較的簡単に実装できそうかなと思いました。
お礼
ありがとうございます。 ユーザから見て1秒とせずにindex.htmlにコメントが反映されるので あればこの方法でもOKだと感じました。 実際遷移の体感がわからないので試して見ます。 ありがとうございました