我正在尝试对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是在加载页面时处理的,而不是在提交表单之后才处理的。第一次访问此页面时,未设置$_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);
}
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>