【问题标题】:Having to Submit Twice必须提交两次
【发布时间】:2014-03-16 07:30:18
【问题描述】:

好的,我是编程新手,我对某些复选框有疑问。
我想存储是否选中了复选框并在按下按钮时显示它。
我正在进行过滤器搜索,因此当有人选择一个复选框时,它只会显示该过滤器。
但是,只有当我提交并选择或取消选择一个复选框两次时它才有效。
我怎样才能让它只需要这样做一次?

<form name="search" action="<? $_SERVER['PHP_SELF']; ?>" method="post">
   <input type="checkbox" name="checkAllMyCB" id="checkAllMyCB" onclick="jqCheckAll2( this.id, 'myCB' )"/>All
   <input name="category[]" type="checkbox" <? if (in_array("art", $_SESSION['category'])) { echo "checked='checked'";  } ?>value="art">Art
   <input name="category[]" type="checkbox" <? if (in_array("church", $_SESSION['category'])) { echo "checked='checked'";  } ?>value="church">Church
   <input name="category[]" type="checkbox" <? if (in_array("education", $_SESSION['category'])) { echo "checked='checked'";  } ?>value="education">Education/Schools
   <input name="category[]" type="checkbox" <? if (in_array("food", $_SESSION['category'])) { echo "checked='checked'";  } ?>value="food">Food
   <input name="category[]" type="checkbox" <? if (in_array("gardening", $_SESSION['category'])) { echo "checked='checked'";  } ?>value="gardening">Gardening
   <input name="category[]" type="checkbox" <? if (in_array("kids", $_SESSION['category'])) { echo "checked='checked'";  } ?>value="kids">Kids
   <input name="category[]" type="checkbox" <? if (in_array("music", $_SESSION['category'])) { echo "checked='checked'";  } ?>value="music">Music
   <input name="category[]" type="checkbox" <? if (in_array("outdoors", $_SESSION['category'])) { echo "checked='checked'";  } ?>value="outdoors">Outdoors
   <input name="category[]" type="checkbox" <? if (in_array("seniors", $_SESSION['category'])) { echo "checked='checked'";  } ?>value="seniors">Seniors
   <input name="category[]" type="checkbox" <? if (in_array("sports", $_SESSION['category'])) { echo "checked='checked'";  } ?> value="sports">Sports/Physical Activity
   <input name="category[]" type="checkbox" <? if (in_array("support", $_SESSION['category'])) { echo "checked='checked'";  } ?>value="support">Club/Support Group
   <input type="submit" name="Go2" id="Go2" value="Go &gt;" />
<? 
$_SESSION['category'] = $_POST['category']; ?>

</form>

【问题讨论】:

  • 如果您希望句子分行,请在每行末尾放置两个空格。我为您编辑了它,因为这就是您在源代码中的内容。如果您想在一个段落中不换行,请随时将其改回。
  • 感谢我是 Stackoverflow 的新手。感谢你们对我的帮助。竖起大拇指
  • 没问题,谢谢。你的第二行还有一个连续的句子。我不太明白它是如何写的——也许你可以把它分成两部分或改写? (我会自己做,但 StackOverflow 不接受这么小的编辑。)
  • 谢谢,英语是我的第 5 种语言,所以我很抱歉出现拼写错误或错误。我在荷兰长大。

标签: php html arrays forms session-variables


【解决方案1】:

您的代码中有两个错误:

  1. 您首先显示表单,然后将值设置到SESSION。这应该是相反的方式,因为提交时,您的表单将首先显示,并且仅在设置值之后才显示,这就是为什么您遇到提交两次以查看值的问题。

  2. 您没有检查SESSION 变量是否已设置在in_array 之前,这最初会引发错误。与$_POST['category']相同的情况

首先把它放在上面:

<?
if (isset($_POST['category'])){
$_SESSION['category'] = $_POST['category']; }
else
{
    unset($_SESSION['category']);
}
?>

然后将您的表单代码更改为:

<form name="search" action="" method="post">
   <input type="checkbox" name="checkAllMyCB" id="checkAllMyCB" onclick="jqCheckAll2( this.id, 'myCB' )"/>All
   <input name="category[]" type="checkbox" <?php if (isset($_SESSION['category']) && in_array("art", $_SESSION['category'])) { echo "checked='checked'";  } ?> value="art">Art
   <input name="category[]" type="checkbox" <?php if (isset($_SESSION['category']) && in_array("church", $_SESSION['category'])) { echo "checked='checked'";  } ?> value="church">Church
   <input name="category[]" type="checkbox" <?php if (isset($_SESSION['category']) && in_array("education", $_SESSION['category'])) { echo "checked='checked'";  } ?> value="education">Education/Schools
   <input name="category[]" type="checkbox" <?php if (isset($_SESSION['category']) && in_array("food", $_SESSION['category'])) { echo "checked='checked'";  } ?> value="food">Food
   <input name="category[]" type="checkbox" <?php if (isset($_SESSION['category']) && in_array("gardening", $_SESSION['category'])) { echo "checked='checked'";  } ?>value="gardening">Gardening
   <input name="category[]" type="checkbox" <?php if (isset($_SESSION['category']) && in_array("kids", $_SESSION['category'])) { echo "checked='checked'";  } ?> value="kids">Kids
   <input name="category[]" type="checkbox" <?php if (isset($_SESSION['category']) && in_array("music", $_SESSION['category'])) { echo "checked='checked'";  } ?> value="music">Music
   <input name="category[]" type="checkbox" <?php if (isset($_SESSION['category']) && in_array("outdoors", $_SESSION['category'])) { echo "checked='checked'";  } ?> value="outdoors">Outdoors
   <input name="category[]" type="checkbox" <?php if (isset($_SESSION['category']) && in_array("seniors", $_SESSION['category'])) { echo "checked='checked'";  } ?> value="seniors">Seniors
   <input name="category[]" type="checkbox" <?php if (isset($_SESSION['category']) && in_array("sports", $_SESSION['category'])) { echo "checked='checked'";  } ?> value="sports">Sports/Physical Activity
   <input name="category[]" type="checkbox" <?php if (isset($_SESSION['category']) && in_array("support", $_SESSION['category'])) { echo "checked='checked'";  } ?> value="support">Club/Support Group
   <input type="submit" name="Go2" id="Go2" value="Go &gt;" />
</form>

【讨论】:

  • 非常感谢您的大力帮助。
  • @user3325732 糟糕,我刚刚意识到可以通过取消设置 SESSION 而不是将其设为空来缩短此代码(通过跳过 !empty($_SESSION['category']) 检查),您可能想要使用它来代替。跨度>
  • 谢谢@I Can Has Cheezburger
猜你喜欢
  • 2017-05-10
  • 2015-07-02
  • 1970-01-01
  • 2021-09-29
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多