こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

HTMLとPHPのデータのやり取りで問題発生

HTMLサイドで<form> のsubmit ボタンで、あるデータをPHPスクリプトに送った後、PHPサイドの画面(特に何も表示はしないので真っ白)になったまま、HTMLの画面に戻ってくれません。
PHPサイドではHTML側から送ったデータに基づいて、単純な2進2ビットのデータファイルを作るだけで,この部分はちゃんと働いています。HTMLページは表示されたまま、PHPにはバックグラウンドで仕事をしてもらいたいのですが、やり方がよくわかりません。
お知恵を貸していただける方、よろしく教えてください。お願いします。
自分が使っているテストプログラムを載せておきます。

HTMLサイド

<table border="1">
<tr>
<td>
<form method="get" action="attenuate.php">
<input type="submit" value="1:1">
<input type="hidden" value="01" name="select">
</form>
</td>
<td>
<form method="get" action="attenuate.php">
<input type="submit" value="2:1">
<input type="hidden" value="10" name="select">
</form>
</td>
<td>
<form method="get" action="attenuate.php">
<input type="submit" value="5:1">
<input type="hidden" value="11" name="select">
</form>
</td>
<td>
<form method="get" action="attenuate.php">
<input type="submit" value="Amplify">
<input type="hidden" value="00" name="select">
</form>
</td>
</tr>
</table>

PHPサイド  file: attenuate.php

<html>
<head></head>
<body>

<?php
$fp=fopen("attenuation.txt","w");
switch($_GET['select'])
{
case '00': fwrite($fp,"00");break;
case '00': fwrite($fp,"01");break;
case '00': fwrite($fp,"10");break;
case '00': fwrite($fp,"11");break;
}
fclose($fp);
?>
</body>
</html>

投稿日時 - 2012-11-23 13:55:48

QNo.7811800

すぐに回答ほしいです

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

フォームをどう記録したいのかよくわかりませんが、以下簡単なajaxサンプルです

<table border="1">
<tr>
<td>
<form method="get" action="attenuate.php">
<input type="button" value="submit" onclick="ajaxFn('1:1')">
<input type="hidden" value="01" name="1:1">
</form>
</td>
<td>
<form method="get" action="attenuate.php">
<input type="button" value="submit" onclick="ajaxFn('2:1')">
<input type="hidden" value="10" name="2:1">
</form>
</td>
<td>
<form method="get" action="attenuate.php">
<input type="button" value="submit" onclick="ajaxFn('5:1')">
<input type="hidden" value="11" name="5:1">
</form>
</td>
<td>
<form method="get" action="attenuate.php">
<input type="button" value="submit" onclick="ajaxFn('Amplify')">
<input type="hidden" value="00" name="Amplify">
</form>
</td>
</tr>
</table>
<div id="ajaxmessage"></div>
<script language="javascript">
<!--
function ajaxFn(name){
var elm = document.getElementsByName(name)[0];
name = encodeURIComponent(name);
var ajaxval = encodeURIComponent(elm.value);
var xmlHttp;
xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", "attenuate.php?select="+name+"&value="+ajaxval, false);
xmlHttp.send(null);
document.getElementById('ajaxmessage').innerHTML=xmlHttp.responseText;
}
//-->
</script>


↓attenuate.php
<?php
#$_GET['select']と$_GET['value']を受け取っている。

$fp=fopen("attenuation.txt","w");
switch($_GET['select'])
{
case '00': fwrite($fp,"00");break;
case '00': fwrite($fp,"01");break;
case '00': fwrite($fp,"10");break;
case '00': fwrite($fp,"11");break;
}
fclose($fp);
echo "記録されました";
?>

投稿日時 - 2012-11-24 07:55:02

お礼

ご回答有難うございます。
掲載頂いたプログラムリストを自分の状況にあわせて手直して試してみましたら、うまくHTML画面を表示したままPHPでファイルを作ることが出来ました。
ベストアンサーにさせていただきます。

投稿日時 - 2012-11-24 14:07:46

ANo.4

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(4)

ANo.3

Ajaxかiframeformでしょうね

投稿日時 - 2012-11-23 17:59:41

お礼

早速のご回答有難うございます。
iframeform というのはまだ使ったことがありません。
今から研究してみようと思います。

投稿日時 - 2012-11-24 01:08:10

ANo.2

PHPから同じページを吐き出してから作業を行う、というのはダメですか?

投稿日時 - 2012-11-23 15:53:11

お礼

早速のご回答、有難うございます。
サーバーにつながれたオシロスコープからの波形データを、インターネットを経由してリアルタイムでブラウザーの画面に表示するものですが、PHPから同じページを吐き出すというのは、画面が結構込み入っているため、時間がかかりそうな気がします。かくかくがくがくした表示にはしたくないのです。

投稿日時 - 2012-11-24 01:06:25

フォームを送信してしまったらそうなります。フォームの送信を禁止し、JavaScriptのスクリプトを使って、フォームの内容をサーバーにAjax通信で送信し、受信結果を表示するようにします。JavaScriptやAjaxはわかりますか? そのへんについて勉強してみてください。

参考ページ
http://libro.tuyano.com/index3?id=50003

投稿日時 - 2012-11-23 14:06:36

お礼

早速のご回答、ありがとうございます。
これは学校のプロジェクトの一部としてやっているものですが、オシロスコープのプローブから入力されたアナログ波形をデジタル変換してサーバーのメモリに格納し、それをAjaxで取得してブラウザー画面に表示するプログラムです。
クライアント側はもちろんJavaScriptを使っています。
問題の部分は、ユーザーがブラウザーの画面から選択した減衰率によってオシロスコープ側のスイッチを切り替えるためのもので、その選択に応じた数値を表すファイルをサーバーに作り、サーバー側ではCを使ってマイクロコントローラー(Raspberry PI)でその数値を読み取るプログラムにしてあります。
submit ボタンではなく普通のボタンにして、JavaScript でdocument.forms["f1"].submit() も試してみましたが結果は同じでした。

今までも何度かAjaxを使ってきましたが、サーバーにデータを送るのに使ったことはありませんでした。
できればそのあたりをもう少し詳しく教えていただけないでしょうか?
よろしくお願いします。

投稿日時 - 2012-11-24 01:00:41

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-