質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

3回答

4625閲覧

php ページを戻ると[ フォーム再送信の確認]という表示が出る対処方法が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/02/14 05:08

提示コードですがsearch.phpで検索結果を表示してその結果をクリックしてthread.phpスレッドに飛ぶという動作なのですがスレッドからブラウザの戻るボタンを押して検索結果画面に戻ると以下のページが表示されるのですが[先程入力したデータが必要です。]とはどういう意味なのでしょうか?また全てのページで発生するわはなく特定ページで発生します。

イメージ説明

Search.php

php

1<html lang=ja> 2 <head> 3 <meta charset="utf-8"> 4 <link rel="stylesheet" href="style.css"> 5 <title>send</title> 6 </head> 7 <body> 8 9 10<?php 11session_start(); 12ini_set("display_errors",1); 13error_reporting(E_ALL); 14?> 15 16<?php 17 18 19 20try 21{ 22 $dsn = 'mysql:dbname=Bulletin_Board;host=localhost;charset=utf8'; 23 $dbh = new PDO($dsn,"root",""); 24 $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 25 $dbh->setAttribute(PDO::ATTR_AUTOCOMMIT, 0); 26 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 27 28 $dbh->beginTransaction(); 29 30 $sql = "SELECT id,name FROM Thread WHERE name LIKE '%" . $_POST["name"] . "%' "; 31 $stmt = $dbh->prepare($sql); 32 $stmt->execute(); 33 34 // 検索結果を列挙 35 $result = $stmt->fetchAll(); 36 if($stmt->rowCount() > 0) 37 { 38 for($i = 0; $i < $stmt->rowCount();) 39 { 40 ?> 41 42 <a href="thread.php?title=<?php echo urlencode($result[$i]['id']); ?>"> 43<?php echo $result[$i]['name'] ?> </a> <br> 44 45 46<?php 47 // print("thread.php?title=".$result[$i]["id"]); 48 $i++; 49 } 50 } 51 else 52 { 53 ?> 54 55 <h1> 該当するスレッドが見つかりません。 </h1> 56 57<?php 58 } 59} 60catch(PDOException $e) 61{ 62 die($e->getMessage()); 63} 64 65?> 66 </body> 67</html> 68
Thread.php

php

1<html lang=ja> 2 <head> 3 <meta charset="utf-8"> 4 5 <link rel="stylesheet" href="style.css"> 6 <title>send</title> 7 </head> 8 <body> 9 10<?php 11session_start(); 12$viewNum = 3; 13$pageNumber = isset($_GET["page"]) ? $_GET["page"] : NULL; 14 15$totalPageNum = 0; 16 17 18ini_set("display_errors",1); 19error_reporting(E_ALL); 20$url = isset($_GET["title"]) ? $_GET["title"] : NULL; // 21?> 22 23<?php 24try 25{ 26 27 $dsn = 'mysql:dbname=Bulletin_Board;host=localhost;charset=utf8'; 28 $dbh = new PDO($dsn,"root",""); 29 $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 30 31 32 33 //post 34 $post = null; 35 $stmt = null; 36 if($pageNumber == NULL) 37 { 38 $sql = 'SELECT comment,create_manage_id FROM Post WHERE thread_id=:id ORDER BY create_time_stamp ASC'; 39 $stmt = $dbh->prepare($sql); 40 $stmt->bindValue(':id', $url, PDO::PARAM_STR); 41 $stmt->execute(); 42 $post = $stmt->fetchAll(); 43 44 45 $t = $stmt->rowCount() % $viewNum; 46 $r = 0; 47 if($t > 0) 48 { 49 $r = $stmt->rowCount() - $t; 50 } 51 else if($t == 0) 52 { 53 $r = $stmt->rowCount() - $viewNum; 54 if($r < 0) 55 { 56 $r = 0; 57 } 58 59 } 60 else if($t < 0) 61 { 62 63 $r = 0; 64 } 65 66 67 $sql = 'SELECT comment,create_manage_id ,create_time_stamp,enable,manage_id FROM Post WHERE thread_id=:id ORDER BY create_time_stamp ASC LIMIT :limit OFFSET :offset '; 68 $stmt = $dbh->prepare($sql); 69 $stmt->bindValue(':id', $url,PDO::PARAM_STR); 70 $stmt->bindValue(':limit', $viewNum, PDO::PARAM_INT); 71 $stmt->bindValue(':offset', $r, PDO::PARAM_INT); 72 $stmt->execute(); 73 $post = $stmt->fetchAll(); 74 75 $postNum = $stmt->rowCount(); //全部のページ数 76 $pageNum = $viewNum; //1ページの表示件数 77 $totalPageNum = ceil($postNum / $pageNum); 78 79 80 81 } 82 else 83 { 84 85 $sql = 'SELECT comment,create_manage_id,create_time_stamp,enable,manage_id FROM Post WHERE thread_id=:id ORDER BY create_time_stamp ASC LIMIT :limit OFFSET :offset '; 86 $stmt = $dbh->prepare($sql); 87 $stmt->bindValue(':id', $url,PDO::PARAM_STR); 88 $stmt->bindValue(':limit', $viewNum, PDO::PARAM_INT); 89 $stmt->bindValue(':offset', $pageNumber * $viewNum, PDO::PARAM_INT); 90 $stmt->execute(); 91 $post = $stmt->fetchAll(); 92 93 //var_dump($post); 94 } 95 96 97 98 99 100} 101catch(PDOException $e) 102{ 103 die($e->getMessage()); 104} 105?> 106 107 108<!-- スレッドを列挙 --> 109<?php 110for($i = 0; $i < $stmt->rowCount(); $i++) 111{ 112 113 $sql = 'SELECT name,id FROM Account WHERE manage_id=:id'; 114 $stmt2 = $dbh->prepare($sql); 115 $stmt2->bindValue(':id',$post[$i]["create_manage_id"] , PDO::PARAM_INT); 116 $stmt2->execute(); 117 $account = $stmt2->fetch(); 118 119 120 121 if($post[$i]['enable'] == true) 122 { 123?> 124 <! --------------------- 投稿表示 ---------------------> 125 <h4> # 126 <?php echo $account['name'] ?><br> 127 128 &nbsp &nbsp &nbsp &nbsp &nbsp ID: <?php echo $account['id'] ?><br> 129 130 --------------------------------------------------------------------- </h4> 131 <p> <?php echo $post[$i]['comment'] ?> </p<br> 132 133 <h4>投稿日時: <?php echo $post[$i]['create_time_stamp'] ?> </h4> 134 135 136 <?php 137 if(isset($_SESSION['id']) == true) 138 { 139 if(strcmp($_SESSION['id'],$account['id']) == 0) 140 { 141 print($post[$i]['manage_id']); 142 ?> 143 <!-- <a href="thread.php?title=<?=$url?>&page=<?=$i?>" > <?php echo $i ?></a>&nbsp &nbsp; --> 144 145 <form action="postDelete.php?post=<?=strval($post[$i]['manage_id'])?>" $method="post"> 146 <button type="submit"> delete </button> 147 </form> 148<?php 149 } 150 } 151 ?> 152 <h4> ############################################ </h4><br> 153 <! ----------------------------------------------------> 154<?php 155 } 156 else 157 { 158?> 159 <! --------------------- 削除された投稿表示 ---------------------> 160 <!--- <h4> # 161 <?php echo $account['name'] ?><br> 162 163 &nbsp &nbsp &nbsp &nbsp &nbsp ID: <?php echo $account['id'] ?><br> --> 164 165 --------------------------------------------------------------------- </h4> 166 <p><br> ********** 削除されました。 ********** </p<br> 167 168 <!--- <h4>投稿日時: <?php echo $post[$i]['create_time_stamp'] ?> </h4> --> 169 <h4> ############################################ </h4><br> 170 <! ----------------------------------------------------> 171<?php 172 } 173} 174?> 175<br> 176<br> 177 178<?php 179 180 181 182$sql = 'SELECT * FROM Post WHERE thread_id=:id'; 183$stmt = $dbh->prepare($sql); 184$stmt->bindValue(':id', $url, PDO::PARAM_STR); 185$stmt->execute(); 186 187$postNum = $stmt->rowCount(); //全部のページ数 188$totalPageNum = ceil($postNum / $viewNum); 189 190//print($totalPageNum); 191 192if((isset($_SESSION['login']) == true) && (($pageNumber == ($totalPageNum - 1)) || (($pageNumber == NULL)))) 193{ 194?> 195 <h3>投稿</h3> 196 197 <form action="submit.php" method="post"> 198 <input type="hidden" name="title" value=<?php echo $url; ?> > 199 <input type="hidden" name="nowPage" value=<?php echo $pageNumber; ?> > 200 201 202 <p>文章</p> 203 <textarea name="comment"></textarea > 204 <br> 205 <p><button type="submit">送 信</p> 206 207 </form> 208 209<?php 210} 211else if( (isset($_SESSION['login']) == false) && ($pageNumber == $totalPageNum - 1 ) ) 212{ 213?> 214 <h3>投稿するにはログインしてください。</h3> 215 216<?php 217} 218?> 219 220<?php 221 222for($i = 0; $i < $totalPageNum; $i++) 223{ 224 //print("thread.php?title=$url?page=$i"); 225?> 226 227 <a href="thread.php?title=<?=$url?>&page=<?=$i?>" > <?php echo $i ?></a>&nbsp &nbsp; 228<?php 229 230} 231?> 232 </body> 233</html> 234

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2022/02/14 05:35 編集

Google禁止されてる環境なの?teratailのほうが禁止対象になりやすいぐらいなんだけど。 あ、前も聞いたか。
guest

回答3

0

POSTした先の画面でF5とか押せば必ず起きますよ。
ブラウザの仕様です。書かれている内容もそこまで難解とも思えません。
「このページを正しく表示するには、」という前置きがちゃんとありますし。
そして、再現方法も確立しているし、仕様部分なので、対処方法は幾らでも出てくるレベルです。
「どうすればいい?」という質問なので「幾らでも出てくるので調べればいい」です。

投稿2022/02/14 05:33

編集2022/02/14 05:34
m.ts10806

総合スコア80854

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

通常POST後は登録完了ページに移動します

//sample.php

PHP

1<?PHP 2session_start(); 3$submit=filter_input(INPUT_POST,"submit"); 4$hoge=filter_input(INPUT_POST,"hoge"); 5if($submit){ 6 $_SESSION["hoge"]=$hoge; 7 header('Location:complete.php'); 8 exit(); 9} 10?> 11<form method="post"> 12<input name="hoge" value=""> 13<input type="submit" name="submit" value="send"> 14</form>

//complete.php

PHP

1<?PHP 2session_start(); 3$hoge=isset($_SESSION["hoge"])?$_SESSION["hoge"]:null; 4session_destroy(); 5var_dump($hoge);

投稿2022/02/14 05:45

yambejp

総合スコア114968

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/02/15 13:37 編集

誤字です
guest

0

ブラウザの戻るでフォーム再送信の確認が表示される
https://teratail.com/questions/201201

[php] 「ページの有効期限切れ・フォーム再送信の確認」の対策 - Webのプルタブ
https://pulltab.info/2016/12/php-1.html

PHPの$_POSTを用いているページに戻る時に「フォーム再送信の確認... - Yahoo!知恵袋
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10119032605

投稿2022/02/14 05:33

teratail_begin

総合スコア72

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問