簡體   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