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

时间:2016-03-10 16:20:33

标签: php forms validation checkbox

使用复选框在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); }

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

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

有人可以帮助我指出正确的方向吗?

1 个答案:

答案 0 :(得分: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>