00メニュー > 01はじめてのMySQL > 02MySQLの基礎知識 > 03MySQLを使いこなす > 04MySQL+PHPの基礎 > 05MySQL+PHPの実践 > 06Appendix

19PHPとMySQLで簡単掲示板を作る(備忘録)→ > 01p > 02p > 03p > 04p > 05p > END

05MySQL+PHPの実践

PHPを使ってMySQLへアクセスできるようになったら、今度は簡単なWebアプリケションを作ってMySQLと連携してみましよう。ここでは、PHPとMySQLと連携してみましよう。ここでは、PHPとMySQLを使って掲示板の作成、そしてインターンネットに公開するときの注意点など勉強します。
★CHAPTER19⇒PHPとMySQLで簡単掲示板を作る
☆CHAPTER20⇒インターネットに公開するときの対策
☆CHAPTER21⇒ちょつと実用掲示板の作成

★CHAPTER19⇒PHPとMySQLで簡単掲示板を作る(p432) ★

  いよいよ、MySQLとPHPを連携させるWebアプリケーションの作成です。ここまでの復習、そしてまとめとして、簡単な掲示板を作ってみることにしましよう。

(1)《簡単掲示板を作る p432》

(1-1)<簡単掲示板の構成>

データベースに接続して「レコードを表示」「氏名とメッセージを書き込む」「レコードを削除」「レコードを検索」といった4つの簡単な処理を行なうWebアプリケーションです。

(1-2)<データベースとテーブルを作る>

最初に、このWebアプリケーションで操作するテーブルを作ります。ここでは、次のようなテーブル「tbk」を、データベース「db1」に作成します。

●テーブル「tbk」(簡単な掲示板メッセージテーブル)

【画像】 ※テーブル「tbk」を構成するカラムは「番号」「氏名」「メッセージ」用として、それぞれ「bang」「nama」「mess」3つを設定します。カラム「bang」には、連続番号機能を付けます。 ※あらかじめ、MySQLモニタを起動して、テーブル「tbk」を作成してください。

(1-3)<簡単掲示板のファイル構造>

この簡単掲示板には、メッセージの「表示」「挿入」「削除」「検索」という4つの機能があります。

●ここで作成するサンプル

C\--xampp-htdocs-kantan_select.php→レコードを表示
      -kantan_insert.php→レコードを挿入
      -kantan_delete.php→レコードを削除
      -kantan_search.php→レコードを検索
      -kantan.html→上の4つのスクリプトを実行

●簡単掲示板の構造

※省略

(2)《トップページの作成 p000》

(2-1)<メッセージ表示のスクリプトを呼び出すフォーム>

最初は「表示」機能の呼び出しです。テーブル「tbk」のすべてのレコードを表示するスクリプト「kantan_select.php」を呼ぶ出すフォームを作成します。
この簡単掲示板では、すべてPOST送信を設定することにします。
※表示機能を呼ぶ出すフォームは次のようになります。
<FORM METHOD="post" ACTION="kantan_select.php">
メッセージを表示します<BR>
<INPUT TYPE="submit" VALUE="メッセージ表示">
</FORM>

(2-2)<挿入のスクリプトを呼び出すフォーム>

次に「挿入」機能の呼び出しです。レコードを挿入するスクリプト「kantan_insert.php」を呼び出すフォームを作成します。
FORMタグは、対象になるPHPファイルの指定部分だけを変更して「<FORM METHOD="post" ACTION="kantan_insert.php">」となります。
氏名とメッセージを入力するテキストボックスを作成し、「データを識別する名前」をNAME属性で設定。(「NAME="a1"」「NAME="a2"」)とします。
<FORM METHOD="post" ACTION="kantan_insert.php">
名前を入力して<INPUT TYPE="text" NAME="a1"><BR>
メッセージを入力して<INPUT TYPE="text" NAME="a2" SIZE=150><BR>
<INPUT TYPE="submit" VALUE="メッセージ送信">
</FORM>

(2-3)<削除のスクリプトを呼び出すフォーム>

