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

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

ただいまの
回答率

89.11%

【PHP】$_POST変数をform内のvalueでechoすると表示されない

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 130

p.io

score 2

前提・実現したいこと

PHPで入力フォームを作っています。
formにて入力 → 確認画面 → 修正と画面遷移を1つのファイルで行っています。

確認画面から、修正へと進むとすでに入力した内容をinput内に表示したいのですが、なぜか表示できていません。

該当のソースコード

<?php

//画面遷移のフラグ設定
$flag=0
if($_POST["confirm"]){
  $flag=1;
}else($_POST["submit"]){
  $flag=2;
}
...

//確認画面
if($flag==1):
?>

<form action="post.php" method="post">
  <p>入力内容</p>
  <?php echo $_POST["content"] ?>
  <input type="submit" name="back" value="修正する">
  <input type="submit" name="submit" value="送信">
  <input type="hidden" name="content" value="<?php echo $_POST["content"] ?>">
</form>

//送信後の処理
<?php if($flag==2): ?> 
・・・

//入力ページ
<?php else: ?>
  <form action="post.php" method="post">
    <p>入力内容</p>
    <input type="text" name="content" value="<?php if(!empty($_POST["content"])){echo $_POST["content"];} ?>"> //ここのvalueが入力フォームに出力されない
    <input type="submit" name="confirm" value="確認する">
  </form>
<?php endif; ?>

試したこと

試したことは以下の2つです。

1.var_dumpにて、contentに文字列が入っているか

以下出力

["content"]=> string(4) "aaaa"

ちゃんと格納はされていました。

2.valueの部分を以下に変更
  <input type="text" name="content" value="content">

入力フォームにcontentと表示されました。

他にも、調べたのですが情報が見つからず、どなたかわかる方いましたら助けていただけると嬉しいです。
よろしくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+3

m.ts10806さんの指摘に加えて、いくらか文法のミスがみられます。 
正直、多すぎてどう指摘すればいいのかわからなかったので、箇条書きにしました。

// その1 文法エラー
$flag=0
$flag=0;

// その2 文法エラー
}else($_POST["submit"]){
}elseif($_POST["submit"]){

// その3 文法エラー
<?php if($flag==2): ?> 
<?php elseif($flag==2): ?> 

// その4 confirmというname属性の属性値がform内にない
<input type="hidden" name="confirm" value="1">


// 以下、なくても動作はしないではない
// その1 undefinedの場合も考慮した条件分岐
if($_POST["confirm"]){
if(isset($_POST["confirm"])){

}elseif($_POST["submit"]){
}elseif(isset($_POST["submit"])){

// その2 
入力ページの二つのボタンの動作が現状のものでは同じになってしまうので
<input type="submit" name="back" value="修正する">
を削除し、
<input type="submit" name="submit" value="送信">
を
<input type="submit" name="submit" value="確認画面へ">
などに変更する。

// 追記 こちらの環境で動いたものを上げておきます。

<?php

//画面遷移のフラグ設定
$flag=0;
if(isset($_POST["confirm"])){
  $flag=1;
}elseif(isset($_POST["submit"])){
  $flag=2;
}

//確認画面
if($flag==1):
?>

<form action="post.php" method="post">
  <p>入力内容</p>
  <?php echo $_POST["content"] ?>
  <input type="submit" name="back" value="修正する">
  <input type="submit" name="submit" value="送信">
  <input type="hidden" name="content" value="<?php echo $_POST["content"] ?>">
</form>

<!-- 送信後の処理 -->
<?php elseif($flag==2): ?> 
<p>送信後の処理が入ります</p>

<?php else: ?>
  <form action="post.php" method="post">
    <p>入力内容</p>
    <input type="text" name="content" value="<?php if(!empty($_POST["content"])){echo $_POST["content"];} ?>"> //ここのvalueが入力フォームに出力されない
    <input type="hidden" name="confirm" value="1">
    <input type="submit" name="submit" value="確認画面へ">
  </form>
<?php endif; ?>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/01 20:41

    ご丁寧にありがとうございます!

    殴り書きでコードを書かせていただいたので、記述に間違いが多くあり申し訳ないです。
    一つ一つ今後気をつけさせていただきます。

    確認画面の部分は、
    <input type="submit" name="confirm" value="確認画面へ">
    でした。こちらも修正させていただきました。
    ただ、こちらの状態で解決できていないのが現状です。

    また、もう一つ気になったのですが、このようなチェックの場合は、isset()と!empty()どちらを利用すると良いでしょうか?

    キャンセル

  • 2020/07/01 23:19

    > ただ、こちらの状態で解決できていないのが現状です。
    何が原因でまだ解決できていないのか、わからないのでとりあえずこちらのローカル環境で動いたものを追記としてのせておきました。


    >また、もう一つ気になったのですが、このようなチェックの場合は、isset()と!empty()どちらを利用すると良いでしょうか?
    その時次第かなっと、その値がundefinedかどうかをチェックしたいのか、空なのかをチェックしたいのかで決めるのが良いと思います。

    キャンセル

  • 2020/07/02 17:52

    ご回答ありがとうございます!

    もう一度、書き直して動作確認をしてみます!
    今後ともよろしくお願いいたします。

    キャンセル

+2

confirmというname属性の属性値がform内にないからでは。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/01 19:33

    ご指摘ありがとうございます!

    こちら、私の記述ミスです。
    修正させていただきます。

    confirmにしていたのですが、それでも表示されず困っています。

    キャンセル

  • 2020/07/01 20:43

    「ちゃんと動かす」のであれば、今の状態から何とかするよりも
    1つ1つ丁寧に確認しながら最初から書き直す方が確実かと思います。
    (私なら書き直しますし、ロジックや処理順などから再検討します)
    結局のところ、書いたようにしか動きませんので。

    キャンセル

  • 2020/07/02 17:53

    一つ一つ確認して、もう一度初めから組み直してみたいとおもいます!

    ご丁寧にご回答ありがとうございます!
    今後ともよろしくお願いいたします!

    キャンセル

check解決した方法

0

数日置いて実行したところ、正しく入力フォームに値が表示されていました。
キャッシュによるバグであった可能性があります。
ご回答いただいた方、ありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.11%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる