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

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

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

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

HTML

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

Q&A

1回答

504閲覧

PHPの入力フォームでの手直し。

miki_nyan

総合スコア0

PHP

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

HTML

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

0グッド

0クリップ

投稿2023/02/15 08:04

編集2023/02/15 08:06

実現したいこと

研修で作っているPHPの入力フォームでどうしてもわからない箇所が2点あり、質問させていただきました。

前提

エラーは発生してはいないのですが、作ったプログラムに対して、「では、書いたプログラムを手直ししていこう」ということで、どうしてもわからない箇所があり質問させていただきました。

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

11行目の if(isset($_POST['back']) && $_POST['back']) { } これは無くせるため、無くした形で書くことを指示され、色々省略できそうな形を試してみたのですが、無くすと値を取得できなくなり、無くせません。 <form></form>タグも今は2つに分かれていますが、1つにまとめられるとのことなんですが、まとめると、戻るボタンと送信ボタンが押せなくなります。

該当のソースコード

<?php $name = "<div class = 'name'>名前</div>"; $mail = "<div class = 'mail'>メール</div>"; $gender = "<div class = 'gender'>性別</div>"; $todouhuken = "<div class = 'todouhuken'>都道府県</div>"; $item = $name. $mail . $gender . $todouhuken; session_start();//sessionの開始 $mode = 'input'; if(isset($_POST['back']) && $_POST['back']) { } else if(isset($_POST['confirm']) && $_POST['confirm']) { //確認ボタンクリック時 //エラーが発生したときに下記エラーメッセージを表示 if(empty($_POST['fullname'])) { //!$_POST=空のとき $errnamemessage = "※名前を入力してください"; } else if(mb_strlen($_POST['fullname']) > 20) { //mb_strlen=文字列の長さを取得 $errnamecount = "※名前は20文字以内にしてください"; } if(empty($_POST['mail'])) { $errmailmessage = "※Eメールを入力してください"; } else if(mb_strlen($_POST['mail']) > 50 ) { $errmailcount = "※Eメールは50文字以内にしてください"; } if(empty($_POST['gender'])) { //if(!$_POST['gender']){ $errgender = "※性別を選択してください"; } if(empty($_POST['todouhuken'])) { $erraddressmessage = "※都道府県を選択してください"; } if (empty($errnamemessage) && empty($errnamecount) && empty($errmailmessage) && empty($errmailcount) && empty($errgender) && empty($erraddressmessage)) { $mode = 'confirm'; } $_SESSION['fullname'] = $_POST['fullname'];//確認画面に入るときにPOSTの値をsessionに代入する。 $_SESSION['mail'] = $_POST['mail']; $_SESSION['todouhuken'] = $_POST['todouhuken']; if(isset($_POST['gender'])) { $_SESSION['gender'] = ($_POST['gender']); } }else if( isset($_POST['send']) && $_POST['send'] ) { $data = array(//sendに入ってCSVに書き込む array($_SESSION['fullname'],$_SESSION['mail'],$_SESSION['gender'],$_SESSION['todouhuken'])); $fp = fopen('touroku.csv', 'a'); foreach ($data as $fields) { fputcsv($fp, $fields); } fclose($fp); $mode = 'send'; }else { $_SESSION['fullname'] = '';//セッションク情報をクリア $_SESSION['mail'] = '';//array(); でも可能 $_SESSION['gender'] = ''; $_SESSION['todouhuken'] = ''; } ?> <!DOCTYPE html> <html lang="ja"> <body> <head> <meta charset="utf-8"><?php ?><title>テストページ</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <div class="container"> </div> <header class="header"> <div class="twitter"> <a href="https://twitter.com/?lang=ja"><img src="000c.jpg" width=50 height=50></a> </div> </header> <main> <div class="main"> </div> <?php if( $mode == 'input' ) { ?> <!-- 入力画面 --> <?php if(isset($errnamemessage)) { ?> <div class="errname" style="color:red;"> <?= $errnamemessage?> </div> <?php } ?> <?php if(isset($errnamecount)) { ?> <div class="errname" style="color:red;"> <?= $errnamecount?> </div> <?php } ?> <?php if(isset( $errmailmessage)) { ?> <div class="errmail" style="color:red;"> <?= $errmailmessage?> </div> <?php } ?> <?php if(isset( $errmailcount)) { ?> <div class="errmail" style="color:red;"> <?= $errmailcount?> </div> <?php } ?> <?php if(isset( $errgender)) { ?> <div class="errgender" style="color:red;"> <?= $errgender?> </div> <?php } ?> <?php if(isset($erraddressmessage)) { ?> <div class="erraddress" style="color:red;"> <?= $erraddressmessage?> </div> <?php } ?> <form action="./test2.php" method="post"> <?= $item ?> <div class="namebox"> <input type="text" name="fullname" style="width: 600px; height: 35px;" placeholder="名前を入力してください。" value="<?= $_SESSION['fullname']?>"> </div> <div class="mailbox"> <input type="text" name="mail" style="width: 600px; height: 35px;" placeholder="Eメールを入力してください。" value="<?= $_SESSION['mail']?>"> </div> <div class="genderradio"> <input type="radio" name="gender" value="男性" <?php if (isset($_SESSION['gender']) && $_SESSION['gender'] == "男性") echo 'checked'; ?> >男性</input> <input type="radio" name="gender" value="女性" <?php if (isset($_SESSION['gender']) && $_SESSION['gender'] == "女性") echo 'checked'; ?> >女性</input> <!--<input type="radio" name="gender" value="" style="display:none;"<?php// if (isset($_SESSION['gender']) && $_SESSION['gender'] == "")echo 'checked'; ?>></input>--> </div> <div class="selectbox"> <select name="todouhuken" style="width: 600px; height: 35px;"> <option value="" >選択してください</option> <option value="北海道"<?php if (isset($_SESSION['todouhuken']) && $_SESSION['todouhuken'] == "北海道") echo 'selected'; ?>>北海道</option> <option value="青森県"<?php if (isset($_SESSION['todouhuken']) && $_SESSION['todouhuken'] == "青森県") echo 'selected'; ?>>青森県</option> <option value="秋田県"<?php if (isset($_SESSION['todouhuken']) && $_SESSION['todouhuken'] == "秋田県") echo 'selected'; ?>>秋田県</option> </select> </div> <div class="confirm"> <input type="submit" name="confirm" style="width: 500px; height: 40px;" value="確認" /> </div> </form> <?php } else if ($mode == 'confirm') { ?> <!-- 確認画面 --> <form action="./test2.php" method="post"> <?= $item ?> <div class="fullname"> <?= $_SESSION['fullname']; ?> </div> <div class="email"> <?= $_SESSION['mail']; ?> </div> <div class="selectgender"> <?= $_SESSION['gender']; ?> </div> <div class="selecttodouhuken"> <?= $_SESSION['todouhuken']; ?> </div> <div class="back"> <input type="submit" name="back" style="width: 400px; height: 40px;" value="戻る" /> </div> <div class="send"> <input type="submit" name="send" style="width: 400px; height: 40px;" value="送信" /> </div> <?php //print_r($_SESSION); ?> </form> <?php } else { ?> <div class="sousin">送信しました。</div> <div class="home"> <a href="test2.php">登録ページへ</a> </div> <?php } ?> </main> <footer class="footer"> <div class="register"><a href="data.php">登録一覧</div> </footer> </div> </body> </html>

