从下拉菜单设置PHP cookie


Setting PHP cookie from dropdown menu

我有一个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>

将选择标签改为:

<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
}

如果没有JavaScript或任何其他客户端脚本语言,这是不能用select字段完成的。

您需要使用JavaScript:

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

或者如果你使用jQuery:

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

这将在用户更改下拉列表中的值时提交表单。

可以给select:

添加一个onchange事件

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

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

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

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

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

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

答案是JavaScript而不是PHP。你可以用JavaScript这样做:

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