こんにちは かねしろ@pinkrootです。
昨日は久しぶりにPHPでのコーディングを行いました。
取り組んだのはPHPとjQueryを組み合わせて、あるボタンが押されたときにajaxなPOSTを飛ばして、その飛んでいったパラメータをMySQLに格納する、という文字での説明が難しい処理です(笑) イメージとしては、ボタンを押しても画面がリロード(更新)されず、処理の裏側でDBへのデータ格納を行なっている、という感じ。
備忘録的にやり方をまとめます。
HowTo
自分で作成するファイルは以下の3つ。
- ユーザが閲覧してボタンを押す画面(index.html)
- ボタンが押されたら呼び出されるjavascriptファイル(post.js)
- バックボーンで動作し、MySQLでデータを格納するPHPファイル(post.php)
上記ファイルの他に、ajaxを使うためにjQueryのファイルが必要となります。
ここから1.7.2のMinifiedをダウンロードして使いました。
ダウンロードしてきたjquery-1.7.2.min.jsと自作のpost.jsはjsディレクトリを作成し、その中にまとめて置きました。
.ProjectDirectory
index.html
post.php
.js
jquery-1.7.2.min.js
post.js
というようなディレクトリ構成。
index.html
index.htmlのコードは以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script type="text/javascript" src="./js/jquery-1.7.2.min.js"></script> <script type="text/javascript" src="./js/post.js"></script> </head> <body> <form> <INPUT type="button" value="submit" onClick="ajaxPostFunc('param1', 'param2');"> </form> </body> </html> |
head内でjsファイルを呼び出しておき、body内のbuttonにはjsで定義した関数(ajaxPostFunc)をonClickで呼び出すように設定しておきます。
肝になるのがボタンに対してonClickを設定しておくところ。 このonClickで呼び出される関数から、ajaxの一連の処理が始まります。
後々、MySQLに格納したいデータを、ajaxPostFuncに引数として渡しておきます。
今回はparam1, param2という2つの文字列をパラメータとして渡しておきました。
post.js
post.jsのコードは以下の通り。
1 2 3 |
function ajaxPostFunc(param1, param2){ $.post("post.php", {input1:param1, input2:param2}, function(json){alert("パラメータを2つPOSTしました");}); } |
ajaxPostFuncが呼び出されると、$.postという謎の機能が働くことになります。
この機能が働くと、引数として受け取っておいたparam1, param2をpost.phpにPOSTパラメータとして渡します。
このとき、param1はinput1, param2はinput2という名前に変えて渡してあります。(説明のため) 渡し方はJSON形式なので、パラメータが増えた時も対応が簡単です。
その後、「パラメータを2つPOSTしました」というalertを表示するまでがこのjsファイルの役目です。
post.php
post.phpのコードは以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php // MySQLへ接続する準備。DB名や認証に必要な情報を格納 $url = "localhost"; $user = "user"; $pass = "password"; $db = "sample_db"; // MySQLへ接続する $connect = mysql_connect($url, $user, $pass) or die("MySQLへの接続に失敗しました。"); // 手を加えるデータベースを選択する $sdb = mysql_select_db($db, $connect) or die("データベースの選択に失敗しました。"); // POSTされたパラメータを受け取る $myInput1 = $_POST["input1"]; $myInput2 = $_POST["input2"]; $timestamp = time(); // クエリを送信する $sql = "INSERT INTO sample_table VALUES('$timestamp', '$myInput1', '$myInput2')"; $result = mysql_query($sql, $connect) or die("クエリの送信に失敗しました。<br />SQL:".$sql); // MySQLへの接続を閉じる mysql_close($connect) or die("MySQL切断に失敗しました。"); ?> |
細かいことはコメントに書いてあるので、それを読めばどのような処理をしているかは分かるかと思います。
なお、今回はDBとして以下のようなテーブルを用意しました。
主キーとして、今回はテキトーにtimestampを格納しておきました(笑)
なお、各ソースはgithubにアップしてあります。 git@github.com:pinkroot/php-ajax-mysql-sample.git
挙動
まず、index.htmlにアクセスするとsubmitボタンが表示されます。
このボタンを押すと、画面がリロードされることなく、alertが表示され、ウラではDBに情報が格納されます。
実際にデータベースの中身を見に行くと、param1, param2とやらが格納されているのが確認できます。
あとは、この渡しているparamを可変な何かにしてしまえば、自分の渡したいパラメータをページのリロード無しでDBに格納することができます。
参考にしたサイト
PHPプログラミング初心者入門講座 – PHPからMySQLデータベースに接続する方法
[jQuery]postメソッドとajaxメソッドを使ってPOST送信を行うサンプル
JQueryとPHPで作るシンプルなAJAX PHPで簡単なAjaxプログラムを作ろう (その1)
コメント
Comments are closed.