• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Javascript 関数内でのPHP関数)

JavaScriptでPHP関数内でデータ取得する方法

このQ&Aのポイント
  • PHPとMySQLを使用して機械部品の管理を行うプログラムを作成しています。JavaScriptを使って入力したパーツ番号から詳細説明を取得できるはずですが、うまく動作しません。この質問文章では、JavaScript関数内でのPHP関数の実行について相談しています。
  • 提供されたPHPファイルでは、PHP関数getDescription()は機能しているようですが、JavaScript関数GetDesc()内で使用すると機能しません。さまざまな試みを行いましたが、うまくいきませんでした。問題を解決するためのアドバイスを求めています。
  • この問題を解決する方法がわからず困っています。提供されたPHPコードと実行結果のスクリーンショットを添付しています。どのようにすれば思い通りに動作するか、助言をいただけませんか?

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

  • ベストアンサー
回答No.13

xmlhttp.open("GET", "JSON-TEST4.php?object=" + num , true); GETは、実際にURLバーにその文字が入っているのと同じ状態なので 結果的にURLバーの長さの制限を受けます。 POSTの場合は長さの制限がほぼないので、 例えば「ローカルから長いデータを送り出したい?」ってときは、 この方法だと、いつかトラブルかもしれません。 で、xmlhttp.openこいつでも、POST送信はできるので、 そこを治すことでより大きなデータを扱えますよ。 ただ、「JSからPHPを叩ける」の意味を完全に 理解したことがわかるソースを貼ってくれたのがうれしく思います。 少なくとも、もうTXTファイルだらけにする必要もないですし。 PHPにパラメーターが渡せるのなら、どんな機能も実装可能だ ってことが、一番のテーマだったので、よかったかなと 思います。 この板は、質問者さんがOKなら、閉じてもOKですよ。

papashiroSooke
質問者

お礼

返答ありがとうございます。 POSTで送る方法も分かりましたので、長いパラメーターを渡したい時には使ってみようと思います。 ただ、現状では10文字前後のパーツ番号を送ってその属性を取得するだけのルーチンを作りたいだけなので、今回はGETのままにしておきます。 なんだかマンツーマンで授業を受けているような感じで、学生に戻ったように気持ちが良かったです。本当に貴重な時間を割いて教えて頂き、有難うございました。 今回の質問はこれで締めさせていただきますが、まだまだ勉強不足の私の事ですから、PHP、JAVASCRIPT, JSON, JQUERYなどについてこれからもOKWAVEに質問を沢山 乗せてもらうことになると思います。また機会があったら色々と教えてください。 AsarKingChangさんのお仕事の方でも、これからいいことが沢山あることを祈ります。

その他の回答 (12)

回答No.12

>どうかしばらくお待ち下さい。 大丈夫ですよ! ひとまず、これが何をやっていてどういうメリットが生まれているか? で、結果どんなことができるようになるのか?が分かれば、 今やられている業務?は、綺麗に進行するのではないか と思っての投稿になります。 もちろん、その場で私がそれを見た結果での サンプルではないので、そうじゃないよ!とかの 意見が出ることは最初からわかっているので、 継続して、じゃあ!こんな時は?など 聞いてもらえたら、その時点でよさそうな サンプルをまた、作っていくつもりではあります。 ひとまず、あれで遊んでみてください。 慣れてきたら、 validation(バリデーション)=例えば数字が来るはずのフィールドなら 「それは数字だったのか?」とチェックを加えたり model(モデル)=データベースへのアクセスを一か所にまとめて 管理しやすくして、 それをcontroller(コントローラー)で ある処理には、データAとデータBが必要!ってのをそこにプログラム 最後にview(ビュー)最終出力部として、 ブラウザ側のAJAX(JS)に送り返したい形式で送り返す。 この概念を取り込めば、他の人が担当にする場合でも、 何がどこにあるか、すぐにわかりさらに、 何をやってるかもわかりやすくなるかと、思いますので。 今回のは、動作の流れを見るのに必要なものを最小構成で 記載したものですので。 という事で!良い一日を!

