前提・実現したいこと
PHPで簡易掲示板を作成しております。構造は以下のとおりです。
dbc.php(投稿一覧表示 + 投稿フォーム) post_create.php(投稿のバリデーション + データベース操作・処理)
フォームに投稿者・本文を入力して投稿を押すと投稿一覧に内容が表示されますが、ブラウザの更新ボタンを押すと同じ内容で新たに投稿が追加されます。
これを解決したいです。
dbc.php
<!-- MySQLとPHPを接続するためのファイル --> <?php // 関数一つに一つの機能のみ持たせる // 1.データベース接続 // 2.データを取得する // 3.カテゴリー名を表示 // 1.データベース接続 // 引数:なし // 返り値:接続結果を返す function dbConnect(){ $dsn = 'mysql:host=157.112.147.201; dbname=ppftest_db; charset=utf8'; $user = 'ppftest_user'; $pass = 'N4xib5Xr'; // 接続成功したときと失敗したときの分岐処理 try{ $dbh = new PDO($dsn, $user, $pass,[ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ]); } catch(PDOException $e){ echo '接続失敗'. $e->getMessage(); exit(); }; return $dbh; } // 2.データを取得する // 引数:なし // 返り値:取得したデータ function getAllPost(){ $dbh = dbConnect(); // ①SQLの準備 $sql = 'SELECT * FROM post_yamamoto'; // SQLの実行 $stmt = $dbh->query($sql); // SQLの結果を受け取る $result = $stmt->fetchall(PDO::FETCH_ASSOC); return $result; $dbh = null; } // 取得したデータを表示 $postData = getAllPost(); // 3. ユーザー名を表示 // 引数:数字 // 返り値: ユーザー名の文字列 // // function setUserName($user_name){ // if($user_name === '1'){ // return // } // } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>簡易掲示板</title> </head> <body> <h2>一覧表示機能(<?php echo count($postData); ?>件)</h2> <ul> <?php foreach ($postData as $column): ?> <!-- 投稿者・投稿日時・本文 --> <li> [<?php echo $column['post_name'] ?>] / [<?php echo $column['post_datetime'] ?>] <br> [本文] <br> <?php echo $column['post_text'] ?> </li><br> <?php endforeach; ?> </ul> <h2>投稿機能</h2> <form action="post_create.php" method="post"> 投稿者 <span> <input type="text" name="post_name"><br> 本文 <br> <textarea name="post_text" rows="8" cols="80"></textarea> <br> <input type="submit" name="btn_submit" value="投稿"> </form> <p> <a href="form.php">新規作成</a> </p> </body> </html>
post_create.php
<?php require_once('dbc.php'); $posts = $_POST; if (empty($posts['post_name'])){ exit('投稿者を入力してください'); } if (empty($posts['post_text'])){ exit('本文を入力してください'); } if( !empty($_POST['btn_submit']) ) { $sql = 'INSERT INTO post_yamamoto(post_name, post_text) VALUES (:post_name, :post_text)'; $dbh = dbConnect(); $dbh->beginTransaction(); try { $stmt = $dbh->prepare($sql); $stmt->bindValue(':post_name',$posts['post_name'], PDO::PARAM_STR); $stmt->bindValue(':post_text',$posts['post_text'], PDO::PARAM_STR); $stmt->execute(); // 成功した場合は登録処理を実行。 $dbh->commit(); echo '投稿成功しました!'; } catch (PDOException $e) { // 失敗した場合は元の状態に戻す。 $dbh->rollBack(); exit($e); } } ?>
試したこと
下記の対策方法をpost_create.phpに実装を試みていますがうまくいきません。
リンク内容
上記以外で良い方法があれば教えていただきたいです。
補足情報(FW/ツールのバージョンなど)
phpmyadmin
Mysql
xserver
回答1件
あなたの回答
tips
プレビュー