MySQL,PHPについての質問です。
phpmyadmin(テーブル名XXX)を使った
掲示板を作ろうとしているのですが、
投稿した後にそのままページ更新をした際同じ投稿がされるのを防ぎたいのですができなくて困っています。
下記の記述途中のコードのどこにどのような関数を置けばいいのかがわかりません。
自分の浅い知識の中で、今までが調べた中では、header('Location:絶対パス',true,303);
を置けば上記のリロードによる二重送信を防止できるのではないかと思い、何度も位置を変え記述を変えしているのですが、上手くいきません。
ご回答してくださる方がいれば幸いです。
よろしくお願いします。
PHP
1index.php 2 3<body> //名前とコメントの投稿フォーム 4<form method="POST" action="<?php echo($_SERVER['PHP_SELF']); ?>"> 5<input type="hidden" name="id"> 6<input type="text" name="name" placeholder="名前"><br> 7<input type="text" name="comment" placeholder="コメント"> 8<input type="submit" value="投稿"> 9</form> 10 11<?php 12try { if($_SERVER['REQUEST_METHOD'] === 'POST') { 13//SQLに接続 14$pdo = new PDO($dsn, $user, $password); 15$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 16$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 17//データベースに追加 18$sql = "INSERT INTO XXX (id, name, comment) VALUES (:id, :name, :comment)"; 19 20$stm = $pdo->prepare($sql); 21 22$stm->bindValue(':id', $id, PDO::PARAM_INT); 23$stm->bindValue(':name', $name, PDO::PARAM_STR); 24$stm->bindValue(':comment', $comment, PDO::PARAM_STR); 25$stm->execute(); 26 27header('Location:絶対パス',true,303); 28} 29else{ 30// データベースから全ての投稿を取り出して、ページに表示 31$sql = "SELECT * FROM XXX"; 32$stm = $pdo->prepare($sql); 33$stm->execute(); 34$result = $stm->fetchAll(PDO::FETCH_ASSOC); 35 36foreach ($result as $row) { 37echo ($row['name']); 38echo ($row['comment']); 39 40} 41} 42} catch (Exception $e) { 43echo 'エラーがありました。<br>'; 44echo $e->getMessage(); 45} 46?> 47 48 49</body>
回答3件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2016/12/21 03:51
2016/12/21 05:35