papashiroSooke
質問者

お礼

いつも勇気をもらえるようなことを言っていただき、感謝します。 前回お送りいただいたHTMLとPHPのソースファイルはまだ解析できていませんが、今までに教えて頂いたことをヒントにして自分なりに考えて、試行錯誤の上、次のようなコードを書きあげました。実行したら入力したパーツ番号からその詳細説明だけでなく在庫数や倉庫での保管位置など、関連する情報を引き出すことが出来ました。 以下にHTMLとPHPファイルをコピーします。 AsarKingChangさんに説明するまでもないことかと思いますが、HTML側では入力したパーツ番号をGETで?以下のパラメーターにしてAJAX要求し、PHP側ではすでに用意されているGLOBALな連想配列である$rev,$description, $stock, $location からそれぞれ与えられたパーツ番号の物を取り出して、JSONに変えて送り出すという形です。 さらにHTMLではレスポンスとして得たデータを指定の位置に表示するというものです。 HTML: ファイル名 = AJAX-TEST4.html <! DOCTYPE HTML> <HTML> <head> <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <script> function getData(){ var num = document.getElementById("PN").value; var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function(){ if(this.readyState == 4 && this.status == 200){ var myObj = JSON.parse(this.responseText); document.getElementById("RV").innerHTML = myObj.rev; document.getElementById("DS").innerHTML = myObj.description; document.getElementById("ST").innerHTML = myObj.stock; document.getElementById("LO").innerHTML = myObj.location; } }; xmlhttp.open("GET", "JSON-TEST4.php?object=" + num , true); xmlhttp.send(); } </script> </head> <body> input part number: <input type="text" id="PN"><br><br> <button onclick="getData()">click to get data from server</button> <br><br> ------- data from server ------<br> <table border="1"> <tr><th> attribute </th> <th>value </th></tr> <tr><td> revision </td> <td id="RV"> </td></tr> <tr><td> description </td> <td id="DS"> </td></tr> <tr><td> stock </td> <td id="ST"> </td></tr> <tr><td> location </td> <td id="LO"> </td></tr> </table> </body> </html> PHP: ファイル名=JSON-TEST4.php <?php //C:\xampp\htdocs\OOP-PHP\BOMdatabase\JSON-TEST.php require_once "databaseConnection.php"; global $rev, $description, $stock, $location; $partNumber = $_GET["object"]; $data = array(); $data['rev'] =$rev[$partNumber]; $data['description'] = $description[$partNumber]; $data['stock'] = $stock[$partNumber]; $data['location'] = $location[$partNumber]; $Json_data = json_encode($data); echo $Json_data; ?> AsarKingChangさんから頂いたファイルはJqueryで書かれており、自分は見たこともない".then()"などというのも入っていて、にわかにはマスターできそうもありませんが、それは時間をかけて勉強していく教材にさせて頂きたいと思います。 今回は自分で書いたものを応用して本来のプログラムに使いたいと思います。 今回の質問は少し長めのやり取りになってしまい、AsarKingChangさんの貴重な時間を多く奪ってしまう結果になりましたが、一応これで締めたいと思いますが、構わないでしょうか? 問題が無ければその旨お知らせください。

回答No.11

>こちらカナダはもう夜の11時過ぎで、私は明日も仕事があるので寝なくてはいけません。それでこのコードの内容を分析するのは明日の仕事の後になると思いますが、また連絡差し上げます。 海外だったのですね。ic illwait. gdnyt.

回答No.10

