アプリ版:「スタンプのみでお礼する」機能のリリースについて

ドロップダウンリストで選択された値が $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";
?>

A 回答 (2件)

別に想定したデータのチェック自体はする必要はないですが、


どうしてもというならこんな感じでホワイトリストをつくり
マッチしない場合エラーにすればよいのでは?

<?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;
?>
    • good
    • 0
この回答へのお礼

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

また何かありましたら宜しくお願い致します。

お礼日時:2011/06/16 17:40

デバッグしてみました?


MenuValue関数に渡された値を画面出力でもしてみれば、答えは出そうですが。

function MenuValue($v,$r)
{
  echo 'r => '. $r .'<br>';
  echo 'post[menu] => '. $_POST['menu'] .'<br>';



・ $vは固定なので引数にする必要もなさそう。
・ 一致しなかった時のreturn値を定義しないのがちょっと気持ち悪い。
のは気にはなりますが、普通に動きそうにみえます。

でも動かないのは・・・
・文字コードが一致してない
・POST先が違ってる
・menuって名前が重複してる
とか、そんな感じでしょうか?
    • good
    • 0
この回答へのお礼

ご回答頂き有難う御座います。

取り敢えずこのソースで問題なく動作してるのですが・・・

アドバイス頂いた箇所、再度見直してみますネ!?

お礼日時:2011/06/16 17:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!