JavaScriptとPHPの非同期通信

このQ&Aのポイント
  • JavaScriptとPHPを使用した非同期通信のプログラムです。
  • sample3.htmlとsample3.phpの役割について質問があります。
  • ファイルの書き込み処理を担当するsample3.phpの一部のコードについての質問です。
回答を見る
  • ベストアンサー

JavaScriptとPHPの非同期通信

以下プログラムです。 ファイル名はsample3.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>合計金額表示登録p130</title> <script type="text/javascript" src="../lib/jquery-1.8.1.min.js"></script> <script type="text/javascript"> $(function () { $("#exe").click(sales); }); function sales(){ var query = {}; query["id"] = $("#id").val(); query["price"] = $("#price").val(); query["amount"] = $("#amount").val(); $.post("sample3.php",query,function(resp){ $("#sales").text(resp); }); } </script> </head> <body> <h2>合計金額表示</h2> ID:<input type="text" id="id" size="8"/> 価格:<input type="text" id="price" size="10"/> 数量:<input type="text" id="amount" size="8"/> <input type="button" id="exe" value=" 登録 "/> <hr/> 合計金額:<span id="sales"></span> </body> </html> ファイ名sample3.php <?php $id = $_POST['id']; $price = $_POST['price']; $amount = $_POST['amount']; $total= $price * $amount; $data = $id.",".$price.",".$amount.",".$total."\n";      (1) $fp = fopen("./dat/sales.txt" , 'a') or die("OPENエラー");  (2) fputs( $fp, $data);                       (3) fclose( $fp );         (4) print $total; ?> 以上のプログラムですが、個々のプログラムの約役割が知りたくて質問しました。 ファイルのsample3.htmlとsample3.phpプログラムはAjax⇒jQueryで動いています。 sample3.phpの(1)~(4)はファイル書き込み処理をするため役割があるそうです。  質問   (2)のfopen("./dat・・・)の最初のドット”.”(文字列連結演算子?)の役割を教えてください。   (2)or die("OPENエラー")このプログラムは何をしているのですか? (3)fputs( $fp, $data);このプログラムの大きな役割は何ですか?予想ですが、sample3.htmlで入力された文字と     sample3.phpの$total= $price * $amount;で処理された値を何かしている!?   (4)役割は何ですか・( $fp )を”close”閉めているみたいに見えますが!?   以上よろしくお願いします。    

  • PHP
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5080/13276)
回答No.1