>JQuery を使っての解説なので、難しさを感じてしまいました。 動く状態で紹介しますよ。 結局はJS命令で整形をすればいいので、 難しく考えなくてもOKですよ。 添付の画像は、ブラウザ(Chromeのデバッグモード)F12キーで起動可能。 での、変数ダンプを行っている様子です。 HTML内のFORMパーツを「変数」に見立ててサーバーに 送り出し、PHPがそれを受け取り、JSの変数として 送り返しているサンプルになります。 なので、PHPが 受け取ったFORMパーツの変数の値でDBを 操作してその結果を返せば、いちいちTXTファイル作らなくても、 取得ができて、サーバーをその都度叩いてはいますが、 PHP内の特定の機能を呼び出すように 例えば先ほどの変数$contents["function"] これを、 switch ( $contents["function"] ) { case "機能1":... case "機能2":... } と拡張していけば、どんな機能を追加することもできますので、 このようにHTML(JS)とPHPの変数を疑似的に接続することで、 リクエスト時の時差はあっても、拡張性はかなりあるやり方に なるとおもいます。 ここに、DBの出力をそのまま結合してみれば、 「あ~なるほど!」って感じになると思いますが。 ひとまず、ここまで出来ましたら、 そういうことじゃ!ないんだ~など(笑)クレームを! HTML側のINPUTをセレクトボックスやチェックボックスにして、 サーバーにどうわたるかを見てもらえたら、と思います。 ひとまずJQ.AJAXではあるものの、 最小限(全部込みでも50行もない)のソースなので、 参考になりそうだったら、うれしく思います。

papashiroSooke
質問者

お礼

お礼が遅くなったことをお詫びいたします。 クライアントサイド、サーバーサイドそれぞれに見事なソースコードを送っていただき、本当に有難うございます。 これらの中身をよく研究させていただき、自分のやりたいことにどの様に応用していけばいいのか、考えてみたいと思います。 そもそもjQUeryそのものからきっちりと勉強をしないといけないです。 普通にJSを使って書いたAJAXは色々なブラウザーに対応するためには面倒な記述が必要であるが、 jQueryを使うとそのようなブラウザ間の違いを吸収してくれると知ってはいたのですが、つい怠けておろそかにしていました。 AsarKingChangさんの仰る様に、「この板は」私が送っていただいたソースの中身をよく理解して、自分の問題に対する解答を見つけ出せるまで開けたままにして置きたいと思います。 どうかしばらくお待ち下さい。必ずお返事を差し上げます。

回答No.9

次にPHPファイル(api.php)がいいでしょう。 気に入らない場合は先ほどのHTMLの、AJAXの根元を書き換えれば何でも構いません。 --- <?php header( "Access-Control-Allow-Origin: *" ); header( "Content-Type: application/json; charset=utf-8" ); $json = file_get_contents( "php://input" ); $contents = json_decode( $json , true ); // JSの変数を受け取りPHPで処理をして、 // PHPの変数をそのままJSに送り返すサンプル+@で一部を書き換え追加 $contents["php_dayo"]="あなたは".$contents["function"]."を呼びました。"; if ( isset($contents["mode1"])) { $contents["mode1_dayo"]="mode1は".$contents["mode1"]."だよ"; }else{ $contents["mode1_dayo"]="mode1はありません"; } if ( isset($contents["mode2"])) { $contents["mode2_dayo"]="mode2は".$contents["mode2"]."だよ"; }else{ $contents["mode2_dayo"]="mode2はありません"; } if ( isset($contents["mode3"])) { $table_size = intval($contents["mode3"],10); }else{ $table_size = 0; } $contents["test_table"]=[]; for ($i=0;$i<$table_size;$i++) { $contents["test_table"][] = rand(0,999); } // 配列も、JSにそのまま受け渡されますので、 // data[test_table].lengthで長さが判定できて、 // data[test_table][n]で表示できます。 echo json_encode( $contents );

回答No.8

