PHP入力チェック方法

このQ&Aのポイント
  • PHPを使用してドロップダウンリストで選択された値の入力チェックを行う方法についての質問です。
  • 現在、preg_matchなどを使用して試行錯誤していますが、うまく動作しない問題に直面しています。
  • 下記のサイトでホームページの改ざんを防止するための入力チェックに興味を持ち、ドロップダウンリストを使用したチェック方法を知りたいと思っています。
回答を見る
  • ベストアンサー

php を使用しての入力チェック方法

ドロップダウンリストで選択された値が $menu に入りそれを php を使用して(必須) 入力チェックを行い、NGならば警告メッセージを表示・・・ という事をしたく、preg_match 等を使って色々試行錯誤してるのですが 入力チェックの部分で上手くいきません。 なぜこのような事をしようとするのか・・・? の理由は下記のサイト 【 ホームペーシの改ざんを阻止するには? 】 http://www.starthp.com/kaizan.htm を見たもので・・・ ドロップダウンリストのソースは下記のようになっております。 php でのチェック方法についてどなたがご教示お願い致します。 <?php /* ****************************************************************** 確認時エラー等でフォーム画面に戻った時に入力した情報が消えない設定 ドロップダウンリスト用 ****************************************************************** */ function MenuValue($v,$r) { if(!empty($_POST[$v])) { if($_POST[$v] == $r){ return " selected='selected'"; } } } echo 'お問い合わせ内容のカテゴリ<br>'."\n"; echo '<select name="menu" id="menu">'."\n"; echo '<option value="未選択"'.MenuValue("menu","未選択").'>▼選択して下さい</option><br>'."\n"; echo '<option value="東京"'.MenuValue("menu","東京").'>東京 - Tokyo</option><br>'."\n"; echo '<option value="千葉"'.MenuValue("menu","千葉").'>東京 - Chiba</option><br>'."\n"; echo '<option value="埼玉"'.MenuValue("menu","埼玉").'>埼玉 - Saitama</option><br>'."\n"; echo '<option value="群馬"'.MenuValue("menu","群馬").'>群馬 - Gunma</option><br>'."\n"; echo '<option value="海外"'.MenuValue("menu","海外").'>海外 - Kaigai</option><br>'."\n"; echo '</select>'."\n"; ?>

  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

別に想定したデータのチェック自体はする必要はないですが、 どうしてもというならこんな感じでホワイトリストをつくり マッチしない場合エラーにすればよいのでは? <?php $errmsg=""; $whitelist["menu"]=Array("未選択","東京","千葉","埼玉","群馬","海外"); if(isset($_REQUEST["menu"])){ if(!in_array($_REQUEST["menu"],$whitelist["menu"])) $errmsg="NG!!"; $selected["menu"][$_REQUEST["menu"]]=" selected='selected'"; } if($errmsg) print $errmsg; else echo <<<eof <form> <p> お問い合わせ内容のカテゴリ<br> <select name="menu" id="menu"> <option value="未選択"{$selected["menu"]["未選択"]}>▼選択して下さい</option> <option value="東京"{$selected["menu"]["東京"]}>東京 - Tokyo</option> <option value="千葉"{$selected["menu"]["千葉"]}>東京 - Chiba</option> <option value="埼玉"{$selected["menu"]["埼玉"]}>埼玉 - Saitama</option> <option value="群馬"{$selected["menu"]["群馬"]}>群馬 - Gunma</option> <option value="海外"{$selected["menu"]["海外"]}>海外 - Kaigai</option> </select><br> <input type="submit" value="go"> </p> </form> eof; ?>

Deep-Forest
質問者

お礼

有難うございました。 おかげで何とか解決できました。 for文で何とかしようとあれこれ試行錯誤して 何とかなったのですが、こちらの方がスッキリしてるので 使わせて頂きました。 また何かありましたら宜しくお願い致します。

その他の回答 (1)

  • 1minn
  • ベストアンサー率57% (52/90)
回答No.2

