phpの勉強をしています。HTMLフォームの情報をPOSTメソッドで送信した後に、

phpのURLにジャンプすることなく元のHTML(test.html)で表示させたいと思っています。

JavaScriptで言うと
「document.settei.Mes.value」でフォームに表示させる方法と、
「p = document.getElementById('ppp')」のID箇所に表示させる、
2通りの方法をphpでも知りたいと思っています。よろしくお願いします。

■test.html
<html>
<head><title>test</title></head>
<body>
入力フォーム。
<form action="test.php" method="post" name="settei">
<input type="text" name="year" value="2009" size="4">年
<input type="text" name="month" size="2">月
<input type="text" name="day" size="2">日
<input type="submit" value="入力"><br>
<input type="text" size="40" name="Mes">
<p id="ppp"><p>
</body>
</html>

■test.php
<?php

$year = $_POST['year'];
$month = $_POST['month'];
$day = $_POST['day'];

echo date("2日後はY/m/d",strtotime("+2 day" ,strtotime("$year/$month/$day")));

?>

回答の条件
  • 1人3回まで
  • 登録:2009/03/21 16:57:24
  • 終了:2009/03/24 20:21:53

ベストアンサー

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/03/21 17:51:16

ポイント100pt

方法は2つあります。


1.Ajaxを用いる方法

PHPはサーバサイドスクリプトですから、すでにクライアントに表示されているHTMLの内容を変えることはできません。

そこで、クライアントサイドスクリプトである JavaScript からPHPを呼び出し、その結果を JavaScript 側に戻す Ajax を組む必要があります。

その方法は「PHP+Ajaxで作るスマート・クライアント 」を参考にしてください。


2.HTMLでPHPを実行する方法

やや邪道ですが、HTMLファイルもPHPの実行対象になるよう Webサーバを設定しておき、以下のファイルを HTML として保存するものです。

このスクリプトは自分自身を呼び出すので画面遷移は起きているのですが、ブラウザ上ではほとんど分からないと思います。

<?php
$MySelf = basename($_SERVER['SCRIPT_NAME']);

$year  = isset($_POST['year'])  ? $_POST['year']  : '';
$month = isset($_POST['month']) ? $_POST['month'] : '';
$day   = isset($_POST['day'])   ? $_POST['day']   : '';
$Mes   = isset($_POST['exec'])  ? date("2日後はY/m/d", strtotime("+2 day", strtotime("$year/$month/$day"))) : '';

echo <<< EOF
<html>
<head><title>test</title></head>
<body>
入力フォーム。
<form action="$MySelf" method="post" name="settei">
<input type="text" name="year" value="2009" size="4" value="$year" />年
<input type="text" name="month" size="2" value="$month" />月
<input type="text" name="day" size="2" value="$day" />日
<input type="submit" name="exec" value="入力" /><br>
<input type="text" size="40" name="Mes" value="$Mes" />
<p id="ppp"><p>
</body>
</html>

EOF;
?>
id:tontonpokopoko

pahooさま、早速の回答をありがとうございます。

とても参考になります。

>HTMLファイルもPHPの実行対象に・・

というのは「htaccess」を使っていく方法でしょうか。

ページが再読み込みされるのなら、

PHPページでHTMLと同様のものを作ったほうが簡単かもしれませんが、

結果を統一したくない場合は使える手段だと感じます。

が、やはり「Ajax」を取り入れることが最善なのでしょうね。

ただJavaScriptが使えない環境(モバイルなど)では、

いずれにせよ画面遷移が必要ということですね?

とても参考になりました、ありがとうございます!

2009/03/21 19:07:22