ひとまず、まずは、HTMLを保存してください。 --- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> <script> $(function(){ function parseJson(data) { var returnJson = {}; for (idx=0;idx<data.length;idx++) { returnJson[data[idx].name] = data[idx].value; } return(returnJson); } $('form').submit( function() { let data = $(this).serializeArray(); data = parseJson(data); $.ajax({ type: 'post', url: 'api.php', dataType: 'json', contentType: 'application/json', scriptCharset: 'utf-8', data: JSON.stringify(data), }) .then( function (data) { $('textarea[name="server_response"]').val( JSON.stringify(data) ); max=data["test_table"].length; text="データは"+max+"件ありました\n"; for (i=0;i<max;i++) { text+=data["test_table"][i]+"\n"; } $('textarea[name="server_response2"]').val(text); }, function () { $('textarea[name="server_response"]').val( "エラー" ); } ); return(false); }); }); </script> </head> <body> <form method="POST" accept-charset="UTF-8"> <input type="hidden" name="function" value="hoge_func1"> <table> <tr><td>mode1</td><td><input type="text" name="mode1"></input></td></tr> <tr><td colspan=2><input type="submit" name="submit"></input></td></tr> </table> </form> <form method="POST" accept-charset="UTF-8"> <input type="hidden" name="function" value="hoge_func2"> <table> <tr><td>mode1</td><td><input type="text" name="mode1"></input></td></tr> <tr><td>mode2</td><td><input type="text" name="mode2"></input></td></tr> <tr><td>mode3</td><td><input type="text" name="mode3" value=20></input></td></tr> <tr><td colspan=2><input type="submit" name="submit"></input></td></tr> </table> </form> <table> <tr><td colspan=2>レスポンス</td></tr> <tr><td colspan=2><textarea name="server_response" cols="50" rows=20></textarea></td></tr> <tr><td colspan=2><textarea name="server_response2" cols="50" rows=20></textarea></td></tr> </table> </body> </html>

papashiroSooke
質問者

お礼

HTMLソースコード受け取りました。 有難うございます。 一応ブラウザで走らせてみたものの画面写真を送ろうと思ったのですが、この「お礼入力」ではそれは出来ないようです。 こちらカナダはもう夜の11時過ぎで、私は明日も仕事があるので寝なくてはいけません。それでこのコードの内容を分析するのは明日の仕事の後になると思いますが、また連絡差し上げます。

回答No.7

>従ってファイルが変わるたびにサーバーからデータを持ってこなくても良いように出来るのであれば、是非その方法を教えてください。 お願いします。 ローカルにそのファイルがない事はどうにもならないので 持ってくる必要は出ますよ。 ただ、先ほどのやつだと、事前にSQLでーたをテキストにしていたようで、これをなくして、 直接 HTML->AJAX->ここで、PHPをパラメーター付きでたたく事で、  PHPで今やってるテキストファイルを作るという工程をなくし  その時点で送り出す 当然SQLなので、そこで条件設定もできますから。 5番だけ欲しいなども。 見てる感じ、ローカル側のHTMLから、パラメーターをサーバーに送り それをSQLが受け取るのをAJAX(非同期)扱いでやれたら 道が開けそうなイメージではいます。 どちらにしても、ローカルはローカル、サーバーはサーバー その区別は超えられないので、どうにかして、 近く見せかけるか?だけの話ではあるので。 (直前の仕事がいっぱいでして。何かしら作りますよ。  AJAXにパラメタを送り出すのと、  AJAXから配列を送り返すの使えるだけで、  ほぼ、質問者さんなら解決できると思ってます。) https://itsakura.com/jquery-ajax なお、こういう概念ですけど。 AJAXとJSONを混ぜればパラメタ双方向で通信をできます。 ただ、結局は「通信をしなければならない」ことは 変わりませんがね。

papashiroSooke
質問者

お礼