「削除」機能の呼び出しです。レコードを削除するスクリプト「kantan_delete.php」を呼び出すフォームを作成します。
削除するメッセージの番号をテキストボックスに入力させます。このテキストボックスは「NAME="b1"」を設定します。
<FORM METHOD="post" ACTION="kantan_delete.php">
削除する番号を入力して<INPUT TYPE="text" NAME="b1"><BR>
<INPUT TYPE="submit" VALUE="削除番号送信">
</FORM>

(2-4)<検索のスクリプトを呼び出すフォーム>

最後は、「検索」機能の呼び出しです。メッセージを検索するスクリプト「kantan_search.php」を呼び出すフォームを作成します。
※検索するキーワードをテキストボックスに入力させます。このテキストボックスには「NAME="c1"」を設定します。
<FORM METHOD="post" ACTION="kantan_search.php">
検索のキーワードを入力して<INPUT TYPE="text" NAME="c1"><BR>
<INPUT TYPE="submit" VALUE="検索">
</FORM>

(2-5)<トップページを作成する>

トップページ「kantan.html」を作成しましょう。 「表示」「挿入」「削除」「検索」の各機能を持つPHPスクリプトを呼び出すWebページ「kantan.html」を作成し、公開されるフォルダ(ここでは「c:\xampp\htdocs」)に保存してください。

<FORM METHOD="post" ACTION="kantan_select.php">
メッセージを表示します<BR>
<INPUT TYPE="submit" VALUE="メッセージ表示">
</FORM>

<FORM METHOD="post" ACTION="kantan_insert.php">
名前を入力して<INPUT TYPE="text" NAME="a1"><BR>
メッセージを入力して<INPUT TYPE="text" NAME="a2" SIZE=150><BR>
<INPUT TYPE="submit" VALUE="メッセージ送信">
</FORM>

<FORM METHOD="post" ACTION="kantan_delete.php">
削除する番号を入力して<INPUT TYPE="text" NAME="b1"><BR>
<INPUT TYPE="submit" VALUE="削除番号送信">
</FORM>

<FORM METHOD="post" ACTION="kantan_search.php">
検索のキーワードを入力して<INPUT TYPE="text" NAME="c1"><BR>
<INPUT TYPE="submit" VALUE="検索">
</FORM>

(3)《表示・挿入・削除・検索機能の作成 p000》

トップページが完成しました。続いて、「表示」「挿入」「削除」「検索」の各機能を処理する部分を作成します。

(3-1)<データデース接続・選択・切断の共通部分>

今度は、トップページから呼び出されるPHPファイルを作成します。
「表示」「挿入」「削除」「検索」の4つのスクリプトのすべてで、「データベース接続」「全レコード表示」「データベース切断」という3つを実行します。
共通となる3つの機能のスクリプトを考えてみよう。まず、データベースの接続と切断のスクリプト、またデータベースを選択するスクリプトと同じです。
従って、共通部分は次のようになります。 "; mysql_select_db("db1"); //・・・機能ごとのスクリプト・・・// mysql_close($s); ?>

(3-2)<レコード表示のPHPスクリプト>

はじめにボタンをクリックすると単純にテーブル「tbk」の全レコードを表示するPHPスクリプトを考えてみよう。
※SQL文だけを考えてみると、「SELECT * FROM tbk」とすればよさそうです。しかし、これではどのような順番にレコードが表示されるかわかりません。そこで、ここではカラム「bang」の順に表示されるように、「CRDER BY bang」を付けておきましょう。

■kantan_select.php

<?php
$s=mysql_connect("localhost","root","1234") or die("失敗しました");
print "接続OK!<BR>";
mysql_select_db("db1");
$re=mysql_query("SELECT * FROM tbk ORDER BY bang");
while($kekka=mysql_fetch_array($re)){
print $kekka[0];
print " : ";
print $kekka[1];
print " : ";
print $kekka[2];
print "<BR>";
}
mysql_close($s);
print "<BR><A HREF='kantan.html'>トップメニューに戻ります</A>";
?>
※「kantan_select.php」のファイル名で作成し、公開されるフォルダに保存してください。

(3-3)<レコード挿入のスクリプト>

