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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

HTML

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

CSS

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

Q&A

解決済

1回答

2326閲覧

セレクトボックスで何も選択されていない場合、警告を出したい。

退会済みユーザー

退会済みユーザー

総合スコア0

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

HTML

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

CSS

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

0グッド

0クリップ

投稿2021/11/14 08:53

編集2021/11/14 09:16

前提・実現したいこと

問い合わせフォームを作っていて、入力されていなかったりすると警告が出るようになっていますが、
セレクトボックスで何も選択されていない場合、警告を出したい。

発生している問題・エラーメッセージ

選択をしても「お問い合わせ項目を選択してください。」とでて次にすすめなくなってしまう。

<html> <head> <body> <?php session_start(); $mode = 'input'; $errmessage = array(); if( isset($_POST['back']) && $_POST['back'] ){ // 何もしない } else if( isset($_POST['confirm']) && $_POST['confirm'] ){ // 確認画面 if( !$_POST['fullname'] ) { $errmessage[] = "名前を入力してください"; } else if( mb_strlen($_POST['fullname']) > 100 ){ $errmessage[] = "名前は100文字以内にしてください"; } $_SESSION['fullname'] = htmlspecialchars($_POST['fullname'], ENT_QUOTES); if( !$_POST['email'] ) { $errmessage[] = "Eメールを入力してください。"; } else if( mb_strlen($_POST['email']) > 200 ){ $errmessage[] = "Eメールは200文字以内にしてください。"; } else if( !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ){ $errmessage[] = "メールアドレスが不正です。"; } $_SESSION['email'] = htmlspecialchars($_POST['email'], ENT_QUOTES); if( !$_POST['tel'] ) { $errmessage[] = "電話番号を入力してください。"; } else if( mb_strlen($_POST['tel']) > 12 ){ $errmessage[] = "電話番号は12桁以内にしてください。。"; } if(isset($_POST['cs'])) { $errmessage[] = "お問い合わせ項目を選択してください。"; echo 'お問い合わせ項目:' . $cs; } else { $errmessage[] = "お問い合わせ項目が選択されていません。"; }        $_SESSION['cs'] = htmlspecialchars($_POST['cs'], ENT_QUOTES); if( !$_POST['message'] ){ $errmessage[] = "お問い合わせ内容を入力してください。"; } else if( mb_strlen($_POST['message']) > 1000 ){ $errmessage[] = "お問い合わせ内容は1000文字以内にしてください"; } $_SESSION['message'] = htmlspecialchars($_POST['message'], ENT_QUOTES); if( $errmessage ){ $mode = 'input'; } else { $mode = 'confirm'; } } else if( isset($_POST['send']) && $_POST['send'] ){ // 送信ボタンを押したとき $message = "お問い合わせを受け付けました。 \r\n" . "名前: " . $_SESSION['fullname'] . "\r\n" . "email: " . $_SESSION['email'] . "\r\n" . "tel: " . $_SESSION['tel'] . "\r\n" . "お問い合わせ項目: " . $_SESSION['cs'] . "\r\n" . "お問い合わせ内容:\r\n" . preg_replace("/\r\n|\r|\n/", "\r\n", $_SESSION['message']); mail($_SESSION['email'],'お問い合わせありがとうございます。',$message); mail('aaaaa@gmail.com','お問い合わせありがとうございます。',$message); $_SESSION = array(); $mode = 'send'; } else { $_SESSION['fullname'] = ""; $_SESSION['email'] = ""; $_SESSION['tel'] = ""; $_SESSION['cs'] = ""; $_SESSION['message'] = ""; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>お問い合わせフォーム</title> </head> <body> <?php if( $mode == 'input' ){ ?> <!-- 入力画面 --> <?php if( $errmessage ){ echo '<div style="color:red;">'; echo implode('<br>', $errmessage ); echo '</div>'; } ?> <form action="./page-contact.php" method="post"> 名前 <input type="text" name="fullname" value="<?php echo $_SESSION['fullname'] ?>"> Eメール <input type="email" name="email" value="<?php echo $_SESSION['email'] ?>"> 電話番号 <input type="tel" name="tel" value="<?php echo $_SESSION['tel'] ?>"> お問い合わせ項目<select name= "cs"> <option hidden>選択してください</option> <option value = "映画">映画</option> <option value = "アニメ">アニメ</option> <option value = "音楽">音楽</option> <option value = "絵画">絵画</option> <option value = "その他">その他</option> </select> お問い合わせ内容 <textarea cols="40" rows="8" name="message"><?php echo $_SESSION['message'] ?></textarea> <input type="submit" name="confirm" value="確認" /> </form> <?php } else if( $mode == 'confirm' ){ ?> <!-- 確認画面 --> <form action="./page-contact.php" method="post"> 名前<?php echo $_SESSION['fullname'] ?> Eメール <?php echo $_SESSION['email'] ?>  電話番号 <?php echo $_SESSION['tel'] ?> お問い合わせ項目 <?php echo $_SESSION['cs'] ?> お問い合わせ内容 <?php echo nl2br($_SESSION['message']) ?> <input type="submit" name="back" value="戻る" /> <input type="submit" name="send" value="送信" /> </form> <?php } else { ?> <!-- 完了画面 --> 送信しました。お問い合わせありがとうございました。<br> <?php } ?> </body> </html> ### 試したこと ここに問題に対して試したことを記載してください。 ```ここに言語を入力 if(isset($_POST['cs'])) { $errmessage[] = "お問い合わせ項目を選択してください。"; echo 'お問い合わせ項目:' . $cs; } else { $errmessage[] = "お問い合わせ項目が選択されていません。"; }

この部分を削除してみましたが、警告メッセージがでないままでした。

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

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

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

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

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

guest

回答1

0

ベストアンサー

isset()だと指定の名称(nameの設定値)で送信されている場合はtrueとなります。
「空だったら」をしたいのなら値を受け取ったうえで「空かどうか」を確認するのがまず第一段階。

php

1$cs = $_POST["cs"];//issetはこれが確認できてからでも良いと思う。 2if($cs === ''){ 3 //空の時 4}

※これはセレクトボックスに限りません。
filter_input()での対応が第二段階。

以下蛇足。

  • htmlspecialchars()は画面出力時に対応するべきものなので、画面出力しない、もしくはリクエスト受け取り時にしてはいけません。加工した情報に対する不当なバリデーションになります。
  • HTMLの中にロジックが混じると非常に分かりづらくなりますし、header()など呼び出し前のあらゆる出力がNGという機能もあります。session_start()も「注意」として記載があります。

出力コードがないのならHTMLより前に置きましょう。

  • いわゆる「お問い合わせフォーム」は結構セキュリティ対策が大変です。どんな脆弱性があるか調べたうえできちんと対応されたほうが良いと思います(スパムメールの発射台になったり、自身以外への直接被害がなくても悪意のある利用をされる可能性がある)

投稿2021/11/14 09:29

編集2021/11/14 09:30
m.ts10806

総合スコア80861

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

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

退会済みユーザー

退会済みユーザー

2021/11/14 12:07

ありがとうございます。色々調べて勉強したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問