有難うございます。 AsarKingChangさんからご紹介いただいたサイトに行ってみましたが、JQuery を使っての解説なので、難しさを感じてしまいました。 JQuery にはまだあまり詳しくありませんが、自分でもPHPとJSONの組み合わせに関して調べていましたら、W3SCHOOLのサイトで通常のJAVASCRIPTを使ったものがありました。 自分がやろうとしていることに役立ちそうなものなので、時間をかけて研究してみようと思います。サイトのURLを下に貼っておきますので、もしお時間があるようでしたら見て頂き、ご意見を聞かせてもらえれば幸いです。 https://www.w3schools.com/js/js_json_php.asp#:~:text=PHP%20File%20explained:%20Convert%20the%20request%20into%20an,object%20as%20JSON%20using%20the%20json_encode%20()%20function.

回答No.6

>是非その方法を教えてください。 多分やりたいことはわかった気がするので、 少しこの板開けておいてくださいね。 AJAXからPHPを叩く場合、PHPの変数に値をセットできるので、 ってことは、PHPはそれを処理したものを送り返せばいいだけ。 そうすれば、1本化できるので、すっきりしますので。 ちょい、お待ちを!

papashiroSooke
質問者

お礼

有難うございます。 ワクワクして待っています。

回答No.5

>AJAXは結局Javascriptなのでいくつかのファイルで構成されるシステムを作るとき、それぞれのファイルに おなじAJAXコードを書いていて、ファイルを切り替えるたびにデータの読み込みに時間がかかっています。 >PHPのように一つのファイル内でデータの配列を用意すれば、これをglobal変数として宣言するだけで >他のファイルでも使えるようになっていればいいのですが。 さすがにローカル側に全DBのデータを入れておくのは 無駄が多いのと、それではSQLなどの検索関連が 使えない分、デメリットの方が目立つでしょうね。 AJAXでPHPを叩くとして、叩くとき「パラメーター」を 与えることができますので、何個も作るのではなく、 受け取りコントローラーとしてAJAX->PHPを呼び出し 返り値を得ることで、1本化できると思いますよ。 ちょっと今、夜の部がバタバタしてきたのですが、 必要でしたら、サンプル書きますよ(動くまでは対応しますが) 緊急事態宣言がそろそろ終わりそうなので。 ゆっくりしていられる時間も、もう終わりそうでして。

papashiroSooke
質問者

お礼