今度は、氏名とメッセージを挿入するスクリプトです。 トップページにある「NAME="a1"」および「NAME="a2"」の各テキストボックスには、氏名とメッセージが入力されます。 挿入用スクリプト「kantan_insert.php」はこの2つのデータを受渡し、カラム「nama」とカラム「mess」に挿入します。 ※送り側の「kantan.html」からのデータは、「$_POST["a1"]」、「$_POST["a2"]」で受け取ることができます。「」や「」が何回も登場すると複雑になってしますので、受け取った2つのデータ「$_POST["a1"]」と「$_POST["a2"]」を、それぞれ「$a1_d」と「$a2_d」という変数に代入します。 ・詳細は省略P441~442参照

■kantan_insert.php

<?php
$s=mysql_connect("localhost","root","1234") or die("失敗しました");
print "接続OK!<BR>";
mysql_select_db("db1");
$a1_d=$_POST["a1"];
$a2_d=$_POST["a2"];
mysql_query("INSERT INTO tbk (nama,mess) VALUES ('$a1_d','$a2_d')");
$re=mysql_query("SELECT * FROM tbk ORDER BY bang");
while($kekka=mysql_fetch_array($re)){
print $kekka[0];
print " : ";
print $kekka[1];
print " : ";
print $kekka[2];
print "<BR>";
}
mysql_close($s);
print "<BR><A HREF='kantan.html'>トップメニューに戻ります</A>";
?> ※「kantan_insert.php」のファイル名で作成し、公開されるフォルダに保存してください。

(3-4)<レコード削除のPHPスクリプト>

次に、レコードを削除するスクリプトです。テキストボックス「NAME="b1"」に入力されたデータを「kantan_delete.php」が受信し、テーブル「tbk」のカラム「bang」に一致するレコードを削除します。送り側の「kantan.html」からのデータは「$_POST["b1"]」で受け取ることができます。これを一度、変数「$b1_d」に代入します。 ・詳細省略P443を参照

■kantan.delete.php

<?php
$s=mysql_connect("localhost","root","1234") or die("失敗しました");
print "接続OK!<BR>";
mysql_select_db("db1");
$b1_d=$_POST["b1"];
mysql_query("DELETE FROM tbk WHERE bang=$b1_d");
$re=mysql_query("SELECT * FROM tbk ORDER BY bang");
while($kekka=mysql_fetch_array($re)){
print $kekka[0];
print " : ";
print $kekka[1];
print " : ";
print $kekka[2];
print "<BR>";
}
mysql_close($s);
print "<BR><A HREF='kantan.html'>トップメニューに戻ります</A>";
?>
※「kantan.delete.php」のファイル名で作成し、公開されるフォルダに保存してください。

(3-5)<レコード検索のスクリプト>

最後に、カラム「mess」に指定した文字列が含まれるレコードを抽出するスクリプトです。 テキストボックス「NAME="c1"」に入力されたデータを「kantan_search.php」が受信し、「カラムmessにその文字列を含むレコード」を抽出します。 ※送り側の「kantan.html」からのデータは「$_POST["c1"]」で受け取り、変数「$c1_d」に代入しておきます。 ・詳細省略P445参照

■kantan_search.php

<?php
$s=mysql_connect("localhost","root","1234") or die("失敗しました");
print "接続OK!<BR>";
mysql_select_db("db1");
$c1_d=$_POST["c1"];

$re=mysql_query("SELECT * FROM tbk WHERE mess LIKE '%$c1_d%'");
while($kekka=mysql_fetch_array($re)){
print $kekka[0];
print " : ";
print $kekka[1];
print " : ";
print $kekka[2];
print "<BR>";
}
mysql_close($s);
print "<BR><A HREF='kantan.html'>トップメニューに戻ります</A>";
?>
※「kantan_search.php」のファイル名で作成し、公開されるフォルダに保存してください。

(3-6)<4つのファイルの動作確認>

「kantan.html」「kantan_select.php」「kantan_insert.php」「kantan_delete.php」「kantan_search.php」のすべてが公開されるフォルダに保存されたら、MYSQLとApacheの動作を確認し、簡単掲示板を使ってみよう。

<まとめ>

●PHPとMySQLを使ったWebアプリケーションの作成
●表示、挿入、削除、検索の各機能を持つスクリプトを呼び出すフォームの作成
●表示、挿入、削除、検索の機能を持つスクリプトの作成方法

