2016-12-07 12 views
2

私は、選択した内容に応じて入力方法を変更するためにJavaScriptを使用する検索フォームを用意しています。したがって、「名前」を選択した場合はテキストボックスが表示されますが、「評価」が選択されている場合は1-5のドロップダウンリストが表示されます。PHPで検索クエリを消去する方法は?

<form method="GET" action="results_sample.php"> 
    <p>Search by: <!-- Dropdown list allows users to search by different elements --> 
    <select id="searchtype" name="searchtype" onchange="changeview()"> <!-- onchange calls changeview() every time the dropdown value is changed. Allows ratings to be seen --> 
     <option value="School">School</option> 
     <option value="Name">Name</option> 
     <option value="Rating">Rating</option> 
     <option value="Class Location">Class Location</option> 
     <option value="Subject">Subject</option> 
    </select> 
    </p> 
    <span id="standard" style="display:inline">Search Query: <input type="text" name="query"></span> 
    <span id="locationsearch" style="display:none"> (Longitude-Lattitude pair) <input type="number" id="longitude" step="any"> - <input type="number" id="latitude" step="any"> </span> 
    <span id="ratevalue" style="display:none"> Choose rating: 
    <select id="ratings"> 
     <option value=1>1</option> 
     <option value=2>2</option> 
     <option value=3>3</option> 
     <option value=4>4</option> 
     <option value=5>5</option> 
    </select> 
    </span> 
    <p><input type="submit"></p> 
</form> 

results_sample.php内の関連するコードは次のとおりです。私は、検索クエリにテキストを入力し、その後評価に切り替え、そしてしようとした場合

1):

<?php 
if (isset($_GET['searchtype'])) { 
    if (!empty($_GET['query'])) { 
     $search = $_GET['query']; 
    } elseif (!empty($_GET['ratings'])) { 
     $search = $_GET['ratings']; 
    } elseif (!empty($_GET['longitude']) || isset($_GET['latitude'])) { 
     $search = 'more to come...'; 
    } 

    echo '<p>Entries containing "', $search, '" in "', $_GET['searchtype'], '"</p>'; 
    } 
?> 

私は2つの問題を抱えています評価で検索するには、まだ背景にテキストボックスが表示されず、代わりにその情報が使用されます。

2)テキストボックスが空で、Longitude-Latitudeで検索する場合、Ratingはデフォルトの1(背景には表示されません)に設定され、その値が使用されます。

+0

'$ _GET ['searchtype']'をチェックし、その値に応じて適切な '$ _GET'変数を選択してください。またはjsで他のすべてのフィールドをクリアします。 –

答えて

1

一つの選択肢は$_GET['searchtype']値をチェックし、それに応じて別の$_GET変数を選択し、のようなものです:

switch ($_GET['searchtype']) { 
    case 'Name': 
     $search = $_GET['query']; 
     break; 

    case 'Rating': 
     $search = $_GET['ratings']; 
     break; 

    case 'Class Location': 
     $search = 'other value'; 
     break; 

    // add more cases as you wish 
} 

その他のオプションは#searchtypeを変更したときに、他のフィールドの値をクリアするにはJavaScriptを使用しますが、この場合にすることができますselect#ratingsがまだサーバーに送信されます。

+0

ありがとう!私はこの解決策をとるつもりです。しかしこれは「いい形」と考えられていますか?のように、私はまだ無関係な情報の束を送信しています。実際のサイトはどのようにこれを処理しますか? –

+0

ここには何も悪いことはありません。余分なデータはサーバーに送られますが、実際に使用しているデータや適切なエスケープデータを使用しないと何も起こりません。 –

関連する問題