回答有難うございます。 「AJAXでPHPを叩く」という意味はよく分かりませんが、もし何かのパラメーターを使ってAJAXを始めれば複数のファイルに同じAJAXコードを記述せずに、 従ってファイルが変わるたびにサーバーからデータを持ってこなくても良いように出来るのであれば、是非その方法を教えてください。 お願いします。 ちなみに、私がPHPでデータベースのテキストファイルを作る部分(A)と、他のファイルでAJAXを使っている部分(B)のコードを下に貼り付けていますので、 これらのどこかに加工を加えるのであればご指摘いただければありがたいです。 (A) $query="select count(*) from partsmaster"; $result=mysqli_query($connection,$query) or die("query failed to get all id of parts"); $row=mysqli_fetch_array($result); $maxNum=$row[0]; $fhandle=fopen("c:/xampp/htdocs/newBOM/num2namezzz.txt","w"); For ($count=1; $count <=$maxNum; $count++){ $query="select * from partsmaster where id=$count"; $result=mysqli_query($connection, $query) or die("query failed to get all data from parts where id=$count"); if($result){ $row= mysqli_fetch_array($result); $id= $row["id"];//0 $pNum= $row["partNumber"];//1 $rev= $row["rev"];//2 $desc= $row["description"];//3 $stok= $row["stock"];//4 $loc= $row["location"];//5 $mk1 = $row["maker1"];//6 $mk1pn = $row["maker1_PN"];//7 $mk2 = $row["maker2"];//8 $mk2pn = $row["maker2_PN"];//9 $sup1 = $row["supplier1"];//10 $sup1pn = $row["supplier1_PN"];//11 $sup1cst = $row["supplier1_cost"];//12 $cur1 = $row["currency1"];//13 $sup2 = $row["supplier2"];//14 $sup2pn = $row["supplier2_PN"];//15 $sup2cst = $row["supplier2_cost"];//16 $cur2 = $row["currency2"];//17 $bom = $row["hasBOM"];//18 $date = $row["dateCreated"];//19 $who = $row["whocreated"];//20 fwrite($fhandle, $id.'~'); fwrite($fhandle, $pNum.'~'); fwrite($fhandle, $rev.'~'); fwrite($fhandle, $desc.'~'); fwrite($fhandle, $stok.'~'); fwrite($fhandle, $loc.'~'); fwrite($fhandle, $mk1.'~'); fwrite($fhandle, $mk1pn.'~'); fwrite($fhandle, $mk2.'~'); fwrite($fhandle, $mk2pn.'~'); fwrite($fhandle, $sup1.'~'); fwrite($fhandle, $sup1pn.'~'); fwrite($fhandle, $sup1cst.'~'); fwrite($fhandle, $cur1.'~'); fwrite($fhandle, $sup2.'~'); fwrite($fhandle, $sup2pn.'~'); fwrite($fhandle, $sup2cst.'~'); fwrite($fhandle, $cur2.'~'); fwrite($fhandle, $bom.'~'); fwrite($fhandle, $date.'~'); fwrite($fhandle, $who."\r\n"); } }// end for fclose($fhandle); (B) <script type="text/javascript"> var xhttp; var total=array(); var record=array(); var item=array(); var pn; //====================================== function ajaxStart(){ if(window.XMLHttpRequest){ xhttp = new XMLHttpRequest(); } else if(window.activeXObject){ xhttp = new activeXObject("Microsoft.XMLHTTP"); } else return false; xhttp.open("GET", "num2namezzz.txt", true); xhttp.onreadystatechange = function() { if (xhttp.readyState == 4 && xhttp.status == 200) { total =xhttp.responseText; record=total.split("\r\n"); document.getElementById("ajaxTest").value= xhttp.readyState + "-" + xhttp.status + "-" +record.length; } // end if }// end inner function() xhttp.send(null); } // end function ajaxStart //====================================== function getDesc(){ pn = document.getElementById("PN").value; max = <?php echo $maxNum ?>; for (var count=0; count < max; count++){ // record start with record[0] item=record[count].split("~"); if(item[1]==pn){ document.getElementById("RV").value=item[2];//存在する項目を先に書いていく document.getElementById("DS").value=item[3]; document.getElementById("LK").value=item[5]; document.getElementById("ST").value=item[4];// 存在しないものに出会うと、それ以上進まない break; }// end if }// end for }// end function

回答No.4

>$pnを用意しようとしているわけです。 >で、その引数は<input type="text" id="PN">に入力されたものですが、JavaScriptで取得された値である >var PN = document.getElementById("PN").value; をそのまま使う訳に行かないので、それをPHPで使えるようにするために >"<?php $pn = '" + PN + "'; echo getDescription($pn); ?>"; の最初の部分でJS変数PNからPHP変数$pn を作っています。 であれば、最初に言ったみたいな問題ですね。 JavaScriptはクライアント言語なので、 JSが実行されるときもうPHPは存在しないのですよ。 成形済みのテキストがそこにあるだけです。 是非実行してもらいたい!項目。 この手のを調査するときHTMLソース(PHPソースではなく) を出しながら値の流れを見てもらうことをお勧めします。 HTMLを表示するときソースを出してみればわかりますが。 そこには、PHP(いわゆるSSI)は残っていないので、 それを成形する為のJSなので、 JSからPHPを稼働させるにはAJAXなどにしないと動作しません。 なのですが、AJAXにチャレンジしてみます? ひとまず、この質問だけの回答としては、「不可能」となります。 PHPは今回の場合は、DBを開いて、getDescriptionなどの処理を 行った「後」コンテンツがブラウザに送り出されています。 その後JSでPHPが作ったテキスト部を読み取ったにすぎないので、 そこで新しいアクションは起こせない。 (起こしたところでクライアント言語なので、  そこにはPHPもDBもサーバーにあるのですから、  動作するわけがない) ってなことになります。 AJAX(XHR)の場合は、ボタンを押した後に、 サーバーのDBを叩くにコードが書けますが、 そういう方式でもよければ、サンプル書きますよ。 (今回のコードを基準で) んま、手っ取り早く終わらせるならJquery系のJSで 書いたほうがすぐ終わりでしょうし。 今回までの最後に! 「この板少し長く残しておいてくださいね。」 もし、気分を害していない用であれば、とことんやりましょか!

papashiroSooke
質問者

お礼

詳しい回答をありがとうございます。 気分など害してはいません。 おかげでサーバーサイドとクライアントサイドトいうことの区別がよくわかりました。 AJAXは実際に自分が作成中のプログラムでも使っています。 自分は8000個くらいある機械部品のデータベースをもとにPHPでテキストファイルを作り、 それをAJAXを使って部品番号をキーにして詳細説明を取り出す連想配列を用意してあり、 ユーザーが<input> タグに部品番号を入れてOKボタンを押したらその連想配列から 詳細説明を取り出して表示するようにしています。 これが効率の良い方法かどうかわからないのですが、AJAXについては今のところその程度の知識なので。 AJAXは結局Javascriptなのでいくつかのファイルで構成されるシステムを作るとき、それぞれのファイルに おなじAJAXコードを書いていて、ファイルを切り替えるたびにデータの読み込みに時間がかかっています。 PHPのように一つのファイル内でデータの配列を用意すれば、これをglobal変数として宣言するだけで 他のファイルでも使えるようになっていればいいのですが。 実際、今回の質問は自分のやりたいことはAJAX以外には出来ないのだろうかと疑問に感じたことから出ています。 MySQLのデータベースのコピーであるテキストファイルを作って、それをAJAXでで読み込んで、 といったようなことをせずに直接データベースにアクセス出来ればいいじゃないかと思ったわけです。 でもこれはHTMLファイルが画面に表示された時点でサーバーサイドを離れたので無理だということですね。よくわかりました。 AsarKingChangさんからすればレベルの低い質問に何度もお付き合いいただき、本当に有難うございました。 これからはクライアントからサーバーにアクセスできるAJAXをもっと詳しく研究していきたいと思います。

回答No.3

まとめると、実質1行で終わる気がしましたけど。 <script> function getDesc(){ document.getElementById("DSC").innerHTML = document.getElementById("PN").value + "<?= getDescription($pn); ?>"; } </script> PN = "'"+ PN +"'"; ←これいらない ”あいうえお”には、「”」が本当に入っているわけではなく、 文字列変数だからそう書いているだけで、実際にはいらないものです。 PN = A; これは、Aという変数が入る。 PN = "A"; これは、Aという文字列が入る。     実際に変数の中に「”」があるわけではない。 の差です。

papashiroSooke
質問者

お礼

回答有難うございます。 どうも誤解されているようなので説明させてください。 私はPHP関数 getDescription() が働くことがわかっているので、この関数に送る引数$pnを用意しようとしているわけです。 で、その引数は<input type="text" id="PN">に入力されたものですが、JavaScriptで取得された値である var PN = document.getElementById("PN").value; をそのまま使う訳に行かないので、それをPHPで使えるようにするために "<?php $pn = '" + PN + "'; echo getDescription($pn); ?>"; の最初の部分でJS変数PNからPHP変数$pn を作っています。 たしかにPNは文字列なのでシングルコートで囲む必要はないかもしれませんが、これによって例えば<input> に入れた値が591-011-10 だとすると PHP変数$pn='591-011-10' が得られますよね。これを引数として getDescription($pn) を実行するとそのパーツの詳細説明が<span> 部分に表示されると期待しているわけです。 関数の戻り値ではなくて単に$pn だけなら表示することが出来ます。なのにどうして関数の戻り値は表示されないのかということがわからないのです。