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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

3回答

3278閲覧

phpで作る簡易的な掲示板の二重送信について

SENNA0510

総合スコア10

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

1クリップ

投稿2018/10/15 08:10

完了画面でリロードすると内容が重複して投稿されてしまう。

回避方法としてはheader()関数でリダイレクトさせる方法です。

ページの構成としては下記の様な形です。
index.php・・・入力フォームを記述しているファイル
output.php・・・ファイルの書き込み処理と投稿一覧を表示しているファイル

■index.php

<form action="output.php" method="post"> <input type="text" name="message"> <input type="submit" name="datepost" value="投稿"> </form>

■output.php

<?php $file = 'board.txt'; if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (file_exists($file)) { $board = json_decode(file_get_contents($file)); } $board[] = $_REQUEST['message']; file_put_contents($file, json_encode($board)); foreach ($board as $message) { echo $message.'<hr>'; } header('Location:http://192.168.33.10:8000/lessonform/output.php'); } ?>

上記コードで解決になりません。
この状態で「$_SERVER['REQUEST_METHOD']」するとPOSTのままになっております。
header関数の場所を変更してもうまくいきませんでした。

よろしければアドバイスなど頂けると。。。

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

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

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

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

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

guest

回答3

0

header() 関数はそれより前に出力があると機能しません。
本当に場所を変えてもダメでしたか?
わかりやすくするために、redirect させる URL を自分自身ではなく、変えて試してみては?

投稿2018/10/15 08:25

ssasaki

総合スコア1167

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

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

0

一般的には「CSRF対策」としてトークンを発行してチェックします。

投稿2018/10/15 08:57

m.ts10806

総合スコア80842

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

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

0

PHP

1if ($_SERVER['REQUEST_METHOD'] === 'POST') {

isset($_REQUEST['message'])で入ってるかどうかチェックするのはだめですか

投稿2018/10/15 08:22

rururu3

総合スコア5545

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

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

SENNA0510

2018/10/15 08:32

早々の返答ありがとうございます! ですが、、、うまくいかず、、、 色々な記事を見てるのですが、、、
SENNA0510

2018/10/15 08:34

ワーニングでリダイレクトしないというのは ではecho $message.'<hr>';の部分を何か別の方法で記述すれば うまくいきそうですかね!
SENNA0510

2018/10/15 08:38

確かにecho $message.'<hr>';をカットしたらGETにかわりました! 立て続けに質問で申し訳ないですが echo $message.'<hr>'; がワーニングになる理由は何でしょうか。。。
rururu3

2018/10/15 08:45

http://php.net/manual/ja/function.header.php header出力においてはHTTP仕様に基づくので、文章送ったあとでheader出力するのはNGです。 (出力順などでうまくいくときもあるんですが、基本的にNGと覚えておけば大丈夫です)
SENNA0510

2018/10/15 15:15 編集

以下のコード内にある<hr>をカットすればリロードしても平気にはなりましたが <hr>や<br>などhtmlタグは読み込まれているようです、、、 <?php $file = 'board.txt'; if (file_exists($file)) { $board = json_decode(file_get_contents($file)); } $board[] = $_REQUEST['message']; file_put_contents($file, json_encode($board)); if ($_SERVER['REQUEST_METHOD'] === 'POST') { header('Location:http://192.168.33.10:8000/php/lesson/userOutput.php'); } else { foreach ($board as $message) { echo $message.'<hr>'; } } ?>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問