【问题标题】:Checking $_GET after imploding checkboxes to url to reselect previously chosen checkboxes在将复选框内爆到 url 后检查 $_GET 以重新选择先前选择的复选框
【发布时间】:2019-02-17 07:17:45
【问题描述】:

我有一个表单,我通过 checkbox.php 运行该表单并将复选框内爆到一个字符串并通过 URL 返回。

表格在这里:

<form action="checkbox.php" method="post">
<span class="gamma widget-title">YEAR</span><br />

<input type='checkbox' name='product_year[]' value="1970s" <?php echo ($_GET['product_cat'] == '1970s') ? ' checked "' : ''; ?>>1970s<br />
<input type='checkbox' name='product_year[]' value="1980s" <?php echo ($_GET['product_cat'] == '1980s') ? ' checked "' : ''; ?>>1980s<br />
<input type='checkbox' name='product_year[]' value="1990s" <?php echo ($_GET['product_cat'] == '1990s') ? ' checked "' : ''; ?>>1990s<br /><br />


<span class="gamma widget-title">PRODUCT</span><br />
<input type='checkbox' name='product_type[]' value="cards" <?php echo ($_GET['product_cat'] == 'cards') ? ' checked "' : ''; ?>>Cards<br />
<input type='checkbox' name='product_type[]' value="frames" <?php echo ($_GET['product_cat'] == 'frames') ? ' checked "' : ''; ?>>Frames<br /><br />

<span class="gamma widget-title">OCCASION</span><br />
<input type='checkbox' name='product_occasion[]' value="birthday" <?php echo ($_GET['product_cat'] == 'birthday') ? ' checked "' : ''; ?>>Birthday<br />
<input type='checkbox' name='product_occasion[]' value="anniversary" <?php echo ($_GET['product_cat'] == 'anniversary') ? ' checked "' : ''; ?>>Anniversary<br />

 <br>
<input type="submit" name="Submit" value="Submit">
<input type="reset" name="Reset" value="Reset"><br><br>
</form>

这里是checkbox.php

$product_year = $_POST['product_year'];
$product_type = $_POST['product_type'];
$product_occasion = $_POST['product_occasion']; 

if (isset ($product_year) && !isset($product_type) && !isset($product_occasion) )  {    
    $url = 'http://localhost/yy-search-test/?product_cat=' . implode( ',' ,$product_year);
    header('Location:'. $url);
    exit;    
}

else if (isset ($product_type) && !isset($product_year) && !isset($product_occasion) ) {

    $url = 'http://localhost/yy-search-test/?product_cat=' . implode( ',' ,$product_type);

    header('Location:'. $url);
    exit;    
}

else if (isset ($product_occasion) && !isset($product_year) && !isset($product_type) ) {

    $url = 'http://localhost/yy-search-test/?product_cat=' . implode( ',' ,$product_occasion);

    header('Location:'. $url);
    exit;    
}

else if (isset ($product_year) && isset($product_type) && !isset( $product_occasion) )  {

        $merged = array_merge($product_year, $product_type);
        $url = 'http://localhost/yy-search-test/?product_cat=' . implode( ',' ,$merged);

        header('Location:'. $url);
        exit;    
}

else if (isset ($product_type) && isset($product_occasion) && !isset( $product_year) )  {
        $merged = array_merge($product_type, $product_occasion);
        $url = 'http://localhost/yy-search-test/?product_cat=' . implode( ',' ,$merged);

        header('Location:'. $url);
        exit;    
}

else if (isset ($product_year) && isset($product_occasion) && !isset( $product_type) )  {
    $merged = array_merge($product_year, $product_occasion);
    $url = 'http://localhost/yy-search-test/?product_cat=' . implode( ',' ,$merged);

    header('Location:'. $url);
    exit;    

}

else if (!isset ($product_year) && !isset($product_type) && !isset($product_occasion) )  {


$msg = "Please make a selection";
$url = 'http://localhost/yy-search-test/?msg';

header('Location:'. $url);
exit;    
}

else {
    $merged = array_merge($product_year, $product_occasion, $product_type);
    $url = 'http://localhost/yy-search-test/?product_cat=' . implode( ',' ,$merged);

    header('Location:'. $url);
    exit;    
}

一切正常,但我想根据 URL 的输出字符串重新选择复选框。

当我选择 1 个类别时,它工作正常,比如 1970 年代,然后满足规则。

我遇到的问题是当我选择 2 个类别时。那么 == 1970s 不匹配 m,例如字符串是 ?product_cat=1970s,cards。

我尝试了一些方法,例如将字符串分解为数组,但我似乎无法让它工作。

谁能帮忙?

谢谢, 杰米

【问题讨论】:

    标签: php forms checkbox get implode


    【解决方案1】:

    假设我理解您希望 ($_GET['product_cat'] == '1970s') ? ' checked "' : ''; 在 product_cat 字符串中包含 1970 年代(或查询字符串中的任何内容)时设置“已检查”。

    你可以strpos。 strpos('1970s',$_GET['product_cat'])`。

    或者为了防止误报,将$_GET['product_cat']放入一个列表并使用in_array('1970s',explode(',',$_GET['product_cat']

    【讨论】:

    • 感谢 DinoCoderSaurus,我能够使用 strpos 并像 :)
    【解决方案2】:

    更新 *** 我明白你所说的误报是什么意思,因为选项“硬币卡”也选择了“卡片”,因为它也在那个字符串中。所以我改用了,这很奏效。再次感谢您的两个建议! :)

    【讨论】:

      猜你喜欢
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 2022-01-05
      • 2013-06-23
      • 2020-10-21
      相关资源
      最近更新 更多