HTMLの入力フォームから名前と年齢を入力します。
登録ボタンを押すとそのデータがMySQLに追加させたいです。
MySQLにデータがINSERTできません。
わからないことは、プリペアドステートメントでSQLを生成するところで
名前と年齢の2つの値をセットしたいです。
名前と年齢を固定にした
database3.php
を実行するとデータは入力できているのですが、
入力フォームから任意で入力された値を追加できません。
ご教示よろしくお願いします。
入力フォーム:database1.html
<!DOCTYPE html> <html> <head> <title>データを入力する</title> <meta charset="utf-8"> </head> <body> <?php $username=filter_input(INPUT_POST,"yourname",FILTER_VALIDATE_REGEXP,["options"=>["regexp"=>"/^.{1,10}$/"]]); $yourold=filter_input(INPUT_POST,"yourold",FILTER_VALIDATE_INT); var_dump($username,$yourold); ?> <h1>フォーム画面</h1> <form action="database2.php" method="post"> 名前を入力:<input type="text" name="yourname"> 年齢を入力:<input type="text" name="yourold"> <input type="submit" value="登録する"> </form> </body> </html>
DB操作:database2.php
<?php <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> </head> <body> <?php // エラー表示なし //ini_set('display_errors',0); // エラー表示あり ini_set('display_errors',1); header("Content-type: text/html; charset=utf-8"); // PHPのエラーを表示するように設定 error_reporting(E_ALL & ~E_NOTICE); // ポストにデータがあるかどうか if(empty($_POST)) { echo "<a href='database1.html'>database1.html</a>←こちらのページからどうぞ"; }else{ // 名前入力チェック if (isset($_POST["yourname"])) { $name=filter_input(INPUT_POST,"yourname",FILTER_VALIDATE_REGEXP,["options"=>["regexp"=>"/^.{1,10}$/"]]); } if (is_null($name)) { }else { } // 年齢入力チェック if (isset($_POST["yourold"])) { $old=filter_input(INPUT_POST,"yourold",FILTER_VALIDATE_INT); } if (is_null($old)) { }else { } //var_dump($old); try{ // DB情報 $host='localhost'; $db='db_boy'; $user='boy'; $pass='boy1234'; // インプット値 $i_user = (string)filter_input(INPUT_POST, $name); $i_pass = (string)filter_input(INPUT_POST, $old); // charsetを指定 $options = array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET CHARACTER SET 'utf8'"); // DBに接続 $pdo=new PDO("mysql: host=$host; dbname=$db", $user, $pass, $options); // PDOの属性:例外を投げる $pdo -> setAttribute( PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION); // PDOの属性:プリペアドステートメントのエミュレーションを無効 $pdo -> setAttribute( PDO :: ATTR_EMULATE_PREPARES, false); // 接続確認 if ($pdo) { //echo "データベースに接続しています" } else { echo "データベースに接続できません"; } // SQLの準備して、それを$stmt変数に定義 // 名前付きのプレースホルダにパラメータをバインドするには、 // プレースホルダの名前はコロン付きにすること $stmt = $pdo->prepare("INSERT INTO m_boy(name,old) VALUES (:name,:old)"); // トランザクション開始 $pdo->beginTransaction(); // プレースホルダへ実際の値を設定する $stmt->bindParam(':name', $name); $stmt->bindParam(':old', $old); // SQL実行 $stmt->execute(); // コミット $pdo->commit(); echo "登録完了"; // データベース切断 $stmt = null; $pdo = null; } catch (Exception $e) { $stmt->rollBack(); echo "失敗しました。" . $e->getMessage(); exit; } } ?> </body> </html>
DB操作(値は固定):database3.php
<?php $host="localhost"; $db="db_boy"; $user="boy"; $pass="boy1234"; $i_user = (string)filter_input(INPUT_POST, $name); $i_pass = (string)filter_input(INPUT_POST, $old); $d=new pdo("mysql: host=$host; dbname=$db", $user, $pass)or die("接続失敗"); $d -> setAttribute( PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION); $d -> setAttribute( PDO :: ATTR_EMULATE_PREPARES, false); print "接続成功<BR>"; $stmt = $d->prepare("insert into tb values('test6','60')"); $stmt->bindValue(1, $i_user); $stmt->bindValue(2, $i_pass); $stmt->execute(); ?>
回答3件
あなたの回答
tips
プレビュー