PHP フォームからMySQLへ接続してselectする

PHPのフォームからMySQLへ接続してselectするサンプルです。
XAMPPのMySQL(MariaDB)を使用します。

確認環境
・PHP 7.2.8
・XAMPP 7.2.8

目次

目的 やりたいこと
コード 値を送信する側のファイル
  値を受け取る側のファイル
環境 接続先のデータベースとテーブル

やりたいこと

画面の入力欄に数値を入力して送信ボタンを押すと、MySQLから値を取得して画面に表示します。

1.テキストボックスに数値(キー)を入力して送信ボタンを押します。

2.入力値を元にMySQLのテーブルのデータを検索し該当のデータを表示します。

 

使用するPHPのファイル

2つのファイルを使用します。

1つめは、index.phpで値を送信する側のファイルです。画面でテキストを入力しsubmitを行って値を送信します。

2つめは、testform.phpで値を受け取る側のファイルです。index.phpから値を受け取ってMySQLを検索し画面に表示します。

サンプルでは、E:\xampp\htdocsフォルダ配下にtest1フォルダを作成しその中に上記2ファイルを配置しました。
ブラウザのURL欄には、http://localhost/test1/と入力するとindex.phpの画面が表示されます。

値を送信する側のファイル

値を送信する側のファイルです。(index.php)

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>submit</title>
</head>
<body>
  <form method="post" action="testform.php">
    <input type="text" name="id">
    <input type="submit" value="送信ボタン">
  </form>
</body>
</html>

8行目は、methodでpost方式を指定し、actionで送信先(testform.php)を指定します。
このサンプルでは、testform.phpとindex.phpは同じフォルダに配置しています。
9行目は、テキストボックスです。画面から文字を入力します。
10行目は、送信ボタンです。ボタンを押すとsubmitが行われます。
※実運用を行う場合はこれ以外にセキュリティの対策が必要です。

値を受け取る側のファイル

値を受け取る側のファイルです。(testform.php)
index.phpから値を受け取ってMySQLを検索し画面に表示します。

<?php
// DB接続情報
$dsn = 'mysql:host=localhost;dbname=testphp;charset=utf8mb4';
$username = 'root';
$password = '';

// POSTデータを受け取る
$id = $_POST['id'];

// try-catch
try{
	// データベースへの接続を表すPDOインスタンスを生成
	$pdo = new PDO($dsn,$username,$password);

	//  SQL文 :idは、名前付きプレースホルダ
	$sql = "select * from syain where id = :id";

	// プリペアドステートメントを作成
	$stmt = $pdo->prepare($sql);

	// プレースホルダと変数をバインド
	$stmt -> bindParam(":id",$id);
	$stmt -> execute(); //実行

	// データを取得
	$rec = $stmt->fetch(PDO::FETCH_ASSOC);

	// 接続を閉じる
	//$pdo = null; スクリプト終了時に自動で切断されるので不要
}catch (PDOException $e) {
	// UTF8に文字エンコーディングを変換します
	exit(mb_convert_encoding($e->getMessage(),'UTF-8','SJIS-win'));   
}
function escape1($str)
{
    return htmlspecialchars($str,ENT_QUOTES,'UTF-8');
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>select</title>
</head>
<body >

<?php foreach ($rec as $a):?>
	<?=escape1($a)?>
<?php endforeach; ?>

</body>
</html>

16行目は、名前付きプレースホルダを使用したSQLです。(:名称)の箇所が名前付きプレースホルダです。
22行目は、8行目の変数を16行目のプレースホルダにバインドしています。

プレースホルダ

  • SQLにある(:名称)は、名前付きプレースホルダです。
    →疑問符(?)のプレースホルダのやり方もあります。
  • 動的に値をセットできます。
  • 入力される不正な文字を抑止できるのでSQLインジェクション対策になります。
  • 固定文字列のSQLの部分がプリコンパイルされるので実行速度が上がります。
  • place=場所、holder=入れものです。

htmlspecialchars関数

PDO::FETCH_ASSOC

接続先のデータベースとテーブル

XAMPPのMySQLを使用しています。
XAMPPのインストール方法と、XAMMPのMySQLにデータベースとテーブルを作成する方法は以下を参照願います。

XAMPP インストールとHello Worldを表示
XAMPP phpMyAdminでデータベースを作成/削除する手順
XAMPP phpMyAdminでテーブルを作成/データを登録する

関連の記事

PHP MySQLへ接続してselectするサンプル
PHP MySQLへ接続してinsert/update/deleteする
PHP GET/POSTでフォームの値を別画面に渡す

△上に戻る