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

このQ&Aのポイント
  • HTMLのフォームでデータを送信し、PHPスクリプトが処理すると画面が真っ白になる問題が発生しています。
  • HTMLのフォームから送信されたデータをPHPスクリプトが受け取り、データファイルを作成する処理は正常に動作しています。
  • HTMLの画面は表示したままで、バックグラウンドでPHPが処理する方法がわかりません。助けていただける方、お願いします。
回答を見る
  • ベストアンサー

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>

  • PHP
  • 回答数4
  • ありがとう数4

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

  • ベストアンサー
  • thezen5
  • ベストアンサー率84% (27/32)
回答No.4

フォームをどう記録したいのかよくわかりませんが、以下簡単な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 "記録されました"; ?>

papashiroSooke
質問者

お礼

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

その他の回答 (3)

  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.3

Ajaxかiframeformでしょうね

papashiroSooke
質問者

お礼

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

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.2

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

papashiroSooke
質問者

お礼

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

noname#177743
noname#177743
回答No.1

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

papashiroSooke
質問者

お礼

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

関連するQ&A

  • HTMLとPHP間のデータ受け渡し

    以下のHTMLとPHPが有るとします。 htmlここから↓ <html> <head> </head> <body> <form method="post" action="test.php"> <input name="hdn_exit" type="hidden" value="0" /> <input name="btn_exit" type="submit" value="1" /> <input name="btn_cancel" type="submit" value="2" /> </form> </body> </html> htmlここまで↑ phpここから↓ <?php $hdn_exit=$_POST['hdn_exit'] $btn_exit=$_POST['btn_exit'] $btn_exit=$_POST['btn_cancel'] ?> phpここまで↑ とあった ボタン「btn_exit」押下時に、phpの「$btn_exit=$_POST['btn_cancel'] 」の所で、idxが見つかりませんとエラーが出てしまいます。この場合、 どのようにエラーを回避すればよいのでしょうか?

    • ベストアンサー
    • PHP
  • 送信データの受け取りについて

    ご教授願います。 ページ1からMETHOD="get"で値をSubmitして ページ2で受信したいのですが、 ページのURLバーのアドレスの最後に「?ACT=3」と 記載されているにもかかわらず、 ページ2内での$_get['ACT']で 値を拾えませんし、$ACTも確認できません。 どの様な原因が考えられるのでしょうか。 <環境> IE 7.0.5730.13 PHP 5.2.6 <プログラム> *ページ1 <html> <head> <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"> <script type="text/javascript"><!-- function Cli_Submit(){ ListForm.action = "Test_submit2.php"; ListForm.submit(); } // --></script> </head> <BODY> <FORM NAME="ListForm" METHOD="get"> <TD><INPUT TYPE="text" NAME="ACT"></TD> <TD><INPUT TYPE="button" VALUE="Submit" onClick="Cli_Submit()"> </FORM></BODY></HTML> *ページ2 <html> <head> <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"> <script type="text/javascript"><!-- // --></script> </head> <BODY> <FORM NAME="ListForm" METHOD="post"> <TD><INPUT TYPE="text" NAME="ACT" VALUE="<?php print $_get['ACT'] ?>"></TD> <TD><INPUT TYPE="button" VALUE="Submit" onClick="Cli_Submit()"> </FORM></BODY></HTML>

    • 締切済み
    • PHP
  • フォームについて

    <form action="test.php" method="GET"> <input type="hidden" name="page" value="1"> <input type="submit" value="index"></form> <form action="test.php" method="GET"> <input type="hidden" name="page" value="1"> <input type="submit" value="index"></form> --------------------------------------------- このようにして書くと、どうしてもボタンが縦に並んでしまいます。どのようにすれば横一列に並べる事が出来るでしょうか?

    • ベストアンサー
    • HTML
  • php ハイパーリンクについて

    php ハイパーリンクについて質問ですが、 <form action="<?=$_SERVER["SCRIPT_NAME"] ?>" method="get"> </select> <input type="hidden" name="word" value="<?php print(htmlspecialchars($word, ENT_QUOTES)); ?>"> <input type="hidden" name="ger" value="<?php print(htmlspecialchars($ger, ENT_QUOTES)); ?>"> <select name="sort"> <option value="stand">新着</option> <option value="lowPrice">安い</option> <input type="submit" value="検索"> </select> </form> 上記のform actionと同じ機能をハイパーリンクで表示させるにはどのようにしたらよいのでしょうか?

    • ベストアンサー
    • PHP
  • 【フォーム】PHPで確認画面をだした後にボタンを

    ほぼ初心者のものです 下記のようなフォームをつくりました <form action="regist.php" method="post"> <input type="radio" name="08241" value="A11"/> <input type="radio" name="08241" value="B11"/> <input type="radio" name="08241" value="C11"/> <input type="radio" name="08241" value="D11"/> <input type="radio" name="08241" value="E11"/> <input type="radio" name="08241" value="F11"/> <input type="submit" value="登録する" /> そしてこれらを確認するためにregist.phpを作成し <table width="250" border="1"> <tr> <td width="250">選択したもの</td> </tr> <tr> <td><?php echo $_POST["08241"] ?></td> </tr> <tr> <td>●●●</td> と記載し、選んだものを表示できるようにしました ここからが皆様にお力を借りたいところなのですが フォームから「A11」が選択されて確認画面に「A11」と表示されたとき ●●●のところに下記のような情報を含んだボタンを表示させたいんです <form name="a11" action="/products/detail.php" method="post" > <input type="hidden" name="mode" value="cart" /> <input type="hidden" name="product_id" value="137" /> <input type="hidden" name="product_class_id" value="634" /> <input type="hidden" name="quantity" value="1" /><br /> <input type="submit" value="決定する" onClick="alert('選択しました')" /> </form> このボタン情報はA11~F11まであって、product_idやproduct_class_idは それぞれ異なっています どこかに一覧を作成しておいて form nameで一致したものを表示させるといった やり方なのかなとは思うのですが、その方法がわかりません PHPを使えばいいのかJavascriptがよいのかもあわせ、記述方法などをご教授いただけませんでしょうか? どうかよろしくお願いいたします

    • 締切済み
    • PHP
  • PHP からのファイル書き出しで、 HTMLタグがうまく書き出されない問題について。

    phpを使っていろんな拡張子のファイル(php html txt画代表的) を書き出すソフトを作ったのですが、 目的としては、携帯電話からアクセスしていつでも本を見ながらスクリプトを実験できるということです。 でも、なぜか「<a href="http://*****">クリック</a>」 というようなスクリプトで書き出すと「<a href=\"http://*****\">クリック</a>」 になってしまって困っています。 これは、文字コードが原因なのでしょうか。 どなたか教えてください。 <?php $data = $_POST["data"]; $extension = $_POST["extension"]; $name = "data"; if($data){ $fp = fopen($name. ".". $extension,"w+"); fwrite($fp,$data); fclose($fp); print "書き出し完了"; } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_Jis"> <style type="text/css"> <!-- textarea { width: 600px; height: 10em; } --> </style> </head> <form method="post" action="write.php"> 拡張子<br> <input type="text" name="extension" value="txt"><br/> 内容<br/> <textarea name="data"></textarea><br/><br/> <input type="submit" name="submit" value="送信"> </form>

    • ベストアンサー
    • PHP
  • PHPで求めた変数をHTMLで使う方法

    HTMLのformタグで与えた引数を元に、ある値をPHPで求めた後、その求めた変数をHTMLに戻って使う方法をご教授下さい。 例えば、 index.html ↓↓↓ <form action="submit.php" method="post"> <input type="text" name="xxxxx"> <input type="text" name="yyyyy"> <input tyoe="submit" value="実行"> </form> <textarea name="answer"> 実行後ここに、下のPHPで求めた$zzzzzを表示したい。 </textarea> 上のHTMLでxxxxxとyyyyyを入力して実行ボタンを押します。 そしてPHP側は、 submit.php  ↓↓↓ $zzzzz = $_POST["xxxxx"] . "は、" . $_POST["yyyyy"] . "です。"; このように求めた$zzzzzを上のHTMLに戻って表示したいのですが、しばらく調べてみても見つかりませんでした。 どなたかご教授下さい、お願いします。

  • 複数のデータを1度にsubmitするには?

    HTML初心者です。 下記の様にして、1つのsbmitで複数のデータを送りたいのですが、 後のデータ1つしか送れません。どうすればできるかお教え下さい。 *あくまで1つのsbmitボタンで同じnameの複数のデータを送りたいのですが。 ------------------------------------------------ <form method="get" action="xxx.cgi"> <input type="submit" name="leave" value="退室"> <input type="hidden" name="asyuku" value="101"> <input type="hidden" name="asyuku" value="102"> </form> ------------------------------------------------ よろしくお願いします。

  • ボタン別でフォームの送信先を変えたい

    同じ場所に3つある今のフォームを1つにまとめたいのですが、 「ラジオボタン」でやるのではなく「submitボタン」によって送信先の振り分けはできないのでしょうか? CGIなどを使って一旦クッションを置くのは問題ないです。何か参考になるサイトさんとかありましたら教えてください。 <form action="1.php" method="get" class="form" target="a" name="1"> <input type="hidden" name="s" value=90 /> <input type="hidden" name="t" value="e" /> <input type="text" name="moji" value="" size="8" /> <input type="submit" name="button" value="検索" /> </form> <form action="http://e.php" method="get" name="2" target="a"> <input type="hidden" name="test" value=et /> <input type="text" name="77" value="" size="8" /> <input type="submit" value="検索2" class="button" /> </form> <form action="http://8.cgi" method="get" target="a"> <input type="text" size="8" name="q" value="" /> <input type="submit" value="検索3" class="button" /> <input type="hidden" name="sut" value="JJ" /> </form>

    • ベストアンサー
    • CGI
  • Formを使ったPHP間での受け渡しについて

    いつもお世話になっています。 PHP間での変数の受け渡しで・・ <form action="<?= test.php ?>" method="POST">   <input type="hidden" name="id" value="aaa"/>   <input type="submit" name="submit" value="送信"> </form> と記述するとtest.phpには渡したいaaaが渡されるのですが、 これだとsubmitを押さないと渡せないため困っています。 したいことをまとめると、submitを使わずにページが表示されたら スグに変数が渡されるようにしたいです。 いろいろ試してみましたが、力不足で出来ませんでした。 宜しくお願いします!

    • ベストアンサー
    • PHP

専門家に質問してみよう