首页 文章

以php形式验证/回显复选框

提问于
浏览
0

使用复选框在PHP表单上工作的第一个计时器 . 这些方法都在我的其他输入上工作,但我显然不明白如何处理数组 . 我想在刷新/提交时检查复选框,因此用户不必重新执行,我正在尝试验证所有表单值以防止注入 .

这是输入:

<div>
  <p>
    <input type="checkbox" name="project[]" id="project-type1" value="type1" <?php if ((isset($project)) && (in_array( 'type1', $project))) {echo 'checked="checked"';} ?>/>Type 1</p>
  <p>
    <input type="checkbox" name="project[]" id="project-type2" value="type2" <?php if ((isset($project)) && (in_array( "type2", $project))) {echo 'checked="checked"';} ?>/>Type 2</p>
  <p>
    <input type="checkbox" name="project[]" id="project-type3" value="type3" <?php if ((isset($project)) && (in_array( "type3", $project))) {echo 'checked="checked"';} ?>/>Type 3</p>
  <p>
    <div class="error" id="error-project">
      <?php if (isset($err_project)) { echo $err_project; } ?>
      <?php if (isset($err_project2)) { echo $err_project2; } ?>
    </div>
  </p>
</div>

在这里,我正在尝试修剪,消毒和回显复选框数据:

if (isset($_POST['project'])) { 
  $trimmed_project = array_map('trim', ($_POST['project'])); 
  $project = filter_var($trimmed_project, FILTER_SANITIZE_STRING); }

在这里,我确认只允许提交字母,空格和逗号:

if ( !(preg_match('/^([A-Za-z\ \,]+)$/', $project)) ) : $err_project2 = "
<p>Project Type value is invalid.</p>"; endif;

有人能指点我正确的方向吗?

1 回答

  • 0

    您将无法使用PHP来保持页面重新加载时选中的复选框;但是,您可以使用jquery和cookie来解决这个问题 . 您可以使用下面的示例代码并根据您的需要使用它 . 有些浏览器不允许离线cookie,所以如果你正在测试这个离线使用IE,它应该工作 . 这样你就可以玩它并找出它最适合你的方式 .

    <!DOCTYPE HTML>
    <html>
      <head>
        <meta charset="utf-8">
        <title>Persist checkboxes</title>
        <style>
        button{
          margin-top:8px;
        }
        </style>
      </head>
    
      <body>
        <div>
          <label for="option1">Option 1</label>
          <input type="checkbox" id="option1">
        </div>
        <div>
          <label for="option2">Option 2</label>
          <input type="checkbox" id="option2">
        </div>
        <div>
          <label for="option3">Option 3</label>
          <input type="checkbox" id="option3">
        </div>
    
        <button>Check all</button>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
        <script src="http://cdn.jsdelivr.net/jquery.cookie/1.4.0/jquery.cookie.min.js"></script>
    
    
        <script>
          function handleButtonClick(button){
            if ($(button).text().match("Check all")){
              $(":checkbox").prop("checked", true)
            } else {
              $(":checkbox").prop("checked", false)
            };
            updateButtonStatus();
          }
          function updateButtonStatus(){
            var allChecked = $(":checkbox").length === $(":checkbox:checked").length;
            $("button").text(allChecked? "Uncheck all" : "Check all");
          }
          function updateCookie(){
            var elementValues = {};
            $(":checkbox").each(function(){
              elementValues[this.id] = this.checked;
            });
            elementValues["buttonText"] = $("button").text();
            $.cookie('elementValues', elementValues, { expires: 7, path: '/' })
          }
          function repopulateFormELements(){
            var elementValues = $.cookie('elementValues');
            if(elementValues){
              Object.keys(elementValues).forEach(function(element) {
                var checked = elementValues[element];
                $("#" + element).prop('checked', checked);
              });
              $("button").text(elementValues["buttonText"])
            }
          }
          $(":checkbox").on("change", function(){
            updateButtonStatus();
            updateCookie();
          });
          $("button").on("click", function() {
            handleButtonClick(this);
            updateCookie();
          });
          $.cookie.json = true;
          repopulateFormELements();
        </script>
    

相关问题