【问题标题】:How to wipe a search query in PHP?如何在 PHP 中擦除搜索查询?
【发布时间】:2017-04-22 02:04:24
【问题描述】:

我有一个搜索表单,它使用 Javascript 来根据所选内容更改输入法。因此,如果您选择了“名称”,您会看到一个文本框,但如果您选择了“评级”,您会看到一个 1-5 的下拉列表。

<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中的相关代码为:

<?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>';
    }
?>

我有两个问题:

1) 如果我在搜索查询中输入文本,然后切换到评级,并尝试按评级搜索,它仍然会在后台隐藏文本框,并改用该信息。

2) 如果文本框为空并且我想按经纬度搜索,Rating 仍设置为默认值 1(在后台不可见)并且它采用该值。

【问题讨论】:

  • 检查$_GET['searchtype'] 并根据其值选择适当的$_GET 变量。或者使用 js - 清除所有其他字段。

标签: php forms get


【解决方案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 仍将发送到服务器。

【讨论】:

  • 谢谢!我会选择这个解决方案。这被认为是“好形式”吗?例如,我仍在发送一堆无关紧要的信息。真实网站如何处理这个问题?
  • 我没有看到任何不好的地方。当然,一些额外的数据会到达服务器,但由于您不使用它,并且您真正使用的正确转义数据 - 什么都不会发生。
猜你喜欢
  • 2015-06-04
  • 2016-05-09
  • 2022-11-29
  • 2012-11-12
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
相关资源
最近更新 更多