(2) fopen("./dat・・・)の最初のドットは、ファイルの場所を相対パスで書く際の最初の位置を示しており、ドット1つはそのプログラムが置いてあるディレクトリを指しています。Unix系OSで使うファイルパスの指定方法です。 "./dat/sales.txt" はプログラムが置いてあるディレクトリ内の dat ディレクトリに入っている sales.txt というファイルを指しています。 or die("OPENエラー") は直前の処理に失敗した場合、"OPENエラー"というメッセージを出力してプログラムを終了させるという事をしています。 この場合 fopen の処理に失敗したら(ファイルが開けなかったら)、そこで、メッセージを出力して処理を終了させます。 http://www.php.net/manual/ja/function.die.php fputs( $fp, $data); は(2)で開いたファイルに、(1)で作った $data の中身を書き込んでいます。 http://www.php.net/manual/ja/function.fputs.php (4)は(2)で開いたファイルを閉じています。 $fpは(2)でfopenをした際に、開いたファイルの情報が格納されています。 http://www.php.net/manual/ja/function.fclose.php phpの関数は、そのままgoogle等で検索するとマニュアルページが見つかるので一度検索してみましょう。

javascriptphp
質問者

お礼

有難うございます。 大変よくわかりました、助かります。 今後ともよろしくお願いいたします。

関連するQ&A

  • エラーがでるのは

      ファイル構造図   -------------    jQAjWeb(フォルダ)     (1) |----- sample4.html       |     (2) |----- jquery-1.8.1.min.js       |     (3) |----- sample.php       |     (4) |----- dat(フォルダ)                |---- sales.txt          ------------------------        (1) 「sample4.html」のファイルの中身        <!DOCTYPE html>        <html>        <head>        <meta charset="utf-8"/>        <title>合計金額表示登録読み取りP134</title>        <script type="text/javascript" src="../jQAjWeb/jquery-1.8.1.min.js"></script>        <script type="text/javascript">         $(function () { $("#exe").click(sales);});         function sales(){         var query = {};        query["id"] = $("#id").val();        $.get("sample4.php",query, function(res){          var dat = res.split(",");         $("#price").val(dat[0]);         $("#amount").val(dat[1]);         $("#sales").val(dat[2]);         });        }        </script>        </head>        <body>        <h2>合計金額表示 <input type="button" id="exe" value=" 参照 "/></h2>        ID:<input type="text" id="id" size="8"/>        価格:<input type="text" id="price" size="10"/>        数量:<input type="text" id="amount" size="8"/>        合計金額:<input type="text" id="sales" size="8"/>        </body>        </html>    -------------------------------------    (2) 「jquery-1.8.1.min.js」のファイルの中身は省略     --------------------------------------    (3) sample.phpの中身           <?php      $id = $_GET["id"];      $fp = fopen("./dat/sales.txt" , "r") or die("OPENエラー");      while($rec = fgets($fp)){      $item = split(",", $rec);      if(strcmp($item[0],$id)==0){      echo ($item[1].",".$item[2].",".$item[3]);     break;        }      }      fclose($fp);     ---------------------------------    (4) dat(フォルダ)の 「salest.txt」のファイルの中身             S001,800,7,5600       S002,500,3,1500       S003,800,2,1600       S004,500,7,3500       S005,650,3,1950       -------------------------------------    以上のプログラムで最後のに記述した(4)の「dat(フォルダ)の salest.txt」のファイル   の「ファイルの中身を読」み取るプログラムです。        最初に記述した(1)「sample4.html」の      ID:<input type="text" id="id" size="8"/>のBOXに"S0003"と入力と         (4)「salest.txt」の3行目の「800,2,1600」の値が帰ってきて以下に表示される。                 価格:<input type="text" id="price" size="10"/>に         エラー表示で不具合となる_ _ 何故!!??                数量:<input type="text" id="amount" size="8"/>に        "2" と表示される。 (正常値です。^^)                 合計金額:<input type="text" id="sales" size="8"/>に         "1600" と表示される。 (正常値です。^^)    数量:のエラー表示は以下に通りです。 <br /><b>Deprecated</b>: Function split() is deprecated in <b>C:\xampp\htdocs\jQAjWeb\sample4.php</b> on line <b>5</b><br /><br /><b>Deprecated</b>: Function split() is deprecated in <b>C:\xampp\htdocs\jQAjWeb\sample4.php</b> on line <b>5</b><br /><br /><b>Deprecated</b>: Function split() is deprecated in <b>C:\xampp\htdocs\jQAjWeb\sample4.php</b> on line <b>5</b><br />800   何故エラーが出るのでしょうか!? 他のプログラムは正常に動いて、 「jquery-1.8.1.min.js」のトラブルの可能性は低いと考えれれます。  どこかに誤字脱字がある可能性が高いと思われますが、正直言ってかなり見直しましたが発見できませんでした。   以上宜しくお願いします。  

    • ベストアンサー
    • PHP
  • javascript php フォームについて

    javascriptで作ったフォームをphpに送信したいのですが、上手く送信できません。 どのようにすれば上手く送信することができるでしょうか? 回答お願いします。 javascript側のソース <body> <form name="nform1" method="POST" action="./kaitou1.php" enctype="text/plain"> <p>問1</p> <p> (1)<input type="text" name="kaitouran11" size="20"> (2)<input type="text" name="kaitouran12" size="20"> (3)<input type="text" name="kaitouran13" size="20"> (4)<input type="text" name="kaitouran14" size="20"> </p> </form> <form name="nform2" method="POST" action="./kaitou1.php" enctype="text/plain"> <p>問2</p> <p> (1)<input type="text" name="kaitouran21" size="20"> (2)<input type="text" name="kaitouran22" size="20"> (3)<input type="text" name="kaitouran23" size="20"> (4)<input type="text" name="kaitouran24" size="20"> </p> </form> <form name="nform3" method="POST" action="./kaitou1.php" enctype="text/plain"> <p>問3</p> <p> (1)<input type="text" name="kaitouran31" size="20"> (2)<input type="text" name="kaitouran32" size="20"> (3)<input type="text" name="kaitouran33" size="20"> (4)<input type="text" name="kaitouran34" size="20"> </p> </form> <input type="button" value="送信" onClick="send()"> </body> php側のソース <body> <p>問1</p> <p>(1)<?php print(htmlspecialchars($_POST['kaitouran11'], ENT_QUOTES, 'UTF-8')); ?> (2)<?php print(htmlspecialchars($_POST['kaitouran12'], ENT_QUOTES, 'UTF-8')); ?> (3)<?php print(htmlspecialchars($_POST['kaitouran13'], ENT_QUOTES, 'UTF-8')); ?> (4)<?php print(htmlspecialchars($_POST['kaitouran14'], ENT_QUOTES, 'UTF-8')); ?> </p> <p>問2</p> <p>(1)<?php print(htmlspecialchars($_POST['kaitouran21'], ENT_QUOTES, 'UTF-8')); ?> (2)<?php print(htmlspecialchars($_POST['kaitouran22'], ENT_QUOTES, 'UTF-8')); ?> (3)<?php print(htmlspecialchars($_POST['kaitouran23'], ENT_QUOTES, 'UTF-8')); ?> (4)<?php print(htmlspecialchars($_POST['kaitouran24'], ENT_QUOTES, 'UTF-8')); ?> </p> <p>問3</p> <p>(1)<?php print(htmlspecialchars($_POST['kaitouran31'], ENT_QUOTES, 'UTF-8')); ?> (2)<?php print(htmlspecialchars($_POST['kaitouran32'], ENT_QUOTES, 'UTF-8')); ?> (3)<?php print(htmlspecialchars($_POST['kaitouran33'], ENT_QUOTES, 'UTF-8')); ?> (4)<?php print(htmlspecialchars($_POST['kaitouran34'], ENT_QUOTES, 'UTF-8')); ?> </p> </body>

    • 締切済み
    • PHP
  • phpのCSVの保存について教えてください

    下記のようにinputタグから値をphpにおくり、csvファイルに保存しようとしています。 値1に12345 値2に67890 値3にあいうえお というように値を送って保存し、csvファイルを開くと、 12345," 67890",あいうえお というように、値2として送ったものの先頭にダブルコーテーションとスペース、最後にダブルコーテーションが勝手に入ってしまいます。なぜ何でしょうか?対処法も含め教えていただければありがたいです。よろしくお願いします。 --------------------html---------------------------------- <form action="send.php" method="post"> 値1:<input type="text" name="aaa" > 値2:<input type="text" name="bbb" > 値3:<input type="text" name="ccc" > <input type="submit" value="送信する"> </form> --------------------php---------------------------------- <?php $val[0] = $_POST['aaa']; $val[1] = $_POST['bbb']; $val[2] = $_POST['ccc']; $fp = fopen("valdata.csv", "a"); fputcsv($fp, $val); fclose($fp); ?>

    • ベストアンサー
    • PHP
  • PHP 引数の使い方

    PHPファイルどうしで引数を共有する方法を教えてください。 例えば、 「sample001.php」では、 <form action="sample002.php" method="post"> <input type="text" name="word" size="30"> <input type="submit" value="登録"> のタグによって文字列を入力し登録します。 「sample002.php」では、 $arr_word = $_POST["word"]; により、入力された文字列が“$arr_word”に格納されます。 「sample003.php」でも 入力された文字列を使いたい場合は、どうすればよいですか? “$arr_word” もしくは $_POST["word"] もしくは action="sample003.php"  を活用することでできるのでしょうか? PHPはまだまだ初心者です。教えてください。

    • ベストアンサー
    • PHP
  • PHP に詳しい方教えてください

    以下のスクリプトを実行作成して実行するとエラーが出てしまいます。エラーを出さないようにする方法を教えていただけませんか。 ※ エラーがでるものの、正常に動作はしています。 ---エラーメッセージ--- Notice: Use of undefined constant id - assumed 'id' in C:\xampp\htdocs\shop\update.php on line 12 --スクリプト--- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>商品管理</title> </head> <body> <?php require('dbconnect.php'); $id = $_REQUEST[id]; $sql = sprintf("SELECT * FROM my_items WHERE id=%d", ★12行目★ mysql_real_escape_string($id) ); $recordSet=mysql_query($sql); $data = mysql_fetch_assoc($recordSet); ?> <p>変更する内容を記入してください</p> <form id="frmUpdate" name="frmUpdate" method="post" action="update_do.php"> <dl> <dt> <label for="maker_id">メーカーID</label> </dt> <dd> <input name="maker_id" type="text" id="maker_id" size="10" maxlength="10" value="<?php print(htmlspecialchars($data['maker_id'], ENT_QUOTES)); ?>" /> </dd> <dt> <label for="item_name">商品名</label> </dt> <dd> <input name="item_name" type="text" id="item_name" size="35" maxlength="255" value="<?php print(htmlspecialchars($data['item_name'], ENT_QUOTES)); ?>" /> </dd> <dt> <label for="price">価格</label> </dt> <dd> <input name="price" type="text" id="price" size="10" maxlength="10" value="<?php print(htmlspecialchars($data['price'], ENT_QUOTES)); ?>" /> </dd> <dt> <label for="keyword">キーワード</label> </dt> <dd> <input name="keyword" type="text" id="keyword" size="50" maxlength="255" value="<?php print(htmlspecialchars($data['keyword'], ENT_QUOTES)); ?>" /> </dd> </dl> <input type="submit" value="変更する" /> <input type="hidden" name="id" value="<?php print(htmlspecialchars($data['id'], ENT_QUOTES)) ?>" /> <form > </body> </html>

    • ベストアンサー
    • PHP
  • PHPとJavaScriptの連携について

    PHPとJavaScriptの連携をしたいと思いましたが、下記が分からなかったので、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 1. 下記の親ウィンドウで子ウィンドウを開く後、テキストエリアに文字を入力し、値をセットボタンを押すと、「親ウィンドウ」の「値が渡せます」には値が渡せますが、「値が渡せません」には値が渡せません。 違いはnameをtext00からdata[text02]に変更したのみとなります。 2. 下記のソースでは、子ウィンドウのテキストエリアに入力した内容をそのまま渡してますが、子ウィンドウのテキストエリアの情報を基に、PHPでデータベースを検索し、ヒットしたものを親ウィンドウに渡したいと思います。 下記のソースを例にすると、「値をセット」ボタンを押した後、テキストエリアの値を子ウィンドウのSELECT文のidに設定し、取得した$tmpの内容を親ウィンドウに渡したいと思います。 なお、記載のSQL文はシンプルですが、実際には複数のフィールドの値を取り、idの値も複数あります(下記のデータベースを例にすると、idに1と2を渡した際、親ウィンドウのテキストエリアに「あいうえお かきくけこ」と表示させ、idの値を隠し項目でもっていたいと思います)。 3. 上記2で親ウィンドウにデータベースの値を渡した後、子ウィンドウを開くクリック時、子ウィンドウのテキストエリアに渡したidの値を表示したいと思います。 【index.html(親ウィンドウ)】 <script type="text/javascript"> <!-- function window_open() { window.open('sub.php',null,'width=640, height=480, scrollbars=yes') }; //--> </script> </head> <body> <form action="index.php" method="post" name="form00" id="form00"> <a onclick="window_open()" href="javascript:void(0)">子ウィンドウを開く</a> <br /> 値が渡せます <input type="text" name="text00" value="" readonly="readonly" /> <br /> 値が渡せません <input type="text" name="data[text02]" value="" readonly="readonly" /> </form> </body> 【sub.php(子ウィンドウ)】 <script type="text/javascript"> <!-- function Set() { window.opener.document.form00.text00.value=document.form01.text01.value; window.opener.document.form00.data[text02].value=document.form01.text01.value; window.close(); } //--> </script> </head> <body> <form action="index.php" method="post" name="form01" id="form01"> <input type="text" name="text01" /> <input type="button" onclick="Set()" value="値をセット" /> </form> <?php /* $link=mysql_connect('localhost', 'データベースユーザ名', 'データベースパスワード名'); mysql_select_db('データベース名', $link); $query=mysql_query("SELECT nm_master FROM master_db WHERE id=2", $link); $tmp=""; while ($row=mysql_fetch_array($query)) { $tmp .= $row["nm_master"]; } echo $tmp; mysql_close($link); */ ?> </body> 【データベース:master_db】 フィールド名:(`id`, `nm_master`) (1, 'あいうえお'), (2, 'かきくけこ'); 以上、よろしくお願いします。

    • ベストアンサー
    • PHP
  • javascript と php の、フォームを使わない送受信について

    初めて質問します。わかりにくいかも知れませんが、どうぞよろしくお願いします。 当方、HTTPXMLオブジェクト(?)を使ってHTTP通信を試みていますが、phpでのPOST受信が出来ず困っております。 以下、要約したソースコードを掲載します。 javascript側----------------- post_data = 'user_id='+ user_id +'&password=' + password; //user_id,password共にテキストフォームに入力された変数です (中略) httpObj.open('POST','hoge.php',true); httpObj.send(post_data); //これで送信し (中略) a = httpObj.responceText //で受け取っています。 ---------------------------------- php側----------------------------- $user_id = $_POST['user_id']; $password = $_POST['password']; ~DB接続処理~ print $res; //$resはjavascriptに送る文字列です ---------------------------------- と言うような感じなのですが、 javascript側の最後の a にはちゃんと $res の内容が格納され、表示もされることを確認しているのですが、 php側の$_POST['user_id']に何も入らずnullのままで、どうしたらいいのか途方に暮れています…。 蛇足かも知れませんが、念のためにHTML側のテキストフォーム部のソースだけを書いておきます。 <input type="text" id="user_id">ユーザ名 <input type="password" id="pass">パスワード <input type="button" id="login" value="log in"> <form>タグは使わず、ボタンがクリックされたときに、テキストフォームの内容を読み取ってphpに値を投げると言うイベントハンドラ的な動作をしています。 フォームの内容はjavascriptで取れていますが、如何せんphpへ投げたときにphpが受け取ってくれない…… 長文申し訳ございません。回答のほう、よろしければお願いします。

  • javascript内からのsubmit

    PHP初心者です。 javascript内でsubmitを行い、値をPHP内で受け取る想定ですが、うまく作動しません。 具体的には下記のソースで、// Aの処理に入ってきて欲しいのですが、//B に入ってきます。 初歩的なことのなのかもしれませんが、どこが間違っているのか分からずはまっています。 ご教授ください。 ソースは以下です。 ■JavaScriptとForm(admLogin.html) <script type="text/javascript" src="js/jquery-1.9.0.min.js"></script> <script type="text/javascript"> function fncLogin(){ $("#frmAdmLogin").submit(); } </script> <body> <form id="frmAdmLogin" action="admLogin.php" method="post"> <input type="text" id="txtAdmId" /> <input type="text" id="txtAdmPass" /> <input type="button" name="btnLogin" value="ログイン" onclick="fncLogin()"/> </form> </body> ■PHP(admLogin.php) <?php if(isset($_POST['btnLogin'])) { // A }else{ // B } ?> ログインボタン押下 ↓ fncLogin内からフォームをsubmit ↓ // A の処理に入ってくる想定なのですが、//B の処理が実行される。 ちなみに、ボタンのinput typeをsubmitにすれば//A の処理に入ってくるのですが、 javascript内からsubmitしたいため、困っています。 どこを間違えているのでしょうか。。

    • 締切済み
    • PHP
  • formに複数ボタンを配置し、それぞれのボタンに対して、別の複数の値を

    formに複数ボタンを配置し、それぞれのボタンに対して、別の複数の値をPHPに受け渡したいのです。 例としは下記のような命令をしたいのですが、どうしても解決策がわかりません。 1.jpgで作成したボタンをクリックすると、textの"コンニチワ"、textの30、1.jpgが1.phpへ送られる。 2.jpgで作成したボタンをクリックすると、textの"コンバンワ"、textの50、2.jpgが1.phpへ送られる。 下記は、一応自分で作成したものです。 ●sample.html <form method="post" action="1.php"> <input name="namae"type="text"value="コンチニワ"> <input name="namae"type="text"value="コンバンワ"><br> <BUTTON type ="submit"name="submit1"> <IMG src="1.jpg"> </BUTTON> <BUTTON type ="submit"name="submit2"> <IMG src="2.jpg"> </BUTTON><br> <input name="price"type="text"value="30"> <input name="price"type="text"value="50"> -------------------------------- 【sample.htmlの希望表示】 namaeテキスト  namaeテキスト ボタン画像    ボタン画像 priceテキスト  priceテキスト -------------------------------- ●1.php <?php $namae=$_POST['namae'] $kakaku=$_POST['price'] $image=&_POST['image'] ?> もしかしたら、imageについては表示させないテキストに隠して値だけ送るという 手もあるかもしれません。やり方がわかりませんが。

    • 締切済み
    • PHP
  • formに複数ボタン配置と複数の値受け渡しにつきまして、下記のような命

    formに複数ボタン配置と複数の値受け渡しにつきまして、下記のような命令をしたいのですが、どうしても解決策がわかりません。 1.jpgで作成したボタンをクリックすると、textの"コンニチワ"、textの30、1.jpgが1.phpへ送られる。 2.jpgで作成したボタンをクリックすると、textの"コンバンワ"、textの50、2.jpgが1.phpへ送られる。 下記は、一応自分で作成したものです。 ●sample.html <form method="post" action="1.php"> <input name="namae"type="text"value="コンチニワ"> <input name="namae"type="text"value="コンバンワ"><br> <BUTTON type ="submit"name="submit1"> <IMG src="1.jpg"> </BUTTON> <BUTTON type ="submit"name="submit2"> <IMG src="2.jpg"> </BUTTON><br> <input name="price"type="text"value="30"> <input name="price"type="text"value="50"> -------------------------------- 【sample.htmlの希望表示】 namaeテキスト  namaeテキスト ボタン画像    ボタン画像 priceテキスト  priceテキスト -------------------------------- ●1.php <?php $namae=$_POST['namae'] $kakaku=$_POST['price'] $image=&_POST['image'] ?> もしかしたら、imageについては表示させないテキストに隠して値だけ送るという 手もあるかもしれません。やり方がわかりませんが。

専門家に質問してみよう