Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从下拉菜单设置PHP cookie_Php_Html - Fatal编程技术网

从下拉菜单设置PHP cookie

从下拉菜单设置PHP cookie,php,html,Php,Html,我有一个PHP脚本,允许用户决定页面显示的语言。信息存储在cookie中,然后在需要时读取以显示正确的内容 目前,我使用一个HTML下拉框来允许用户选择语言,然后他们必须按下表单提交按钮来设置cookie。当他们在下拉菜单中选择语言时,它会自动选择该语言并提交表单,我如何做到这一点?我希望你能理解我的问题 我当前的PHP代码是: <?php $user_lang = null; if (isset($_POST["setc"])) { $expire = time() + 60 *

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

您需要使用JavaScript执行此操作:

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

每当用户更改下拉列表中的值时,将提交表单。

您需要使用JavaScript:

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

每当用户更改下拉列表中的值时,将提交表单。

将您的选择标记更改为:

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

如果没有JavaScript或任何其他客户端脚本语言,则无法使用select字段完成此操作。

将select标记更改为:

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

如果没有JavaScript或任何其他客户端脚本语言,则无法使用select字段完成此操作。

您可以在select字段中添加onchange事件:


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

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


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

答案是用javascript而不是PHP。您可以像下面这样使用JavaScript悄悄地执行此操作:

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

答案是JavaScript而不是PHP。您可以像下面这样使用JavaScript悄悄地执行此操作:

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

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

<noscript><input value="save setting" type="submit"></noscript>
然后,由于只有当用户禁用javascript时才会显示submit按钮,因此需要添加一个隐藏输入来检查表单是否已在服务器端提交

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

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

<noscript><input value="save setting" type="submit"></noscript>
然后,由于只有当用户禁用javascript时才会显示submit按钮,因此需要添加一个隐藏输入来检查表单是否已在服务器端提交

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

@Callum不,不幸的是没有。@Callum不,不幸的是没有。