我在一个有英国和爱尔兰子文件夹的网站上工作。这两个网站都在一个CMS上工作,其中有爱尔兰部分和英国部分。我想存储一个cookie,其中包含他们从下拉中选择的网站版本
到目前为止,我的代码是Index.html
<form id="region_select" name="region_select" action="/includes/region-val.php" method="post">
<select id="region-picker" name="region-picker" onchange="this.form.submit();">
<option>--- Please Select Your Region ---</option>
<option value="IE" id="IE" name="set_region[IE]">Visit Irish Website</option>
<option value="UK" id="UK" name="set_region[UK]">Visit UK Website</option>
</select>
<input type="submit" name="submit_region" value="Go!"/>
</form>
我的region-val.php代码是
if (isset($_POST["submit_region"])) {
$region = key($_POST["set_region"]);
setcookie("region", $region, time() + 24 * 3600);
}
if($_COOKIE["region"] == "UK"){
header('Location:http://google.com');
}
else{
header('Location:http://yahoo.com');
}
到目前为止,它只重定向到该网站的一个版本。
我不明白您为什么要给<select>
内的<options>
提供名称。重要的是被选中者的名字。
将表单更改为:
<form id="region_select" name="region_select" action="/includes/region-val.php" method="post">
<select id="region-picker" name="region-picker" onchange="this.form.submit();">
<option>--- Please Select Your Region ---</option>
<option value="IE">Visit Irish Website</option>
<option value="UK">Visit UK Website</option>
</select>
<input type="submit" name="submit_region" value="Go!"/>
</form>
您给<select>
的名称是region-picker
,所以它是您感兴趣的输入的值
if (isset($_POST["region_picker"])) {
$region = $_POST["region_picker"]);
// Maybe you should check here that the user has submitted a valid region
setcookie("region", $region, time() + 24 * 3600);
}
if($_COOKIE["region"] == "UK"){
header('Location:http://google.com');
}
else{
header('Location:http://yahoo.com');
}
if (isset($_POST["submit_region"])) {
$region = key($_POST["set_region"]);
setcookie("region", $region, time() + 24 * 3600);
// add code for redirect at current page without post vars
}
然后饼干就起作用了。
注意:您可以在重定向后获得cookie值。
在PHP中创建的cookie(使用setcookie())不会立即填充到$_COOKIES数组中——元素只是从请求中添加的。在运行时添加值可能是可行的,但我不会依赖于此。
此外,HTML选择返回单个项,而不是数组。
更好的解决方案是:
if (isset($_POST["set_region"])) {
$region = $_POST["set_region"];
setcookie("region", $region, time() + 24 * 3600);
}
if($_COOKIE["region"] == "UK" || $region == "UK"){
header('Location:http://google.com');
}
else{
header('Location:http://yahoo.com');
}
或者,使用javascript设置cookie(但请注意,它将具有由表单所在的URL目录定义的路径范围)。