Php 带有复选框的表单到输入字段,反之亦然-缺少第一个值

Php 带有复选框的表单到输入字段,反之亦然-缺少第一个值,php,javascript,jquery,forms,checkbox,Php,Javascript,Jquery,Forms,Checkbox,我有一个小表单,其中我将数组$menu列为复选框 然后使用jQuery(参见下面的脚本)将复选框的值放入(最终隐藏的)输入字段中。我知道这不是传统的方式,但我想把它们都存储为一个统一的值 当再次加载表单时(或在提交之后),我当然需要使用存储为字符串的值(从输入字段)再次填充这些字段 我使用一个简单的strpos()和一个三元运算符来表示“checked” 我的问题是,在每次加载时,列表中检查的第一个值不会被确认,也不会被检查。始终是第一个并且仅是第一个(在列表中位于上方-我不是指绝对第一个,而是

我有一个小表单,其中我将数组
$menu
列为复选框

然后使用jQuery(参见下面的脚本)将复选框的值放入(最终隐藏的)输入字段中。我知道这不是传统的方式,但我想把它们都存储为一个统一的值

当再次加载表单时(或在提交之后),我当然需要使用存储为字符串的值(从输入字段)再次填充这些字段

我使用一个简单的
strpos()
和一个三元运算符来表示
“checked”

我的问题是,在每次加载时,列表中检查的第一个值不会被确认,也不会被检查。始终是
第一个
并且
仅是第一个
(在列表中位于上方-我不是指
绝对
第一个,而是之前要检查的第一个。保存字符串中的第一个。)。这意味着,如果我显示输入字段(未隐藏),我可以看到字符串中的值,但复选框未被选中

其余的都很好

也许只有我的眼睛累了,但我真的找不到问题所在:-)

如有任何意见,我们将不胜感激

global $menu;
    $output = '';

    for ($i = 1; $i <= 100; $i++){
        if ($menu[$i][2]){

        $find = $menu[$i][2];
        $pos = strpos($opp_array['brsa_menu_list'], $find);

            $output .=  '</br><input class="checkbox remove_check" type="checkbox" ' .(($pos) ? ' checked ':'') . 'name="option1" value="'  . $menu[$i][2] .'"> '  . $menu[$i][2] ;
        }
     }
echo '<b>Available menus  :  </b><br>' . $output .'<br>';

?>

<p>
    <input class="regular-text" id="sbrsamenu_list" name="brsa_s[brsa_menu_list]" type="text" value="<?php echo $opp_array['brsa_menu_list']; ?>"/>

    <label class="description" for="sbrsamenu_list">
    </br><?php echo 'Please write the menu items'; ?>
    </label>
</p>
global$菜单;
$output='';
对于($i=1;$i)

还有js

<script type="text/javascript">

    // <![CDATA[
        jQuery(document).ready(function() {

    var $checkboxes = jQuery(".remove_check");
    $checkboxes.on('change', function() {
        var ids = $checkboxes.filter(':checked').map(function() {
            return this.value;
        }).get().join(' | ');
        jQuery('#sbrsamenu_list').val(ids);
    });


        });

    // ]]>
</script>

// 

如果
$pos
是一个布尔值,表示一个字符串是否出现在另一个字符串中,则应将
strpos()
中的值与
false
中的值进行比较:

$pos = strpos($opp_array['brsa_menu_list'], $find) !== false;

否则,如果字符串开头出现
$find
strpos()
将返回
0
,在代码中该值相当于
false

,我没有仔细研究这个问题(抱歉),但请尝试更改($i=1;$i@Kuro-它不…-)亲爱的上帝。它现在起作用了。但我完全困惑了。为什么这只影响了
第一个
检查值,而对所有其他值都起作用呢?我可能有25个值,我尝试了所有可能的组合,它们都起作用,但总是跳过第一个。如果
strpos()的实现
是错误的,是否应该失败??(我也不熟悉您发布的语法-我现在将尝试研究:-)…@ObmerkKronen如果在搜索字符串的第一个字符之外的任何地方找到匹配项,它将按预期工作;这就是
strpos()的工作方式
是设计用来工作的;如果字符串没有出现,它将返回
false
。好的,谢谢,为了更好地理解,这意味着如果我将在字符串开头添加另一个分隔符管道(
|
)作为第一个字符,那么我的原始代码将有效?