前提・実現したいこと
一言掲示板を作成しています。
リロードによる二重送信をさせないようにしたいです。
発生している問題・エラーメッセージ
リロードすると二重投稿されてしまいます。
該当のソースコード
php
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>Document</title> 8</head> 9<body> 10 <form action="index.php" method="post"> 11 <label for="comment">投稿者</label> 12 <input type="text" name="name"> 13 <br> 14 <label for="comment">内容</label> 15 <input type="text" id="comment" name="content"> 16 <input type="submit"> 17 </form> 18 19<?php 20 21//DBへの接続 22$dsn = 'mysql:dbname=board; host=localhost'; 23$username= 'root'; 24$password= 'root'; 25 26try{ 27 $dbh = new PDO($dsn, $username, $password); 28 $sql = "INSERT INTO boards (name, content) VALUES(:name, :content)"; 29 $stmt = $dbh->prepare($sql); 30 $params = array(':name' => $_REQUEST['name'], ':content' => $_REQUEST['content']); 31 $stmt->execute($params); 32} catch(PDOException $e){ 33 echo "失敗:" . $e->getMessage() . "\n"; 34 exit(); 35} 36 37$sql = "SELECT * FROM boards ORDER BY id DESC"; 38$stmt = $dbh->query($sql); 39 40 echo "<table>"; 41 echo "<tr>"; 42 echo "<th>Id</th><th>お名前</th><th>メッセージ</th>\n"; 43 echo "</tr>"; 44 foreach ($stmt as $user) { 45 echo "<tr>"; 46 echo "<td>" . $user['id'] . "</td>"; 47 echo "<td>" . $user['name'] . "</td>"; 48 echo "<td>" . $user['content'] . "</td>"; 49 echo "<td>" . "<a href=edit.php?id=" . $user['id'] . ">編集</a>" . "</td>"; 50 echo "<td>" . "<a href=delete.php?id=" . $user['id'] . ">削除</a>" . "</td>"; 51 echo "</tr>"; 52 } 53 echo "</table>"; 54 55?> 56</body> 57</html>
試したこと
以下のコードをINSERT文の後の方に記述しても防止はできませんでした。
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
header('Location: http://localhost:8888/board/');
}
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。