リスを倒す 『初めてのPHP,MySQL,JavaScript&CSS』

『初めてのPHP,MySQL,JavaScript&CSS』勉強奮闘記

10-4. PHPからデータベースを操作する④データ挿入

今日は登録画面(送信フォーム)からデータを入力してテーブルにそのデータを挿入する方法をやります。


1-1. 送信フォームの作成


送信フォームの作成には、対象になるテーブル構造に合わせる必要があるため、作成前にて^ブル構造の確認を行う必要があいます。
「show fiels from member;」を実行すると、テーブルの構造を表示します。
f:id:taro-blog2323:20160925182436p:plain

テーブルの構造が表示されたら、フォームを作成します。


<html>
<head>
<title>PHPのテスト</title>
<META http-equiv="Content-Type" content="text/htm;
charset=utf-8"
</head>
<BODY bgcolor="#FFFFFF" text="#000000">
<font size="4">PHPのテスト</font>

<FORM name ="form1" method="post" action="view.php">
氏:<br>
<INPUT type = "text" name="last_name"><br>
名:<br>
<INPUT type ="text" name="first_name"><br>
年齢:<br>
<INPUT type="text" name="age"><br>
<INPUT type="submit" valur="送信">
</FORM>
</body>
</html>

f:id:taro-blog2323:20160925184255p:plain

1-2. データベースに接続する


接続は前回やったPDOを使用します。
form.htmlのコードに、<FORM name ="form1" method="post" action="view.php">というものがありましたが、view.phpをPODクラスを使って作成します。


<html>
<head>
<title>PHPのテスト</title>
</head>
<body>
<?php
$db_user = "ユーザー名";
$db_pass = "パスワード";
$db_host = "localhost"
$db_name = "sampledb";
$db_type = "mysql";

$dsn = "$db_type:host=$db_host;
dbname=$db_name;charset=utr8";

try{
$pdo = new PDO ($dsn, $db_user, $sb_pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
print "接続しました
";
} catch(PDOException $Exception){
die('エラー:'. $Exception->getMessage());
}

DSN(データソースネーム)を変数にして組み立てて、tryブロック内で、データベースに接続しています。PDOの時にやったエラーモードを設定し、プリペアドステートメントを利用できるようにエミュレート機能をfalseにしています。

1-3. トランザクション処理


「1-2.データベースに接続する」のコードにつ付けて、トランザクション処理を設定します。


try{
$PDO->beginTransaction();
$sql = "INSERT INTO member (last_name,first_name,age)
VALUES(:last_name,:first_name,:age)";
$stmh = $pdo ->prepare($sql);
$stmh ->bindValue(':last_name',
$_POST['last_name'], PDO::PARAM_STR);
$stmh ->bindValue(':first_name',
$_POST['first_name'], PDO::PARAM_STR);
$stmh ->bindValue(':age',
$_POST['age'], PDO::PARAM_INT);
$stmh->execute();
$pdo->commit();
print "データを". $stmh->rowCount()."件、挿入しました。
";
}
catch(PDOException $Exception){
$pdo->rollBack();
print "エラー:". $Exception->getMessage();
}
?>
</body>
</html>

そして結果は、、、

f:id:taro-blog2323:20160925193808p:plain

あれ、、、、、エラーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

うーん。。。