- ベストアンサー
肌質を選んで両方表示する方法とは?
- プルダウンメニューで選んだ肌質と選んでいない肌質の両方を表示する方法について、具体例を教えてください。
- PHPの$hada1~$hada3の定義をどう書けばうまく表示できるのかが分かりません。
- HTMLの選択肌質の取得方法と、PHPでの両方の肌質の表示方法について教えてください。
- みんなの回答 (13)
- 専門家の回答
質問者が選んだベストアンサー
Lolipopということだったので、ウチのLolipopアカウントにドメイン割り当てました(汗 http://devtest.shimix.co/1.php 1.php → 2.php → 3.php と遷移します。まったく同じソースを拡張子.txtで保存していますので、http://devtest.shimix.co/1.txt のようにしてソースを確認してください。
その他の回答 (12)
- shimix
- ベストアンサー率54% (865/1590)
>でも、3回目まではちゃんと表示されたのに、残念ながら >4回目以降きちんと表示されないです… 3回目・4回目とは?どういう意味でしょうか? 念のため、3.phpへ4.php(セッション変数の表示だけのスクリプト)へのリンクを貼ってみました。動作とソース(同様に4.txtで)を確認してみてください。 セッションの有効期限内だったら(&ブラウザを閉じなければ)4.phpにアクセスすればいつでもセッション変数の内容を表示します。
お礼
3度目に試した時は、という意味でした。 ファイルを作り直したら、その不具合も無くなったようです。 本当にお世話になりました!ありがとうございました!!
- shimix
- ベストアンサー率54% (865/1590)
>ロリポップというレンタルサーバーのファイル作成機能を >使って書いています… ロリポップ!FTPでしょうか。それならBOMが入り込む余地はないですね。 #BOM付きのファイルをアップロードしてから編集している #ようだとわかりませんが(汗 <?php より「前」に空白や改行がありませんか?ロリポのサーバでセッションが機能しないというのはちょっと考えにくいです。
補足
<?phpより前に空白や改行はないです… 念のため、新しいファイルを作って試してみましたが、やはり3ページ目ではうまく表示されませんでした…。
- shimix
- ベストアンサー率54% (865/1590)
>BOMが何かよくわからないです Byte Order Mark といって、文字コードがutf-8のテキストファイルの「先頭に付与することもある」バイナリです。 https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88%E3%82%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%83%9E%E3%83%BC%E3%82%AF 実はhtmlやphpはBOMの存在を考慮していません。なので、BOMは「ごみ」でしかありません。BOMがあると(<?php でphpモードにはいる前なので)それをブラウザに返します。このときにHTTPレスポンスヘッダ(content-type: text/html)も送出しますが、setcookieやsession_startはHTTPレスポンスヘッダが未送出であることを前提にしているため正常に動作しません(cookie用のレスポンスヘッダを返せなくなるため)。 一般的なエディタであればBOMの有無を指定できるか、UTF-8Nという文字コードがあるハズです。お使いのエディタのヘルプで確認してください。 なお(まさかとは思いますが)メモ帳+UTF-8で書いたりはしていませんよね?メモ帳のUTF-8は「BOMあり」でしか書き出さないというゴミ仕様です(なので実質的にweb系のプログラムを書くことができません)。
補足
なるほどです、ありがとうございます。 ロリポップというレンタルサーバーのファイル作成機能を使って書いています… 2ページ目ではセッションがうまく動作し、表示もされますが、3ページ目では(ソースを見る限り、PHPは動いているのに)、表示されないです…
- shimix
- ベストアンサー率54% (865/1590)
>3ページ目で内容が表示されないです… コピペして試しました。1.phpにform要素を追加して2.phpへPOST、2.phpで(表示するものがないので)真っ白な状態からブラウザのアドレスバーに3.phpを直接入力して遷移させましたが、問題なく表示されます。 phpソースは「BOMなしのUTF-8(エディタによってはUTF-8Nという表記のものもあります)」で保存されていますよね?BOMがあるとsession_start()より前にブラウザにBOMが返るためheaders already sentになってしまい、セッション用のCookieの保存指示が無効になります。
補足
ええと… 初歩的な質問で申し訳ないのですが、BOMが何かよくわからないです(;´・ω・)
- shimix
- ベストアンサー率54% (865/1590)
><php? >session_start(); >echo "☆みか☆さん ",$_SESSION[age1],"歳/",$_SESSION[hada1]"; ?> >こう書いてみたのですがphpが動作していないみたいです。 phpモードにすら入れていませんね。phpモードの開始は <?php です(short_open_tagが有効な環境なら、<? でも可)。 配列の添え字に文字列リテラルを書くなら引用符で括ってください(ミスの元になります)。二重引用符をエスケープしている部分("歳/")がありますが、何のためにエスケープしているのか謎です。これだと文字列リテラルの「歳",$_SESSION[hada1]」になってしまいます。 <?php session_start(); echo "☆みか☆さん ", $_SESSION['age1'], "歳", $_SESSION['hada1']; ?> echoで書いている部分は、printfを使う方が(多分)綺麗に引用符などの間違いも少なく書けます printf('☆みか☆さん %d歳 %s', $_SESSION['age1'], $_SESSION['hada1']);
補足
●1ページ目のフォーム <select name="age"> <option value="18">18歳</option> <option value="19">19歳</option> <option value="20">20歳</option> <option value="21">21歳</option> <option value="22">22歳</option> <option value="23">23歳</option> <option value="24">24歳</option> <option value="" selected>選択してください</option> </select> <select name="hada"> <option value="1">敏感肌</option> <option value="2">乾燥肌</option> <option value="3">脂性肌</option> <option value="" selected>選択してください</option> </select> ●2ページ目 <?php session_start(); $age = intval(filter_input(INPUT_POST, 'age')); $hada = intval(filter_input(INPUT_POST, 'hada')); if (($age < 18)or($age > 24)) { die('illegal access'); } if (($hada < 1)or($hada > 3)) { die('illegal access'); } $age1 = $age + 1; $age2 = $age + 5; $age3 = $age + 7; $hada_arr = array(1=>'敏感肌', 2=>'乾燥肌', 3=>'脂性肌'); $hada1 = $hada_arr[$hada]; unset($hada_arr[$hada]); shuffle($hada_arr); $hada2 = array_shift($hada_arr); $hada3 = array_shift($hada_arr); $hada = $hada1; // セッションに格納 $_SESSION['age'] = $age; $_SESSION['age1'] = $age1; $_SESSION['age2'] = $age2; $_SESSION['age3'] = $age3; $_SESSION['hada'] = $hada; $_SESSION['hada1'] = $hada1; $_SESSION['hada2'] = $hada2; $_SESSION['hada3'] = $hada3; ?> ●3ページ目 <?php session_start(); echo "☆みか☆さん ", $_SESSION['age1'], "歳", $_SESSION['hada1']; ?> としてみたのですが、3ページ目で内容が表示されないです…
- shimix
- ベストアンサー率54% (865/1590)
こちらでテストに使ったスクリプトです (1.php) <!-- 拡張子は.phpですが中身はHTMLのみです --> <form action="2.php" method="post"> <span class="honbun"> Q1.あなた自身の年齢を教えてください </span> <select name="age"> <option value="18">18歳</option> <option value="19">19歳</option> <option value="20">20歳</option> <option value="21">21歳</option> <option value="22">22歳</option> <option value="23">23歳</option> <option value="24">24歳</option> <option value="no" selected="">選択してください</option> </select> </p> <p> <span class="honbun"> Q2.あなたの肌質でもっとも当てはまると思うものを<b><u>ひとつ</u></b>選んでください </span> </p> <dl> <dt> 敏感肌</dt> <dd> 化粧品や髪の毛・洋服にあたるだけで肌が痒くなったり、痛みを生じることがある</dd> <dt> 乾燥肌</dt> <dd> 乾燥していて,部分的に粉をふいたようになることがある</dd> <dt> 脂性肌</dt> <dd> 肌がすぐにテカリ,化粧崩れしやすい</dd> </dl> <p> <select name="hada"> <option value="1">敏感肌</option> <option value="2">乾燥肌</option> <option value="3">脂性肌</option> </p> <input type="submit"> </form> (2.php) <?php session_start(); $age = intval(filter_input(INPUT_POST, 'age')); $hada = intval(filter_input(INPUT_POST, 'hada')); if (($age < 18)or($age > 24)) { die('illegal access'); } if (($hada < 1)or($hada > 3)) { die('illegal access'); } $age1 = $age + 1; $age2 = $age + 5; $age3 = $age + 7; $hada_arr = array(1=>'敏感肌', 2=>'乾燥肌', 3=>'脂性肌'); $hada1 = $hada_arr[$hada]; unset($hada_arr[$hada]); shuffle($hada_arr); $hada2 = array_shift($hada_arr); $hada3 = array_shift($hada_arr); $hada = $hada1; // セッションに格納 $_SESSION['age'] = $age; $_SESSION['age1'] = $age1; $_SESSION['age2'] = $age2; $_SESSION['age3'] = $age3; $_SESSION['hada'] = $hada; $_SESSION['hada1'] = $hada1; $_SESSION['hada2'] = $hada2; $_SESSION['hada3'] = $hada3; ?> <!-- ここからのHTMLはご自由にどうぞ --> 入力=<?= $hada; ?>(<?= $age; ?>)<br> 他1=<?= $hada1; ?>(<?= $age1; ?>)<br> 他2=<?= $hada2; ?>(<?= $age2; ?>)<br> 他3=<?= $hada3; ?>(<?= $age3; ?>)<br> <!-- 追加入力 --> <form action="3.php" method="post"> <input type="input" name="additional" value=""> <input type="submit"> </form> (3.php) <?php session_start(); $additional = filter_input(INPUT_POST, 'additional'); if (is_null($additional)) { die('illegal access'); } // 追加分もセッションへ $_SESSION['additional'] = $additional; ?> <!-- ここからのHTMLはご自由にどうぞ --> 追加入力=<?= $additional; ?><hr> 入力=<?= $_SESSION['hada']; ?>(<?= $_SESSION['age']; ?>)<br> 他1=<?= $_SESSION['hada1']; ?>(<?= $_SESSION['age1']; ?>)<br> 他2=<?= $_SESSION['hada2']; ?>(<?= $_SESSION['age2']; ?>)<br> 他3=<?= $_SESSION['hada3']; ?>(<?= $_SESSION['age3']; ?>)<br> <hr> <?php // デバッグ表示 echo "<pre>"; print_r($_SESSION); echo "</pre>";
補足
<php? session_start(); echo "☆みか☆さん ",$_SESSION[age1],"歳/",$_SESSION[hada1]"; ?> こう書いてみたのですがphpが動作していないみたいです。 どう直せばいいのでしょうか? 何度も申し訳ないです…
- shimix
- ベストアンサー率54% (865/1590)
>こういうことでしょうか? 「セッションに格納する方」はそうなりますね。「セッションから取り出して使う方」は(session_start()してから)$_SESSION['age']などを使うことになります >これでもエラーが出てしまいお手上げです… エラーメッセージに修正すべき内容は書かれています。エラーが出るということは修正できるということです。わからなければエラーの内容を転記してください(行数があれば、その前後の行も)。
補足
1ページ目から2ページ目に進んだ際に、エラーで2ページ目の内容が見れません。エラーメッセージは「このページは動作していません str-cosme.girly.jp では現在このリクエストを処理できません。 HTTP ERROR 500」で、かいたコードは以下の通りです。 ●1ページ目(1.php) <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>COSME LABO</title> <style type="text/css"> span.hana { color:#ff1493; } </style> <style type="text/css"> span.midashi1 { color:#EB1E81; } </style> <style type="text/css"> span.tyuui { color:#f08080; } </style> <style type="text/css"> span.honbun { color:#000000; } </style> <script type="text/javascript"> <!-- function check(){ var flag = 0; var ErrNo; for (var n = 0; n < 2; n++) { if (document.userprof.elements[n].value == "") { if (flag == 0) { ErrNo = n + 1; } else { ErrNo = ErrNo + "," + (n + 1); } flag = 1; } } if (flag) { window.alert("Q" + ErrNo + "が選択されていません"); return false; } else { return true; // 送信を実行 } } // --> </script> </head> <body> <h1> <span class="midashi1"> 本日は、調査にご協力いただき、 <br> ありがとうございます。 </span> </h1> <p> <span class="tyuui"> この調査は、大学生を対象とした <br> 「化粧品」への印象について調べることを目的としています。 <br> 架空の化粧品口コミサイトを見て、 <br> 商品などの印象に対して答えて頂く簡単な調査です。 <br> 今回の回答は、卒業論文における集計およびデータ解析作業のみに使用し、 <br> これ以外の目的では使用しませんので安心してご回答ください。 <br> まずはあなた自身についての質問にご回答をお願いします。 </span> </p> <form action="2.php" method="POST" name="userprof" onSubmit="return check()"> <p> <span class="honbun"> Q1.あなた自身の年齢を教えてください<span class="hana">*</span> </span> <select name="age"> <option value="18">18歳</option> <option value="19">19歳</option> <option value="20">20歳</option> <option value="21">21歳</option> <option value="22">22歳</option> <option value="23">23歳</option> <option value="24">24歳</option> <option value="" selected>選択してください</option> </select> </p> <p> <span class="honbun"> Q2.あなたの肌質でもっとも当てはまると思うものを<b><u>ひとつ</u></b>選んでください<span class="hana">*</span> </span> </p> <dl> <dt> 敏感肌</dt> <dd> 化粧品や髪の毛・洋服にあたるだけで肌が痒くなったり、痛みを生じることがある</dd> <dt> 乾燥肌</dt> <dd> 乾燥していて,部分的に粉をふいたようになることがある</dd> <dt> 脂性肌</dt> <dd> 肌がすぐにテカリ,化粧崩れしやすい</dd> </dl> <p> <select name="hada"> <option value="1">敏感肌</option> <option value="2">乾燥肌</option> <option value="3">脂性肌</option> <option value="" selected>選択してください</option> </select> </p> <input type="submit" value="回答を開始する" name="go"> </form> </body> </html>
- shimix
- ベストアンサー率54% (865/1590)
>セッションを使ってのプログラムがうまくできないんです セッションは基本中の基本ですから、使えるようになりましょうよ。 スクリプトの最初で(ブラウザに何も返していないタイミングで) session_start() さえしていれば、$_SESSIONという配列がどこでも使い放題ですから。 今回のphpスクリプトなら、すべての変数の値を確定したあとで(私の例で「表示」しようとしている部分で $_SESSION['age'] = $age; $_SESSION['age1'] = $age1; $_SESSION['age2'] = $age2; $_SESSION['age3'] = $age3; $_SESSION['hada'] = $hada; $_SESSION['hada1'] = $hada1; $_SESSION['hada2'] = $hada2; $_SESSION['hada3'] = $hada3; として保存しておけば、このあとのどこでも(session_start() さえしていれば)セッション変数に値が入っています。
補足
何度もすいません… <?php $age = intval(filter_input(INPUT_POST, 'age')); $hada = intval(filter_input(INPUT_POST, 'hada')); if (($age < 18)or($age > 24)) { die('illegal access'); } if (($hada < 1)or($hada > 3)) { die('illegal access'); } $age1 = $age + 1; $age2 = $age + 5; $age3 = $age + 7; $hada_arr = array(1=>'敏感肌', 2=>'乾燥肌', 3=>'脂性肌'); $hada1 = $hada_arr[$hada]; unset($hada_arr[$hada]); shuffle($hada_arr); $hada2 = array_shift($hada_arr); $hada3 = array_shift($hada_arr); $hada = $hada1; session start(); $_SESSION['age'] = $age; $_SESSION['age1'] = $age1; $_SESSION['age2'] = $age2; $_SESSION['age3'] = $age3; $_SESSION['hada'] = $hada; $_SESSION['hada1'] = $hada1; $_SESSION['hada2'] = $hada2; $_SESSION['hada3'] = $hada3; ?> こういうことでしょうか? これでもエラーが出てしまいお手上げです…
- shimix
- ベストアンサー率54% (865/1590)
>1ページ別の質問フォーム(2ページ目)があるため、 >うまく値が渡せませんでした… 今現在はどうやって渡そうとしていますか? フォームのinput要素(type="hidden")でしょうか?それともセッションに格納していますか?今現在どうやっているのかがわからないことには何ともアドバイスも難しいですが・・・ #とりあえずはセッションを使うのが一番楽だとは思いますけどね
補足
セッションを使いたいのですが、セッションを使ってのプログラムがうまくできないんです…(´;ω;`)
- shimix
- ベストアンサー率54% (865/1590)
うーん・・・。こんな感じですか? (htmlフォーム) <form action="result.php" method="post"> <span class="honbun"> Q1.あなた自身の年齢を教えてください </span> <select name="age"> <option value="18">18歳</option> <option value="19">19歳</option> <option value="20">20歳</option> <option value="21">21歳</option> <option value="22">22歳</option> <option value="23">23歳</option> <option value="24">24歳</option> <option value="no" selected="">選択してください</option> </select> </p> <p> <span class="honbun"> Q2.あなたの肌質でもっとも当てはまると思うものを<b><u>ひとつ</u></b>選んでください </span> </p> <dl> <dt> 敏感肌</dt> <dd> 化粧品や髪の毛・洋服にあたるだけで肌が痒くなったり、痛みを生じることがある</dd> <dt> 乾燥肌</dt> <dd> 乾燥していて,部分的に粉をふいたようになることがある</dd> <dt> 脂性肌</dt> <dd> 肌がすぐにテカリ,化粧崩れしやすい</dd> </dl> <p> <select name="hada"> <option value="1">敏感肌</option> <option value="2">乾燥肌</option> <option value="3">脂性肌</option> </p> <input type="submit"> </form> (php) $age = intval(filter_input(INPUT_POST, 'age')); $hada = intval(filter_input(INPUT_POST, 'hada')); if (($age < 18)or($age > 24)) { die('illegal access'); } if (($hada < 1)or($hada > 3)) { die('illegal access'); } $age1 = $age + 1; $age2 = $age + 5; $age3 = $age + 7; $hada_arr = array(1=>'敏感肌', 2=>'乾燥肌', 3=>'脂性肌'); $hada1 = $hada_arr[$hada]; unset($hada_arr[$hada]); shuffle($hada_arr); $hada2 = array_shift($hada_arr); $hada3 = array_shift($hada_arr); $hada = $hada1; ?> <!-- ここからのHTMLはご自由にどうぞ --> 入力=<?= $hada; ?>(<?= $age; ?>)<br> 他1=<?= $hada1; ?>(<?= $age1; ?>)<br> 他2=<?= $hada2; ?>(<?= $age2; ?>)<br> 他3=<?= $hada3; ?>(<?= $age3; ?>)<br>
補足
そうですね!やりたいことはこんな感じです!! ですが、肌質・年齢の選択ページ(1ページ目)とそれを表示するページ(3・4・5ページ目)の間には1ページ別の質問フォーム(2ページ目)があるため、うまく値が渡せませんでした… 何度もご迷惑をおかけして大変申し訳ないのですが、ご教示頂けないでしょうか…どうかお願いいたします。
- 1
- 2
補足
ありがとうございます;; でも、3回目まではちゃんと表示されたのに、残念ながら4回目以降きちんと表示されないです… これは何がいけないんでしょうか…(;´・ω・)