デバッグしてみました? MenuValue関数に渡された値を画面出力でもしてみれば、答えは出そうですが。 function MenuValue($v,$r) {   echo 'r => '. $r .'<br>';   echo 'post[menu] => '. $_POST['menu'] .'<br>'; ・ $vは固定なので引数にする必要もなさそう。 ・ 一致しなかった時のreturn値を定義しないのがちょっと気持ち悪い。 のは気にはなりますが、普通に動きそうにみえます。 でも動かないのは・・・ ・文字コードが一致してない ・POST先が違ってる ・menuって名前が重複してる とか、そんな感じでしょうか?

Deep-Forest
質問者

お礼

ご回答頂き有難う御座います。 取り敢えずこのソースで問題なく動作してるのですが・・・ アドバイス頂いた箇所、再度見直してみますネ!?

関連するQ&A

  • PHP

    PHPで無駄なコーディングをしない為、ループでまわしたいのですが関数が入り、ややこしくなっています。どうしたらいいですか? <select name="nminute"> <option value="0" <?php if(strstr($nminute,'0')) echo"selected"; ?>>0</option> <option value="1" <?php if(strstr($nminute,'1')) echo"selected"; ?>>1</option> <option value="2" <?php if(strstr($nminute,'2')) echo"selected"; ?>>2</option> <option value="3" <?php if(strstr($nminute,'3')) echo"selected"; ?>>3</option> <option value="4" <?php if(strstr($nminute,'4')) echo"selected"; ?>>4</option> <option value="5" <?php if(strstr($nminute,'5')) echo"selected"; ?>>5</option> <option value="6" <?php if(strstr($nminute,'6')) echo"selected"; ?>>6</option> <option value="7" <?php if(strstr($nminute,'7')) echo"selected"; ?>>7</option> <option value="8" <?php if(strstr($nminute,'8')) echo"selected"; ?>>8</option> <option value="9" <?php

    • ベストアンサー
    • PHP
  • PHP

    HTML文ですが、これをPHPでループで回して無駄なコーディングを直したい。 どうしたらいいですか? <select name="nhour"> <option value="0" <?php if($nhour == '0') echo"selected"; ?>>0</option> <option value="1" <?php if($nhour == '1') echo"selected"; ?>>1</option> <option value="2" <?php if($nhour == '2') echo"selected"; ?>>2</option> <option value="3" <?php if($nhour == '3') echo"selected"; ?>>3</option> <option value="4" <?php if($nhour == '4') echo"selected"; ?>>4</option> <option value="5" <?php if($nhour == '5') echo"selected"; ?>>5</option> </select>

    • ベストアンサー
    • PHP
  • selectedをどのように使うか

    PHPの質問です。以下のようなドロップダウンリストがあります。 リストから選択してhereのリンクをクリックするとその選択された ものがドロップダウンリストに表示されるように処理をしたいのですが どのように処理をしてよいかわかりません。 例えば、Oregonをユーザーが選択してhereリンクをクリックすると 同じ画面でOregonがリストに表示されているようにしたいと思っています。 selectedを使えばよいのはわかるのですが、選択毎にどのオプションに selectedをつけてやればよいのかという処理方法に悩んでいます。 良い知恵をお貸しください。お願いいたします。 <SELECT name="States"> <OPTION value='California'>California</OPTION> <OPTION value='Arizona'>Nagano</OPTION> <OPTION value='Oregon'>Oregon</OPTION> </SELECT> <br> <a href="x">here</a>

    • ベストアンサー
    • PHP
  • PHPでUndefined variableエラー

    PHPでUndefined variableエラーが発生します: <b>Notice</b>: Undefined variable: result in <b>/opt/lampp/htdocs/samples/chapter3/3-2/gen_defined_vars.php</b> on line <b>58</b><br /> どうやって直せばいいのか教えてください。 58行目がおかしいと出ていますが、$resultが未定義なので54行目のことだと思います。 ちなみに 9ー12行目は自分で直しました。お願いします。 1 <html> 2 <head> 3 <title>環境変数コード生成フォーム</title> 4 </head> 5 <body> 6 <?php 7 // 選択リストの値を取得 8 $name = "param"; 9 if ( isset($_POST[$name]) ) { 10 $selected_value = $_POST[$name]; 11 } 12 //$selected_value = isset($_POST[$name]) ? $_POST[$name] : ""; 13 14 // 定義済み変数を取得 15 $array = get_defined_vars(); 16 17 // 配列から選択リストを作成する関数 18 // パラメータ:配列/選択リスト名/選択値 19 function disp_list($array, $name, $selected_value = "") { 20 echo "<select name=\"" . $name . "\">"; 21 while (list($value, $text) = each($array)) { 22 echo "<option "; 23 if ($selected_value == $value) { 24 echo " selected "; 25 } 26 echo " value=\"".$value."\">" . $value . "</option>"; 27 } 28 echo "</select>"; 29 } 30 31 // 入力内容を処理する 32 $temp = "<?php echo \$_SERVER[\"%s\"] ?>"; 33 if (isset($_POST["param"])) { 34 $param = $_POST["param"]; 35 $result = sprintf($temp, $param); 36 } 37 else { 38 $param = ""; 39 } 40 41 ?> 42 <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> 43 <table cellpadding="10"> 44 <tr> 45 <td>環境変数を選択:<br /> 46 <?php echo disp_list($array["_SERVER"], $name, $selected_value); ?> 47 <input type="submit" value="作成" name="sub1"> 48 </td> 49 </tr> 50 <tr> 51 </tr> 52 <tr> 53 <td>作成されたコード:<br /> 54 <textarea name="ta1" rows="3" cols="40"><?php echo $result ?></textarea> 55 </td> 56 </tr> 57 </table> 58 </form> 59 </body> 60 </html>

    • ベストアンサー
    • PHP
  • PHP

    PHPで <?php for($i = 0; $i <= 23; $i++){ // $nhour が $i と等しいなら selected を宣言 等しくなければ空文字 $isSelected = $nhour == $i ? 'selected' : ''; echo "<option value=\"$i\" $isSelected>$i</option>" . "\n"; } ?> を含むにしたい <?php for($i = 0; $i <= 23; $i++){ // $nhour が $i と等しいなら selected を宣言 等しくなければ空文字 $isSelected = strstr($nhour,$i) ? 'selected' : ''; echo "<option value=\"$i\" $isSelected>$i</option>" . "\n"; } ?> こうするとエラーになる。どうしたらいいですか?

    • ベストアンサー
    • PHP
  • PHP タイムスタンプ

    タイムスタンプで値を取得して、比較するプログラムなのですが、なぜか $time = mktime(0, 0, $_POST['hh'], $_POST['dd'], $_POST['mm'], $_POST['yyyy']); の値が”-1”で返ってきてしまいます。 何故でしょうか? <?php echo "<select name=\"yyyy\">"; for ($i = 2010; $i < 2012; $i++) { $selected=$i==$_REQUEST["yyyy"]?" selected":""; echo "<option value=\"{$i}\"{$selected}>{$i}</option>\n"; } echo "</select> 年 "; echo "<select name=\"mm\">"; for ($i = 1; $i < 13; $i++) { $selected=$i==$_REQUEST["mm"]?" selected":""; echo "<option value=\"{$i}\"{$selected}>{$i}</option>\n"; } echo "</select> 月 "; echo "<select name=\"dd\">"; for ($i = 1; $i < 32; $i++) { $selected=$i==$_REQUEST["dd"]?" selected":""; echo "<option value=\"{$i}\"{$selected}>{$i}</option>\n"; } echo "</select> 日 "; echo "<select name=\"hh\">"; for ($i = 0; $i < 24; $i++) { $selected=$i==$_REQUEST["hh"]?" selected":""; echo "<option value=\"{$i}\"{$selected}>{$i}</option>\n"; } echo "</select> 時 <br />"; $time = mktime(0, 0, $_POST['hh'], $_POST['dd'], $_POST['mm'], $_POST['yyyy']);

    • ベストアンサー
    • PHP
  • セレクトメニューのチェックと条件一致による入力チェック

    (1)メールフォームでセレクトメニューの「都道府県」部分で選択して送信する場合にJAVAで入力チェックエラーを表示させるにはどうしたらよいでしょうか?(東京、千葉、埼玉はOK) Javaサンプルソースを配布しているサイトを教えて下さい。 (2)JAVAによる入力チェックで「YES」にチェックされた場合に、テキストエリアを入力必須にするエラー表示方法を紹介しているサイトを知っていたら教えて下さい。 --------------------------------------------------------------- <form>名前:<input size="20" type="text" name="name"><br> 住所:<select size="1" name="adress"> <option value="東京">東京</option> <option value="千葉">千葉</option> <option value="埼玉">埼玉</option> <option value="都道府県" selected>都道府県</option> </select><input size="20" type="text" name="adress2"><br> (都道府県の場合はエラー表示)<br> <hr> 選択:<input type="radio" name="sentaku" value="yes">YES <input type="radio" name="sentaku" value="No">NO<br> <hr> YESの場合コメント記載<br> <textarea rows="2" cols="20" name="coment"> ----------------------------------------------------------------

  • リストボックスの入力チェックについて

    リストボックスの入力チェックについて PHP初心者です。といいますか、プログラムそのものが初心者なので、 説明が分かりにくい部分があったら申し訳ございません。 以下のソースのように、フォームに「選択してください」「青森」「秋田」「岩手」 の4つの項目があるリストボックスを作成しました。 もし、県名が選択されず「選択してください」のままフォームを送信した場合、 下記のphpソース部分にあるようなエラーメッセージを表示させたいのですが、 真っ白いページが表示され何も表示されません。 原因をご存知の方、どうかご教示ください。 よろしくお願いいたします。 //---htmlフォーム部分 <form action="form02.php" method="post" enctype="multipart/form-data" name="form1" id="form1"> <select name="pref" id="pref"> <option value="misenntaku" selected="selected">選択してください</option> <option value="aomori">青森</option> <option value="akita">秋田</option> <option value="iwate">岩手</option> </select> <p><input type="submit" value="内容を確認する" /><p> </form> //-----phpソース部分 <?php if ($_POST['pref'] == 'misenntaku' ) { print '県名を選択してください' . '<br><br>'; print '<a href="form02.html">戻って入力する</a>'; } ?>

    • ベストアンサー
    • PHP
  • PHPによるアンケートの項目追加

    質問投稿させていただきます。 急遽仕事でPHPのアンケートの項目を追加することになったのですが PHPは全くの素人で困っています。 既存のアンケートに項目を追加したいのですが <h2>アンケートフォーム</h2> <form action="question2.php" method="post"> <dl class="clearfix"> <dt>性別は?</dt> <dd> <?php $male = '男性'; $female = '女性'; $number = array('1', '2'); echo ' <label><input type="radio" name="gender" value="' . $number[0] . '" />' . $male . '</label>' . "\n"; echo ' <label><input type="radio" name="gender" value="' . $number[1] . '" />' . $female . '</label>' . "\n"; ?> </dd> <dt>年齢は?</dt> <dd> <label> <select name="age"> <option value="0" selected="selected">選択してください</option> <?php for ($num = 1; $num <= 4; $num++) { echo ' <option value="' . $num . '">' . $num . '0代</option>' . "\n"; } ?> <option value="5">50代以上</option> </select> </label> </dd> <dt>趣味は?</dt> <dd class="hobby-area"> <?php $hobby = array(1 => '音楽鑑賞', 2 => '映画鑑賞', 3 => 'ドライブ', 4 => '旅行', 5 => 'その他'); foreach ($hobby as $key => $value) { echo ' <label><input type="checkbox" name="hobby[' . $key . ']" value="' . $key . '" />' . $value . '</label>' . "\n"; } ?> </dd> </dl> <p> <input type="submit" value="投票する" /> </p> </form> この文に <dt>趣味は?</dt> <dd class="hobby-area"> <?php $service = array(1 => 'あああ', 2 => 'あああ', 3 => 'あああ', 4 => 'あああ', 5 => 'あああ'); foreach ($service as $key => $value) { echo ' <label><input type="checkbox" name="service[' . $key . ']" value="' . $key . '" />' . $value . '</label>' . "\n"; } ?> </dd> </dl> このように項目を増やしたいのですがなぜか追加した項目の確認ページで Warning: Invalid argument supplied for foreach() in ~ と表示され echo '<dt>サービスは?</dt>'; echo '<dd>'; foreach ($service as $value) { switch ($value) { case 1: echo 'あああ<br />'; break; case 2: echo 'あああ<br />'; break; case 3: echo 'あああ<br />'; break; case 4: echo 'あああ<br />'; break; case 5: echo 'あああ<br />'; break; } } echo '</dd>'; この部分にエラーがあると表示されてしまいます。 これは$serviceに値がうまくいっていないということでしょうか? 素人の質問なので足りない処などあると思いますが よろしければ御回答ください。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHPでフォームからURLへの値の受け渡し

    選択された値をURLとして移動させたいと考えています。 例えば、http://example.com/というページにフォームを設置し、 ドロップダウンメニューから四国を選択すると http://example.com/shikoku/というページが表示されるといった具合です。 他のページを参考しつつ自分で考えてみたのですが、2度送信ボタンを押さなければページが表示されません。 最近になってPHPを触りはじめたので、いまいち何がおかしいのかわからず困っています…。 どなたかご教授お願いします。また、変な部分もあるかと思いますので、よろしければ教えてください。 <?php if($_POST['submit']) {$url = $_POST['tiiki']."/".$_POST['ken'] ;}?> <form action="<?php echo $url ;?>" method="post"> <select name="tiiki"> <?php $tiiki = array("kyusyu"=>"九州","shikoku"=>"四国");?> <?php foreach ( $tiiki as $tiiki1=>$tiiki2 ){?> <option value="<?php echo $tiiki1 ;?>"><?php echo $tiiki2 ;?></option> <?php };?> </select><br /> <select name="ken"> <?php $ken = array("fukuoka"=>"福岡","ehime"=>"愛媛");?> <?php foreach ( $ken as $ken1=>$ken2 ){?> <option value="<?php echo $ken1 ;?>"><?php echo $ken2 ;?></option> <?php };?> </select><br /> <input type="submit" name="submit" value="送信"> </form>

    • ベストアンサー
    • PHP