PHP 没有选择复选框的正确状态来设置变量


PHP not picking up correct state of checkbox to set variable

>我有一个困扰我好几天的问题 - 当复选框保持打开或关闭时,我正在尝试将变量附加到选项值中。 变量正在显示,但不是我的意图,我希望在复选框关闭时将"无订阅"附加到选项值中,当复选框打开时将"订阅"附加到选项值中。这是我的脚本:

<?php
if(isset($_POST['subscribe']) == '1')   {
    $sub = ", Subscribe";
    } else {
    $sub = ", No Subscription";}
?>
--------------------------------------------------------------------------------------------

            <form class="cart" action="http://serber.com" method="post">
            <section class="clear"></section>
             <label>Tampons (Non-Applicator) Regular :&nbsp;</label> 
              <select name="productpr">
                <option value="NT12<?php printf($sub); ?>:17.95">1 Month - $17.95 <span></span> </option>
                <option value="NT12 3 Months<?php printf($sub); ?>:33.85">3 Months - $33.85</option>
                <option value="NT12 6 Months<?php printf($sub); ?>:57.70">6 Months - $57.70</option>
              </select>
              <input type="hidden" name="submitted" value="true" />
               <br /><input type="submit" value="Add to Cart">&nbsp;
               <input type="hidden" name="subscribe[]" value="0" />
               <input type="checkbox" name="subscribe[]" value="1">Check Box if you wish to have a recurring subscription</input> 
          </form>
I am at my wit's end with this because it seems I have the isset correct but the checkbox value

未设置。

您具有相同的hidden fieldcheckbox名称。请更改隐藏字段名称。和 在 PHP 代码中放置代码

if(isset($_POST['subscribe']) && ($_POST['subscribe'][0] == '1'))   

代替

if(isset($_POST['subscribe']) == '1')   

如果无法更改隐藏字段的名称,请在 if 条件中使用代码

if(isset($_POST['subscribe']) && ($_POST['subscribe'][1] == '1'))   

谢谢

if (isset($_POST['subscribe'])

AND $_POST['subscribe'] == '1') {

isset()返回布尔值,请将其评估为布尔值或使用===将其与布尔值进行比较。虽然类型强制仍然会给出正确的结果,但它效率低下且令人困惑。只需做:

if (isset($_POST['subscribe'])) {

。但是,这本身并不能解决问题。因为您已经将输入命名为 subscribe[] ,所以$_POST['subscribe']将始终被设置,并且它将始终是一个包含 1 或 2 个元素的数组。为此目的创建数组是没有意义的,请尝试以下代码:

<?php
  if (isset($_POST['subscribe'])) {
    $sub = ", Subscribe";
  } else {
    $sub = ", No Subscription";
  }
?>
<!--------------------------------------------->
<form class="cart" action="http://serber.com" method="post">
  <section class="clear"></section>
  <label>Tampons (Non-Applicator) Regular :&nbsp;</label> 
  <select name="productpr">
    <option value="NT12<?php printf($sub); ?>:17.95">1 Month - $17.95</option>
    <option value="NT12 3 Months<?php printf($sub); ?>:33.85">3 Months - $33.85</option>
    <option value="NT12 6 Months<?php printf($sub); ?>:57.70">6 Months - $57.70</option>
  </select>
  <input type="hidden" name="submitted" value="true" /><br />
  <input type="submit" value="Add to Cart" />&nbsp;
  <input type="checkbox" name="subscribe" value="1"<?php if (isset($_POST['subscribe'])) echo ' checked="checked"'; ?>>Check Box if you wish to have a recurring subscription</input> 
</form>
<</div> div class="answers">

试试这个。它使用您的代码为我工作。你已经放了一个<input type="hidden" name="subscribe[]" value="0">.没这个必要。

<?php
echo"hi";
if(isset($_POST['subscribe']) == '1')   {
    $sub = ", Subscribe";
    } else {
    $sub = ", No Subscription";}
    echo $sub;
?>
<html>
<body>
            <form class="cart" method="post">
            <section class="clear"></section>
             <label>Tampons (Non-Applicator) Regular :&nbsp;</label> 
              <select name="productpr">
                <option value="NT12<?php echo($sub); ?>:17.95">1 Month - $17.95 <span></span> </option>
                <option value="NT12 3 Months<?php echo($sub); ?>:33.85">3 Months - $33.85</option>
                <option value="NT12 6 Months<?php echo($sub); ?>:57.70">6 Months - $57.70</option>
              </select>
              <input type="hidden" name="submitted" value="true" />
               <br /><input type="submit" value="Add to Cart">&nbsp;
               <input type="checkbox" name="subscribe[]" value="1">Check Box if you wish to have a recurring subscription</input> 
          </form>
          </body>
</html>