-4
 <form name="search" method="post" action="<?php $_SERVER['PHP_SELF'];?>">
 Seach for: <input type="text" name="find" /> in 
 <Select NAME="field">
 <Option VALUE="english">english</option>
 <Option VALUE="spanish">spanish</option>
 </Select>
 <input type="hidden" name="searching" value="yes" />
 <input type="submit" name="search" value="Search" />
 </form>

  <?php
$options = array('english'=> array('1' => 'one', '2' => 'two'), 'spanish' =>array('1'=>'uno', '2'=>'dos'));

if (($_POST['find'] == '1')&& ($_POST['field'] == 'english')){
    echo $options['english']['1'];
}
?>

ユーザーが「1」とseclet「english」を入力すると1が表示され、ユーザーが「1」を選択すると「スペイン語」を選択するとunoが表示されます。

質問:

  1. この行を置き換える良い方法はありますか?
 if (($_POST['find'] == '1')&& ($_POST['field'] == 'english')){
      echo $options['english']['1'];
    }

1 から 100 までの数字があるとしたら、これらのコードを繰り返すことは不可能です (==1 && ==english, ==2 && == english...)。

2 このスクリプトを実行すると、次のように表示されます

Notice: 未定義のインデックス: find ...

この問題は何ですか?それを修正するにはどうすればよいですか?

4

3 に答える 3

0

最初のポイント:

<form name="search" method="post" action="<?php $_SERVER['PHP_SELF'];?>">

<?php $_SERVER['PHP_SELF'];?>何もしません。ここではechoを使用する必要があります。それにもかかわらず、アクション属性が設定されていない場合、フォームが $_SERVER['PHP_SELF'] でスクリプトを呼び出すのがデフォルトの動作であるため、バグは表示されません。

また :

<input type="hidden" name="searching" value="yes" />

役に立たないようです。

2 番目のポイント:

もちろん、静的な方法で可能な各選択肢を解析したくはありません。抽象化と動的動作を使用します。

言語ごとに 1 つの配列インデックスがあり、各サブ配列は各数値に使用される単語を示します。したがって、ルールがあり、計算は次のようになります。

<?php
$input = trim($_POST['find']);
$language = $_POST['field'];
$output = $options[$language][$input];
echo $output;
?>

それは最小限のコードです。「そのまま」使用しないでください。少なくともキーが存在するかどうかを確認し、適切なエラー メッセージを提供する必要があります。

于 2013-05-19T09:59:30.273 に答える