前提・実現したいこと
フォームのデータをデータベースに入れる練習をしています。
送信するとデータに登録するまではできたのですが、フォーム画面と送信完了画面をF5で更新すると、それだけでデータベースに空のデータが保存されるのをやめたいです。
おそらく最初の接続のところで送信の処理をしているような気がするのですが、まだ理解できていない部分が多くどこでその処理をしているのかがわかりません。
form.php・・・フォーム(更新すると空のデータが保存される)
confirm.php・・・確認
formend.php・・・完了画面(更新すると空のデータが保存される)
form.php
<?php // データソースを変数に格納 $dsn = 'mysql:host=○○;dbname=○○;charset=utf8'; // ユーザー名/PASS $user = '○○'; $password = '○○'; // SQL接続 // PDOの処理を記述 try { $dbh = new PDO($dsn, $user, $password); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // SQL作成 $sql = "SELECT * FROM テーブル名"; // SQL実行 $res = $dbh->query($sql); // エラー処理 } catch (PDOException $e) { // 強制終了 exit('データベース接続失敗。'.$e->getMessage()); } // データの追加 $sql = "INSERT INTO テーブル名 (date, title, content) VALUES('".$date."', '".$title."', '".$content."')"; $stmt = $dbh -> prepare($sql); $stmt -> execute(); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form action="confirm.php" method="post"> <div> <dl> <dt>日付</dt> <dd><input type="date" name="date" required></dd> </dl> <dl> <dt>タイトル</dt> <dd><input type="text" name="title" required></dd> </dl> <dl> <dt>内容</dt> <dd><textarea name="content" cols="30" rows="10" required></textarea></dd> </dl> <input type="submit" value="確認"> </div> </form> </body> </html>
confirm.php
<?php session_start(); $date = htmlspecialchars($_POST['date'], ENT_QUOTES, 'UTF-8'); $title = htmlspecialchars($_POST['title'], ENT_QUOTES, 'UTF-8'); $content = htmlspecialchars($_POST['content'], ENT_QUOTES, 'UTF-8'); $_SESSION['date']=$date;//セッション変数に格納 $_SESSION['title']=$title; $_SESSION['content']=$content; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form action="formend.php" method="post"> <div> <dl> <dt>日付</dt> <dd><?php echo $date;?></dd> </dl> <dl> <dt>タイトル</dt> <dd><?php echo $title;?></dd> </dl> <dl> <dt>内容</dt> <dd><?php echo $content;?></dd> </dl> <input type="submit" value="登録"> </div> </form> </body> </html>
formend.php
<?php session_start(); $date = htmlspecialchars($_SESSION['date'], ENT_QUOTES, 'UTF-8'); $title = htmlspecialchars($_SESSION['title'], ENT_QUOTES, 'UTF-8'); $content = htmlspecialchars($_SESSION['content'], ENT_QUOTES, 'UTF-8'); // データソースを変数に格納 $dsn = 'mysql:host=○○;dbname=○○;charset=utf8'; // ユーザー名/PASS $user = '○○'; $password = '○○'; // SQL接続 // PDOの処理を記述 try { $dbh = new PDO($dsn, $user, $password); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // SQL作成 $sql = "SELECT * FROM テーブル名"; // SQL実行 $res = $dbh->query($sql); // エラー処理 } catch (PDOException $e) { // 強制終了 exit('データベース接続失敗。'.$e->getMessage()); } //データ追加 $sql = "INSERT INTO テーブル名 (date, title, content) VALUES('".$date."', '".$title."', '".$content."')"; $stmt = $dbh-> prepare($sql); $stmt -> execute(); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <p>登録完了</p> <p><a href="">一覧に戻る</a></p> </body> </html>
回答2件
あなたの回答
tips
プレビュー