<チェック>

□PHPとMySQLを利用したWebアプリケーションを作る手順を理解している
□オリジナルの簡単な掲示板システムを作ることができる

<練習問題>

問題1
本文で作成した「kantan_select.php」「kantan_insert.php」「kantan_delete.php」「kantan_search.php」を1つにまとめた「kantan_syori.php」、およびそのトップページとなる「kantan2.html」を、次のように作成してください。
・kantan2.html(トップページ)
hidden属性を持つ<INPUT>タグを使って、「表示」なら「sel」、「挿入」なら「ins」、「削除」なら「del」、「検索」なら「ser」の文字を含めて送信し、4つの処理を「kantan2_syori.php」に実行させることのできるように、kanntan.htmlを改良する。
・kantan2.syori.php(処理するPHPスクリプトファイル)
「kantan2.html」から送信された「sel」「ins」「del」「ser」の文字を使って、switch~case~で分岐し、「表示」「挿入」「削除」「検索」の4つの処理が行なえるPHPファイル。

《解答1》

①次のHTMLファイル「kanntan2.html」を作成します。>

■「kantan2.html」

<FORM METHOD="post" ACTION="kantan2_syori.php">
掲示板を表示します<BR>
<INPUT TYPE="submit" VALUE="掲示板表示">
<INPUT TYPE="hidden" NAME="h" VALUE="sel">
</FORM>
<HR>

<FORM METHOD="post" ACTION="kantan2_syori.php">
氏名を入力して<INPUT TYPE="text" NAME="a1"><BR>
メッセージを入力して<INPUT TYPE="text" NAME="a2" SIZE=150><BR>
<INPUT TYPE="submit" VALUE="送信">
<INPUT TYPE="hidden" NAME="h" VALUE="ins">
</FORM>

<HR>

<FORM METHOD="post" ACTION="kantan2_syori.php">
削除する番号を入力して<INPUT TYPE="text" NAME="b1"><BR>
<INPUT TYPE="submit" VALUE="送信">
<INPUT TYPE="hidden" NAME="h" VALUE="del">
</FORM>

<HR>

<FORM METHOD="post" ACTION="kantan2_syori.php">
検索のキーワードを入力して<INPUT TYPE="text" NAME="c1"><BR>
<INPUT TYPE="submit" VALUE="検索">
<INPUT TYPE="hidden" NAME="h" VALUE="ser">
</FORM>

②次のスクリプトを作成します。

■「kantan2_syori.php」

<?php
/*************** データベースへ接続、データベース選択 ***************/
$s=mysql_connect("localhost","root","1234") or die("失敗です");
mysql_select_db("db1",$s);

/*************** NAMEがhのVALUEを変数$h_dに代入 ***************/
$h_d=$_POST["h"];


/*************** $h_dがsel、ins、del、serのどれかで条件分岐 ***************/
switch("$h_d"){
case "sel":
$re=mysql_query("SELECT * FROM tbk ORDER BY bang");
break;
case "ins":
$a1_d=$_POST["a1"];
$a2_d= $_POST["a2"];
mysql_query("INSERT INTO tbk (nama,mess) VALUES ('$a1_d','$a2_d')");
$re=mysql_query("SELECT * FROM tbk ORDER BY bang");
break;
case "del":
$b1_d=$_POST["b1"];
mysql_query("DELETE FROM tbk WHERE bang=$b1_d");
$re=mysql_query("SELECT * FROM tbk ORDER BY bang");
break;
case "ser":
$c1_d=$_POST["c1"];
$re=mysql_query("SELECT * FROM tbk WHERE mess LIKE '%$c1_d%' ORDER BY bang");
break;
}

/*************** クエリの結果を表示 ***************/
while($kekka=mysql_fetch_array($re)){
print $kekka[0];
print " : ";
print $kekka[1];
print " : ";
print $kekka[2];
print "<BR>";
}

/*************** データベース切断 ***************/
mysql_close($s);

/*************** トップページへのリンク ***************/
print "<BR><A HREF='kantan2.html'>トップメニューに戻ります</A>";
?>