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

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

ただいまの
回答率

90.03%

完了ボタンと戻るボタン(PHPとMySQL)

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 361

nkn_021314

score 11

「名前」「学籍番号」「年齢」「備考欄」の四つを入力フォーム→確認画面→完了画面となるようなデータフォームをつくっています。

確認画面で、未入力や記号などのエラーがあれば「戻るボタン」を不備がなければ「完了ボタン」が表示されるようにしたいのですが、どちらの場合も戻るボタンしか表示されません。

エラーが生じるのであれば探しどころがわかるのですが、エラーも生じないためどの部分に不備があるか分かりません。
また戻るボタンを押した際に前の画面に入力情報を保持したいのですが、反映していないようなので、その部分についてもなにかミスがあればご指摘いただけると嬉しいです。

初歩的な細かいミスかもしれませんが、よろしくお願いします。

<?php

session_start();
$age= htmlentities($_POST[age], ENT_QUOTES, "UTF-8");
$name= htmlentities($_POST[name], ENT_QUOTES, "UTF-8");
$number= htmlentities($_POST[number], ENT_QUOTES, "UTF-8");
echo str_replace('&lt;br&gt;', '<br>', htmlspecialchars( $_POST ,ENT_QUOTES) );


$_SESSION["age"]=$age;
$_SESSION["name"]=$name;
$_SESSION["number"]=$number;

$postData = $_POST;
$error = array();

        function formValidation($postData) {
            if(empty($postData['age'])) {
                 $error[] = "年齢を入力してください";
            } else if(!preg_match('/^[0-9]+$/',$postData['age'])) {
                 $error[] = "年齢を正しく入力してください";
            }


            if (empty($postData['name'])) {
                $error[] = "お名前を入力してください";
            } else if (!preg_match('/^[ぁ-んァ-ヶー一-龠  \r\n\t]+$/', $postData['name'])) {
                 $error[] = "お名前は全角文字で入力してください";
                }

            if(empty($postData['number'])) {
                 $error[] = "学籍番号を入力してください";
            } else if(!preg_match('/^[a-zA-Z0-9]+$/',$postData['number'])) {
                 $error[] = "学籍番号を正しく入力してください";
            }
            return $error;
        }
        $error = formValidation($postData);
        if(empty($postData['input-submit-check']) || !empty($error)) {
          $page_flag = 1;
        } else {
          $page_flag = 0;
        }

?>




//以下略
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • date

    2019/02/12 18:10

    入力フォームはどのようになっているでしょうか?
    また戻るボタンを押した際に前の画面に入力情報を保持したいのですが 
    こっちは入力フォームを見ないと原因がわかりません

    キャンセル

  • nkn_021314

    2019/02/13 14:19

    回答ありがとうございます。
    一応自己解決しましたので、解決方法を記入しました

    キャンセル

回答 3

check解決した方法

0

if(empty($postData['input-submit-check']) || !empty($error)) {
          $page_flag = 1;
        } else {
          $page_flag = 0;
        }


ここの部分が

        if(empty($postData['age']) || empty($postData['name']) ||empty($postData['number']) || !empty($error)) {
          $page_flag = 1;
        } else {
          $page_flag = 0;
        }

こうでした

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

//変数の初期化
$page_flag = 1;

ここで毎回 1 が代入されています。


質問内容とは無関係だけど
htmlentities の使い所も間違ってますよ。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/02/12 01:03

    ありがとうございます。修正して
    //変数の初期化
    $page_flag = 1;
    を消去しましたが、やはり「戻るボタン」しか表示されません・・・。
    この件が解決したら、htmlentitiesについて調べなおします。ご指摘ありがとうございます。

    キャンセル

  • 2019/02/12 01:05

    消去するだけじゃダメですよ。
    根本的なところから設計を見直す必要があります。
    ちょこっといじれば動くかと言うとそうではありません。
    自分なら、全部書き直すと思います。

    キャンセル

  • 2019/02/12 04:14

    割と変更してみましたが全部だめでした。
    一応、質問に記入しているプログラムは変更した中で一番合ってそうなものに変更しました。
    合っていると思って修正しようとするからだめなんですかね・・・。
    しかし、どこが間違ってるかわからないので意識ができないですね・・・。

    キャンセル

0

ちょっと考え方が違う気がします

入力フォーム→確認画面→完了画面

入力フォーム→確認画面→登録ページ→完了画面


ですね。
そして確認画面で未入力がある場合は自動で入力フォームに戻ればよいでしょう。
すでにすべてのデータがセッションに格納されている状態なので
確認画面には入力欄は不要です。
あと登録ページに飛ぶかだけのボタンがあれば良いでしょう。
登録画面では簡単なバリデートしつつ特に問題なければ登録して
完了画面に飛ばします。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/02/12 17:38

    すいません、
    入力フォーム→確認画面→完了画面の順で作れ
    の間違いです

    キャンセル

  • 2019/02/12 18:59

    確認画面→完了画面ということは完了=登録画面ということでしょうか?
    二重投稿とかセッションの解除とか制御が煩雑になりますが大丈夫ですか?

    キャンセル

  • 2019/02/13 14:15

    一応解決はしました。
    課題なので・・・。
    自分でフォームを作る時はおっしゃる方法で作ろうと思います。
    ありがとうございます。

    キャンセル

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

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

同じタグがついた質問を見る