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

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

新規登録して質問してみよう
ただいま回答率
85.35%
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

解決済

2回答

4906閲覧

セレクトボックスの値をphpで取得したい。

退会済みユーザー

退会済みユーザー

総合スコア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/13 11:57

編集2021/11/13 12:05

前提・実現したいこと

セレクトボックスの値が取得できないので取得できるようにしたい。

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

確認ボタンを押すと「お問い合わせ項目を選択してください。」と出て先に進めません。

該当のソースコード

<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[] = "お問い合わせ項目が選択されていません。"; } 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 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>

試したこと

ここに問題に対して試したことを記載してください。

. "お問い合わせ項目: " . $_SESSION['cs'] . "\r\n"

これを追加しましたが、取得はできていないようでした。

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

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

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

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

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

guest

回答2

0

$cs を設定してるとこが無いスね。

あと、$_SESSION['cs'] も設定してないです。
--- 追記 ---
解決したようですね。
ひとつのページでいくつかの画面を提供する場合、画面ごとに処理を分けると管理しやすいですよ。

php

1<?php 2session_start(); 3 4if (isset($_POST['back'])) { 5 $mode = 'input'; 6} else if (isset($_POST['confirm'])) { 7 $errmessage = check(); 8 if (count($errmessage) > 0) { 9 $mode = 'input'; 10 } else { 11 $mode = 'confirm'; 12 } 13} else if (isset($_POST['send'])) { 14 done(); 15 $mode = 'send'; 16} else { 17 clear(); 18} 19 20function check() { 21 $errmessage = []; 22 23 if (empty($_POST['fullname'])) { 24 $errmessage[] = "名前を入力してください"; 25 } else if ( mb_strlen($_POST['fullname']) > 100 ) { 26 $errmessage[] = "名前は100文字以内にしてください"; 27 } else { 28 $_SESSION['fullname'] = htmlspecialchars($_POST['fullname'], ENT_QUOTES); 29 } 30 31 if (empty($_POST['email'])) { 32 $errmessage[] = "Eメールを入力してください。"; 33 } else if ( strlen($_POST['email']) > 200 ) { 34 $errmessage[] = "Eメールは200文字以内にしてください。"; 35 } else if ( !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ) { 36 $errmessage[] = "メールアドレスが不正です。"; 37 } else { 38 $_SESSION['email'] = htmlspecialchars($_POST['email'], ENT_QUOTES); 39 } 40 41 if (empty($_POST['tel'])) { 42 $errmessage[] = "電話番号を入力してください。"; 43 } else if (strlen($_POST['tel']) > 12) { 44 $errmessage[] = "電話番号は12桁以内にしてください。。"; 45 } else { 46 $_SESSION['tel'] = htmlspecialchars($_POST['tel'], ENT_QUOTES); 47 } 48 49 if (empty($_POST['cs'])) { 50 $errmessage[] = "お問い合わせ項目を選択してください。"; 51 } else { 52 $_SESSION['cs'] = htmlspecialchars($_POST['cs'], ENT_QUOTES); 53 } 54 55 if (empty($_POST['message'])){ 56 $errmessage[] = "お問い合わせ内容を入力してください。"; 57 } else if (mb_strlen($_POST['message']) > 1000 ) { 58 $errmessage[] = "お問い合わせ内容は1000文字以内にしてください"; 59 } else { 60 $_SESSION['message'] = htmlspecialchars($_POST['message'], ENT_QUOTES); 61 } 62 63 return $errmessage; 64} 65 66function done() { 67 $message = "お問い合わせを受け付けました。 \r\n" 68 . "名前: " . $_SESSION['fullname'] . "\r\n" 69 . "email: " . $_SESSION['email'] . "\r\n" 70 . "tel: " . $_SESSION['tel'] . "\r\n" 71 . "お問い合わせ項目: " . $_SESSION['cs'] . "\r\n" 72 . "お問い合わせ内容:\r\n" 73 . preg_replace("/\r\n|\r|\n/", "\r\n", $_SESSION['message']); 74 mail($_SESSION['email'],'お問い合わせありがとうございます。',$message); 75 mail('aaaaa@gmail.com','お問い合わせありがとうございます。',$message); 76 clear(); 77} 78 79function clear() { 80 unset($_SESSION['fullname']); 81 unset($_SESSION['email']); 82 unset($_SESSION['tel']); 83 unset($_SESSION['cs']); 84 unset($_SESSION['message']); 85} 86?>

あと、セッションに保存する際 htmlspecialchars() は通さない方がいい気がします。

投稿2021/11/13 20:47

編集2021/11/14 20:51
takasima20

総合スコア7464

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

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

退会済みユーザー

退会済みユーザー

2021/11/14 00:25

どこに記述すればいいですか?
guest

0

ベストアンサー

お問い合わせ項目<select name= "cs">

お問い合わせ項目<select name="cs">

じゃないでしょうか? 余計なスペースが入り込んでいると思います。

以下追記

if(isset($_POST['cs'])) { $errmessage[] = "お問い合わせ項目を選択してください。"; echo 'お問い合わせ項目:' . $cs; } else { $errmessage[] = "お問い合わせ項目が選択されていません。"; }

もよく見ると変ですね。if(isset($_POST['cs']))は普通に真になると思うので、if文に引っかかると思います。そのあとのelse以下も見ると、ここどう処理をしたいのかがコードからはイマイチ読み取れないのですが、すくなくとも現状のソースコードは何をしたところで"お問い合わせ項目を選択してください。"と出るようになっていると思います。まずはここのif文をまるっと外してテストしてみたらどうでしょう。その後、自分が処理したいようにソースコードを修正してください(どうしたいのかが分からないので具体的なアドバイスができませんが)。

投稿2021/11/13 13:06

編集2021/11/13 14:39
AbeTakashi

総合スコア4853

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

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

退会済みユーザー

退会済みユーザー

2021/11/13 13:12

ありがとうございます。修正してみましたがキャッシュを消しても結果はかわりませんでした。
退会済みユーザー

退会済みユーザー

2021/11/14 06:06

試しにこのようにしてみましたが、結果は変わらずでした。 <select name="cs" value="<?php if (isset($_SESSION['cs'])) { echo $_SESSION['cs']; }?>">
退会済みユーザー

退会済みユーザー

2021/11/14 07:09

ありがとうございます。試してみます。どうしたいかといえばセッションを使ってデータを保持したいです。
退会済みユーザー

退会済みユーザー

2021/11/14 07:25 編集

ifを消して$_SESSION['cs'] = htmlspecialchars($_POST['cs'], ENT_QUOTES);を追加したら確認ボタンを押したら次にすすみました。ありがとうございます。 また、セレクトボックスに<option hidden>選択してください</option>を追加しました。 もし、セレクトボックスが何も選択されていないときに警告を出すためには先程のif文が必要かな?とは思うんですがどうでしょうか?
AbeTakashi

2021/11/14 11:30

返答が遅くなり申し訳ないですが、解決されましたかね? 解決方法を書かれていますが、すいません・・・ちょっと意味が分かりかねます。質問文含めて再度全体的に見てみたのですが、もしかするとsessionの概念を勘違いされているかも?とは思いました。 参考) https://www.fenet.jp/dotnet/column/language/7713/ まずはしっかりsessionの概念を学ばれた方がいいかも?とは思いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問