試したこと

6時間以上ネットで調べながら改ざんしていましたが、まったく上手くいきませんでした。
答えではなく、アドバイスや助言をいただけないでしょうか?

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

yuma.inaura

2023/02/15 08:16

if をただ無くすのではなくて if をなくした上で elseif の条件に反映させるとかいうことじゃないでしょうか
miki_nyan

2023/02/15 08:19

合ってるのか分からないんですけどこんな感じですか? if((isset($_POST['back']) && $_POST['back']) || (isset($_POST['confirm']) && $_POST['confirm']))
m.ts10806

2023/02/15 08:29

指示者の意図は指示者にしか分からないので、ここで得たアドバイスが指示者の意図に沿うか分かりません。 また、ここで得たアドバイスの意図や意味、なぜそうしたかまで自分で説明できなければ、やはり意味のないコードになります。 課題のようですし、やはり指示者に方向性を確認するべきでは?
miki_nyan

2023/02/15 08:37

貴重なご意見ありがとうございます。 私もm.ts10806様の仰る通りだとも思います。。。。。 たしかに課題なんですが、質問があまりできる環境ではなく、極力自分の力で解くようなスタイルなんですが、どうしても分からなくて手詰まりになってしまい、恥ずかしながら質問させていただきました。 ここでアドバイスいただいて、自分で説明できるように頭に入れてから提出をするつもりではいます。
m.ts10806

2023/02/15 08:50

なるほど。ただやはり「無くす」というのが曖昧な表現なので、指示者の意図からすると的外れになる可能性が高くなることはご留意ください。
miki_nyan

2023/02/15 08:55

はい!ありがとうございます! 無くすというより、省略的なニュアンスだったと思います。
guest

回答1

0

リクエストを受け取るという前提である以上、「無くす」というのは要件を正しく表現していない可能性も高いのですが、$_POSTを直参照しない形にするほうが望ましいと思います。

https://qiita.com/tkek321/items/33c049ab685342feb6fa
https://web-engine.hatenadiary.com/entry/20160521/1463823327
https://junk-blog.com/php_filter_input/

※古い記事ばかりですが、考え方は変わっていないはず

filter_input()によって値を取得し、その結果を検証します。コードは簡潔になります。
(null or empty 的なチェック関数を作るのも1つですが、「無くす」ではなく「簡潔に」と捉えました。)

過去質問も参考に。

投稿2023/02/15 08:54

m.ts10806

総合スコア80850

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

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

miki_nyan

2023/02/15 09:04

ご回答いただきありがとうございます! 調べて試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問