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

How to pass select value to form action using PHP?

我正在尝试对 Wikipedia 进行简单搜索,我可以在其中键入我想要搜索的内容,并在 select 中我可以 select 语言。我想要做的是让 select 值能够以不同的语言进行搜索,所以我只需替换 wikipedia.org url

中的语言字符串

(例如,如果我在 select 下拉列表中使用 select 法语,则表单应将我重定向至 fr.wikipedia.org,如果我 select 英语,则应将我重定向至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>

现在,在提交时我得到这个 url:https://.wikipedia.org/w/index.php?search=cat

如何传递 select 值以形成操作以便我可以将其添加到 URL 的开头?

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>

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

相反,您需要做的是处理页面上的表单提交,然后重定向到维基百科。默认情况下,当您提交 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);
}