繁体   English   中英

PHP 使用用户先前保存的预选选项从数组值中显示多选

[英]PHP Display Multi-Select From Array Values with Pre-Selected Options User Previously Saved

我一直在尝试让 PHP 使用基于用户先前保存的预选值填充 HTML 多选表单。 我在这里和其他地方找到了有用的示例,这些示例有助于从概念上理解需要做什么,但我无法让语法正常工作。

这是相关的代码片段

<?php
             // This array will hold all options to be displayed in multi-select form
            $allservices = array('amazon','facebook','twitter','reddit');

             // $blockedservices is variable comes as a string from database like amazon,facebook.
             // Initially the value of the array is NULL for new users or user that never submitted.
             // I am exploding here as array to make it easier to work with like ['amazon','facebook']
            $selectedservices = explode(",", $blockedservices);

            ?><select name="services[]" multiple="multiple"><?

            //looping through all options
            foreach($allservices as $option){   
               //trying to see if option was preselected 
               if($selectedservices == $option) { 
               ?><option selected="selected" value="<?php echo $option;?>"><?php echo $option;?></option><?
               }
              else {
              ?><option value="<?php echo $option;?>"><?php echo $option;?></option><?
              }
           }
        ?></select>

目前,这会导致Undefined variable: option in...

更新

根据反馈,使用<?php而不是<? 解决了未定义的错误问题。 但是,未显示预先选择的选项。 相反,即使存在预选,也会显示所有选项而没有预选。

我还尝试了in_array ,结果与未识别预选选项的结果相同。

这是in_array的另一个片段:

<?php
            $allservices = array('amazon','facebook','twitter','reddit');
            $selectedservices = explode(",", $blockedservices);

            ?><select name="services[]" multiple="multiple"><?php
            foreach($allservices as $option){
            if(!empty($selectedservices)){

            if(in_array($option,$selectedservices)){
              ?><option selected="selected" value="<?php echo $option;?>"><?php echo $option;?></option><?php
            }
            else {
              ?><option value="<?php echo $option;?>"><?php echo $option;?></option><?php
            }

           }else{
           ?><option value="<?php echo $option;?>"><?php echo $option;?></option><?php
        }
        }

        ?></select>

更新 2

我在下面发布了一个答案,解决了所有代码和语法问题。 发布的答案在所有浏览器中都按预期工作。 希望它可以帮助将来需要完成同样事情的人。 感谢大家在此过程中提供帮助的评论。

只需替换<? <?php并且此错误将消失,因为您在 php.ini 文件中禁用了短标签选项更新

<?php
            $allservices = array('amazon','facebook','twitter','reddit');

            $blockedservices ="amazon,facebook";
            $selectedservices = explode(",", $blockedservices);

            ?><select name="services[]" multiple="multiple"><?php

            //looping through all options
            foreach($allservices as $option){   
               //trying to see if option was preselected 
               if(in_array($option, $selectedservices)) { 
               ?><option selected="selected" value="<?php echo $option;?>"><?php echo $option;?></option><?php
               }
              else {
              ?><option value="<?php echo $option;?>"><?php echo $option;?></option><?php
              }
           }
        ?></select>

还有另一种解决方案 go 到 C/php/php.ini 文件并搜索short_open_tag默认情况下它将是Off将其更改为short_open_tag=On

在此处输入图像描述

感谢大家为此提供的所有帮助。 根据所有评论和回复,原始代码存在三个问题:

  • 我应该使用<?php而不是<?
  • 我应该使用in_array
  • <option>标记中selected值的 HTML 语法不合适

此更新的代码完全解决了所有问题并按预期工作:

<?php
            $allservices = array('amazon','facebook','twitter','reddit');
            $selectedservices = explode(",", $blockedservices);

            ?><select name="services[]" multiple="multiple"><?php
        foreach($allservices as $option){
            if(!empty($selectedservices)){

            if(in_array($option,$selectedservices)){
              ?><option value="<?php echo $option;?>" selected><?php echo $option;?></option><?php
            }
            else {
              ?><option value="<?php echo $option;?>"><?php echo $option;?></option><?php
            }

           }else{
          ?><option value="<?php echo $option;?>"><?php echo $option;?></option><?php
        }
        }

        ?></select>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM