从下拉菜单中设置PHP cookie

时间:2011-09-17 15:00:43

标签: php html

我有一个PHP脚本,旨在允许用户决定页面显示的语言。信息存储在cookie中,然后在需要时读取以显示正确的内容。

目前,我使用HTML下拉框允许用户选择语言,然后他们必须按表单提交按钮来设置cookie。 如何在下拉菜单中选择语言时自动选择并提交表单?我希望您能理解我的问题。

我目前的PHP代码是:

<?php
$user_lang = null;
if (isset($_POST["setc"])) {
    $expire = time() + 60 * 60 * 24 * 30;
    setcookie("mycookie", $_POST["sel"], $expire);
    header("location: " . $_SERVER["PHP_SELF"]);
} else if (isset($_COOKIE["mycookie"])) {
    $user_lang = $_COOKIE["mycookie"];
}
?>

<meta charset='utf-8'>
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
    <select name="sel" size="1">
        <option value="en"<?php echo (!is_null($user_lang) && $user_lang === "en" ? " selected" : ""); ?>>English</option>
        <option value="es"<?php echo (!is_null($user_lang) && $user_lang === "es" ? " selected" : ""); ?>>Español</option>
        <option value="fr"<?php echo (!is_null($user_lang) && $user_lang === "fr" ? " selected" : ""); ?>>Français</option>
        <option value="de"<?php echo (!is_null($user_lang) && $user_lang === "de" ? " selected" : ""); ?>>Deutsch</option>
    </select>
    <input name="setc" value="save setting" type="submit">
</form>

5 个答案:

答案 0 :(得分:4)

将您的选择标记更改为:

<select name="sel" size="1" onchange="this.form.submit();">

在用户选择语言时提交表单。

如果您希望在没有JavaScript的情况下执行此操作,则可以使用多个提交按钮方法:

<input name="set_language[en]" value="English" type="submit">
<input name="set_language[es]" value="Español" type="submit">
<input name="set_language[fr]" value="Français" type="submit">
<input name="set_language[de]" value="Deutsch" type="submit">

处理此表单非常简单:

if (isset($_POST["set_language"])) {
    $language = key($_POST["set_language"]);
    // $language contains user-selected language code now
}

使用select字段但不使用JavaScript或任何其他客户端脚本语言无法完成此操作。

答案 1 :(得分:3)

您需要使用JavaScript:

<select name="sel" size="1" onchange="this.form.submit();">

或者如果你使用jQuery:

$("select[name='sel']").change(function() {
    $(this).parent().submit();
});

只要用户在下拉列表中更改值,就会提交表单。

答案 2 :(得分:2)

您可以在选择中添加onchange事件:

<select onChange="document.forms[0].submit();">

请记住,为没有启用javascript的用户保留提交按钮是一件好事。你可以使用javascript隐藏按钮,这样就不会混淆那些有常规浏览器的窗口。

答案 3 :(得分:2)

我认为你必须像其他人一样使用javascript,但如果用户没有激活javascript,你也可以使用提交按钮作为备份:

<noscript><input value="save setting" type="submit"></noscript>

然后,由于提交按钮只会在用户禁用javascript时显示,因此您需要添加一个隐藏的输入来检查表单是否已在服务器端提交

<input type="hidden" name="setc" value="true" />

答案 4 :(得分:1)

答案是JavaScript而不是PHP。你可以用这样的方式不引人注意地做到这一点:

<script>
    window.onload = function() {
        document.getElementById("idOfDropDown").addEventListener("change", function() {
           document.forms["formName"].submit();
        });
    }
</script>