その他の回答(3件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/03/21 17:51:16ここでベストアンサー

ポイント100pt

方法は2つあります。


1.Ajaxを用いる方法

PHPはサーバサイドスクリプトですから、すでにクライアントに表示されているHTMLの内容を変えることはできません。

そこで、クライアントサイドスクリプトである JavaScript からPHPを呼び出し、その結果を JavaScript 側に戻す Ajax を組む必要があります。

その方法は「PHP+Ajaxで作るスマート・クライアント 」を参考にしてください。


2.HTMLでPHPを実行する方法

やや邪道ですが、HTMLファイルもPHPの実行対象になるよう Webサーバを設定しておき、以下のファイルを HTML として保存するものです。

このスクリプトは自分自身を呼び出すので画面遷移は起きているのですが、ブラウザ上ではほとんど分からないと思います。

<?php
$MySelf = basename($_SERVER['SCRIPT_NAME']);

$year  = isset($_POST['year'])  ? $_POST['year']  : '';
$month = isset($_POST['month']) ? $_POST['month'] : '';
$day   = isset($_POST['day'])   ? $_POST['day']   : '';
$Mes   = isset($_POST['exec'])  ? date("2日後はY/m/d", strtotime("+2 day", strtotime("$year/$month/$day"))) : '';

echo <<< EOF
<html>
<head><title>test</title></head>
<body>
入力フォーム。
<form action="$MySelf" method="post" name="settei">
<input type="text" name="year" value="2009" size="4" value="$year" />年
<input type="text" name="month" size="2" value="$month" />月
<input type="text" name="day" size="2" value="$day" />日
<input type="submit" name="exec" value="入力" /><br>
<input type="text" size="40" name="Mes" value="$Mes" />
<p id="ppp"><p>
</body>
</html>

EOF;
?>
id:tontonpokopoko

pahooさま、早速の回答をありがとうございます。

とても参考になります。

>HTMLファイルもPHPの実行対象に・・

というのは「htaccess」を使っていく方法でしょうか。

ページが再読み込みされるのなら、

PHPページでHTMLと同様のものを作ったほうが簡単かもしれませんが、

結果を統一したくない場合は使える手段だと感じます。

が、やはり「Ajax」を取り入れることが最善なのでしょうね。

ただJavaScriptが使えない環境(モバイルなど)では、

いずれにせよ画面遷移が必要ということですね?

とても参考になりました、ありがとうございます!

2009/03/21 19:07:22
id:kenz-firespeed No.2

Kenz回答回数104ベストアンサー獲得回数32009/03/21 19:31:59

ポイント40pt

画面遷移を行いたくないだけなら、

そもそも、pahooさんのファイルをtest.phpと言う名前で保存して、最初からtest.phpにアクセスさせれば良いかと

id:tontonpokopoko

回答をありがとうございます。

現在ある複数のHTMLページの1部分に、

同様のスクリプトを一斉に取り入れたいと考えている次第です。

しかし新規で作成するときにはごもっとものことです。

今後ページを作成するときには、参考にさせていただきます。

2009/03/22 02:30:21
id:hijk05 No.3

hijk05回答回数1307ベストアンサー獲得回数232009/03/21 21:03:22

ポイント30pt

>ただJavaScriptが使えない環境(モバイルなど)では、

Flashを使ってPOSTを投げる方法もあります。

id:tontonpokopoko

回答をありがとうございます。

今後のために、もしお時間があれば詳細に教えていただけると幸いです。

よろしくお願いします。

2009/03/22 02:28:15
id:esecua No.4

esecua回答回数510ベストアンサー獲得回数102009/03/22 12:16:46

ポイント100pt

Smartyを使う。

これに限ります。

テンプレートは以下のような感じで


{if $data !== ""}
{$data.post.year}
{$data.post.month}
....
{else}
入力フォーム。
<form action="test.php" method="post" name="settei">
<input type="text" name="year" value="2009" size="4">年
<input type="text" name="month" size="2">月
<input type="text" name="day" size="2">日
<input type="submit" value="入力">
<input type="text" size="40" name="Mes">

{/if}

php側は

$smarty->assign('data', $_POST);

な感じです。

Ajax以外であればどうぞ。

id:tontonpokopoko

esecuaさま、回答をありがとうございます。

Smartyはとても魅力的に感じますが、

まだPHPやJavaScriptの基礎段階を勉強中で手が出せないようです。

しかしいずれ知識をつけたときに、また読み返させていただきます。

参考になるコメントをありがとうございました。

2009/03/22 16:08:51
  • id:pahoo
    > >HTMLファイルもPHPの実行対象に・・
    > というのは「htaccess」を使っていく方法でしょうか。

    Apache をご利用であれば、そういうことになります。


    > が、やはり「Ajax」を取り入れることが最善なのでしょうね。

    それが最善策だと思います。

    >ただJavaScriptが使えない環境(モバイルなど)では、
    >いずれにせよ画面遷移が必要ということですね?

    その通りです。
  • id:tontonpokopoko
    pahooさま、コメントをありがとうございます。
    当方にレベルに合わせたご返答をいただき感謝です。
    今後もちょくちょく利用させていただきますが、またよろしくお願いします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません