フォームの値をデータベースに保存する
フォームの値をデータベースに保存する
phpmyadminを使用してphpとデータベースの紐付けを行なっているが、接続はできているはずなのに、データベースに保存ができていない。
例)
phpで作成した、お問い合わせフォームとデータベースの紐付けを行なっています。データベースとの紐付けができていないからか、insert.phpに入力された文字列をDBに保存するテストは行っているがphpmyadmin上に更新されていない。
発生している問題・エラー
接続成功
Notice: Undefined variable: stmt in /Applications/MAMP/htdocs/04_php_form/cafe/mainte/insert.php on line 35
Fatal error: Uncaught Error: Call to a member function execute() on null in /Applications/MAMP/htdocs/04_php_form/cafe/mainte/insert.php:35 Stack trace: #0 {main} thrown in /Applications/MAMP/htdocs/04_php_form/cafe/mainte/insert.php on line 35
phpmyadmin
https://i.gyazo.com/21f0458f8cfc28f3d1b5fa1f8913c2ac.png
イメージとしては以下
https://i.gyazo.com/d06509b70d46807393fb81ddd16d4caf.png
該当するソースコード
<?php
session_start();
$_SESSION = array();
session_destroy();
$referer = $_SERVER['HTTP_REFERER'];
$url = "confirm.php";
if(!strstr($referer,$url)){
header("Location: contact.php");
exit;
}
$_POST = $_SESSION;
//DBの接続
//DBへの保存
?>
<?php include 'layouts/header.php'; ?>
<section>
<div class="form" style= "margin-top:50px; margin-bottom:50px;">
<div class="form-title">
<h1 style="text-align:center;">お問い合わせ</h1>
</div>
<div class="complete-main">
<p class=complete-text>
お問い合わせ頂きありがとうございます。<br>
送信頂いた件につきましては、当社より折り返しご連絡を差し上げます。<br>
なお、ご連絡までに、お時間を頂く場合もございますので予めご了承ください。
</p>
<div class="top">
<a href="index.php">トップへ戻る</a>
</div>
</form>
</div>
</div>
</section>
<?php include 'layouts/footer.php'; ?>
該当するソースコード
<?php
const DB_HOST = 'mysql:dbname=cafe;host=localhost;charset=utf8';
const DB_USER = 'php_user';
const PASSWORD = 'ykb02566';
//例外処理Exeption
try{
$pdo = new PDO(DB_HOST,DB_USER,PASSWORD, [
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, //連想配列
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, //例外
PDO::ATTR_EMULATE_PREPARES => false, //SQLインジェクション対応
]);
echo '接続成功';
} catch(PDOException $e){
echo '接続失敗' . $e->getMessage()."\n";
exit();
}
?>
該当するソースコード
<?php
//DB接続 PDO
require 'db_connection.php';
// $sql = 'select * from contacts where id = 1'; //sql
// $stmt = $pdo->query($sql); //sqlステートメント
// $result = $stmt->fetchall();
// echo '<pre>';
// var_dump($result);
// echo '</pre>';
//ユーザー入力あり prepare, bind, execute 悪意ユーザー delete * SQLインジェクション
$sql = 'select * from contacts where id = id;'; //名前つきプレースホルダー
$stmt = $pdo->prepare($sql);
$stmt->bindValue('id', 5, PDO::PARAM_INT);//紐付け
$stmt->execute();//実行
$result = $stmt->fetchall();
echo '<pre>';
var_dump($result);
echo '</pre>';
$pdo->beginTransaction();
try{
//sql処理
$stmt = $pdo->prepare($sql);
$stmt->bindValue('id', 5, PDO::PARAM_INT);//紐付け
$stmt->execute();//実行
$pdo->commit();
}catch(PDOException $e){
$pdo->rollback();
}
該当するソースコード
<?php
//DB接続PDO
require '/Applications/MAMP/htdocs/04_php_form/cafe/db_connection.php';
//入力 DB保存 prepare, bind, execute
// 入力 DB保存
$params = [
'id' => null,
'name' => 'はなやねん',
'kana' => 'ナマエ',
'tel' => '0506039300',
'email' => 'test@test',
'body' => 'こんにちは',
'created_at' => null
];
$count = 0;
$columns = ',';
$values = ',';
foreach(array_keys($params) as $key){
if($count++>0){
$columns .=',';
$values .=','; db
}
$columns .= $key;
$values .= ':'.$key;
}
$sql = 'insert into contacts ('.$columns.')values('.$values.')';
// var_dump($sql);
// exit;
$stmt->execute($params);
自分で試したこと
https://teratail.com/questions/282730
なぜ、データベースと接続ができていないのか、わからないためどなたかご教授願います。