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

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

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

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

HTML

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

Q&A

解決済

2回答

3979閲覧

phpの入力フォームで未入力の場合は同じページでエラーメッセージを出したいです。すべて入力済の場合だけ、他ページに遷移したいです。

kouj

総合スコア3

PHP

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

HTML

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

0グッド

0クリップ

投稿2020/10/08 17:12

php

前提

phpめちゃめちゃ初心者です。
よろしくお願いします。

いろいろ調べてみたのですが、解説がないものばかりでなかなかわからなかったので
コード一つ一つ解説していただけると幸いです。

phpを使って入力画面を作っている状況です。

###実現したいこと
全ての値が選択されていたら、sent.phpへ遷移したい。
一つでも未選択があった場合、同じページ(index.php)のまま、
「未選択です」と表示させたい。
そのとき選択済の値は引き継ぎたい。

発生している問題・わからないこと

1 選択済の場合と未選択の場合とで、遷移先(action=""の部分)を変える書き方がわからない。
2 未選択ですの文字が表示されない
3 選択済の値が引き継がれない

該当のコード

<?php ini_set('display_errors', 1); $h = $_POST['h']; $s = $_POST['m']; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>php</title> </head> <body> <!-- 値が両方選択されているときsent.phpに飛びたい。 一つでも未選択の場合どこにもとばず 「未選択です」を表示させたい。 このactionにif文でふたつのリンクを書いたけどうまく行かなかった。よくわからないため今は空にした--> <form action="" method="post"> <select name="h" id=""> <!-- 他項目が未選択だった場合この項目の入力は引き継ぎたい --> <option value="<?php echo $h;?>" >--</option> <!-- 0~24時間を表示 --> <?php for($i=0; $i<=24; $i++) { echo "<option value='{$i}時間'>{$i}時間</option>"; } ?> </select> <!-- ここでoptionが未選択のとき表示させたい。 --> <?php if(isset($_POST['h']) === ""):?> <p><?php echo "※未選択です!"; ?></p> <?php endif; ?> <!-- 上と同じ 値が違うだけ --> <select name="m" id=""> <!-- 他項目が未選択だった場合この項目の入力は引き継ぎたい --> <option value="<?php echo $m;?>">--</option> <!-- 0~59分を表示 --> <?php for($i=0; $i<=59; $i++) { echo "<option value='{$i}分'>{$i}分</option>"; } ?> </select> <!-- ここでoptionが未選択のとき表示させたい。 --> <?php if(isset($_POST['m']) ==="" ):?> <p><?php echo "※未選択です!"; ?></p> <?php endif; ?> <p> <input type="submit" value="送信"> </p> </form> </body> </html>

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

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

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

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

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

m.ts10806

2020/10/08 20:56

前の質問で回答してるのに・・ https://teratail.com/questions/296367 理解できてない部分があったら聞いてもらったら良いのですけど 何も反応がないと「理解したもの」として認識します。 同じ質問を繰り返してるだけになりますよ。
kouj

2020/10/10 13:16

すみません前の質問の自分のコードが少しごちゃごちゃしていたので書き直してしまいました。
guest

回答2

0

ベストアンサー

前置き

いろいろ調べてみたのですが、解説がないものばかりでなかなかわからなかったので
コード一つ一つ解説していただけると幸いです。

解説付きの書籍なりweb教材なりで基本から順番に学習されることをお勧めします。
解説無しのコードをわからない状態で調べるのはかなり大変だと思います。

回答

1 選択済の場合と未選択の場合とで、遷移先(action=""の部分)を変える書き方がわからない。

入力状況でAction先を変えるという実装は通常はしません。

もしそういう実装をする場合ははJavaScriptで実装することになりますが、JavaScriptでの実装はクライアント側で変更/偽装が可能であるため、入力状態を無視して処理を進めることが可能になってしまいます。
(PHPがよくわからない状態でJavaScriptに手を出すとさらによくわからなくなるという点でもお勧めできません)

ソースを見る限りは、こんな感じの実装がしたいのかなと思います。

  1. 常にaction=index.phpとする
  2. index.phpの処理開始部分で入力値のチェックを行い、必須項目が足りなかったり入力ルールに沿っていないものがあれば、index.php内でエラーを表示、

入力がすべて正しければ、入力内容をセッションに持たせたうえでsent.phpにリダイレクト
リダイレクトについては
php リダイレクトとかphp header() リダイレクト等で調べてみてください。
セッションについては
PHP セッションあたりで。

セッションを使わずにシンプルに実装するのであれば、

  1. 常にaction=index.phpとする
  2. index.phpの処理開始部分で入力値のチェックを行い、必須項目が足りなかったり入力ルールに沿っていない場合はフォームを再度表示してエラーを表示、入力が正しい場合はsent.phpで行おうとしたことをindex.phpで実施する

となります。

2 未選択ですの文字が表示されない

isset()の戻り値の仕様を誤解しているように見えます。
PHPマニュアル isset()を確認してみてください。
isset()は変数が存在する場合はtrue そうでない場合はfalseを返却するので、
存在しないことの判定を===で行うのであれば
if(isset($_POST['h']) === false)
とする必要があります。

3 選択済の値が引き継がれない

selected属性を使用する必要があります。
参照
PHP セレクトボックス selectedとかで調べてみてください。
処理を追加する場所は以下部分です。

PHP

1 <select name="m" id=""> 2 3 <!-- 他項目が未選択だった場合この項目の入力は引き継ぎたい --> 4 <!-- 0~59分を表示 --> 5 <?php for($i=0; $i<=59; $i++) { 6 echo "<option value='{$i}分' //ここにifを仕込んで、選択済みの値とvalueの値が同じ場合にselected属性を付ける//>{$i}分</option>"; 7 } 8?> 9 </select>

投稿2020/10/08 17:39

編集2020/10/08 17:54
tanat

総合スコア18713

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

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

kouj

2020/10/12 16:08

ありがとうございました。一応できました!
guest

0

めちゃめちゃ初心者ということなので、少しハードルは
高いと思いますが、以下の2つの合わせ技でいけます。
簡単に言うと、javascriptでセレクトボックスの値が両方入っていた場合と
入っていない場合で、formタグのアクション属性を変えるというやりかたです。
なので、formタグはひとつで大丈夫です。

http://itsakura.com/js-selectbox
http://techacademy.jp/magazine/32105

投稿2020/10/08 17:46

firegrape

総合スコア902

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

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

m.ts10806

2020/10/09 00:10

>以下の2つの合わせ技でいけます。 いけません(2重の意味で)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問