【问题标题】:Setting PHP cookie from dropdown menu从下拉菜单中设置 PHP cookie
【发布时间】:2015-03-14 18:51:02
【问题描述】:

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

【问题讨论】:

    标签: php html


    【解决方案1】:

    将您的选择标签更改为:

    <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 或任何其他客户端脚本语言,则无法使用选择字段来完成此操作。

    【讨论】:

      【解决方案2】:

      您需要使用 JavaScript 来完成:

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

      或者如果你使用 jQuery:

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

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

      【讨论】:

      • @Callum 不,很遗憾没有。
      【解决方案3】:

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

      &lt;select onChange="document.forms[0].submit();"&gt;

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

      【讨论】:

        【解决方案4】:

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

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

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

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

        【讨论】:

          【解决方案5】:

          答案是 JavaScript 而不是 PHP。你可以像这样使用 JavaScript 不显眼地做到这一点:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-06-04
            • 2015-01-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-06
            相关资源
            最近更新 更多