如何使用PHP传递选择值以形成动作?

问题描述 投票:1回答:2

我正在尝试对Wikipedia进行简单搜索,在其中可以键入要搜索的内容,并在其中选择可以选择语言的位置。我想做的是获取选择值以便能够以不同的语言进行搜索,因此我只替换了wikipedia.org的URL中的语言字符串

(例如,如果我在选择下拉列表中选择法语,则该表单应将我重定向到fr.wikipedia.org,如果我选择英语,则应将我重定向到en.wikipedia.org)

这是我到目前为止尝试过的:

<form action="https://<?php $_POST["language"] ?>.wikipedia.org/w/index.php">
  <input name="search" type="text" />
  <select name="language">
    <option value="en">English</option>
    <option value="fr">French</option>
  </select>
</form>

现在,在提交时,我得到以下网址:https://.wikipedia.org/w/index.php?search=cat

如何将选择值传递给表单操作,以便我可以在URL的开头将其添加?

php html forms wikipedia-api
2个回答
1
投票

您当前的脚本不起作用的原因是因为PHP是在加载页面时处理的,而不是在提交表单之后才处理的。第一次访问此页面时,未设置$_POST['language'],因此将表单操作设置为https://.wikipedia.org/w/index.php。然后,如果您提交表格(get),您将以https://.wikipedia.org/w/index.php?search=cat&language=en结尾。

相反,您需要做的是在页面上处理表单提交,然后重定向到Wikipedia。默认情况下,当您提交form(带有default method of get)时,您最终会进入类似/index.php?search=cat&language=en的页面。因此,现在您可以读取这些$_GET参数来构造要重定向到的URL。

<?php
    if (isset($_GET) && count($_GET)) {
        $language = $_GET["language"];
        $search = $_GET["search"];
        $action = "https://".$language.".wikipedia.org/w/index.php?search=".$search;
        header('Location: '.$action);
    }
?>

<form>
  <input name="search" type="text"/>
  <select name="language">
    <option value="en">English</option>
    <option value="fr">French</option>
  </select>
</form>

另一种方法是设置<form method="post">,然后在PHP中使用$_POST,例如:

if ($_POST) {
    $language = $_POST["language"];
    $search = $_POST["search"];
    $action = "https://".$language.".wikipedia.org/w/index.php?search=".$search;
    header('Location: '.$action);
}

1
投票

JS将使它比PHP容易得多。

编辑:这仅适用于您的特定用法。如果您想要使用PHP而不是javascript的更通用方法,请查看@WOUNDEDStevenJones的答案

<input id="srch" type="text" />
  <select id="lang" name="language">
    <option value="en">English</option>
    <option value="fr">French</option>
  </select>
  <button onclick="search()">Search!</button>

  <script>
      function search() {
          var term =document.getElementById("srch").value;
          var lang = document.getElementById("lang").value;
                    var link = "https://"+lang+".wikipedia.org/wiki/"+term;
                    location.replace(link);
      }
  </script>
© www.soinside.com 2019 - 2024. All rights reserved.