Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multiple Select - Multiple values not showing as pre-selected #204

Open
GoogleCodeExporter opened this issue Jul 16, 2015 · 1 comment
Open

Comments

@GoogleCodeExporter
Copy link

What steps will reproduce the problem?
1.
    $form->addElement(new PFBC\Element\Select("Test:", "test[]", array('1'=>'one','2'=>'two','3'=>'three'),
array('value'=>array(1,2),
            'multiple'=>'true'
        )));


What is the expected output? 

   A multi select box with 3 values, where 2 are pre-selected

What do you see instead?

   A multi-select box with 3 values, where only 1 is pre-selected

What version of the product are you using? On what operating system?

    Version 3.1
    PHP 5.3+

Please provide any additional information below.

    The problem appears to be in the file:

    https://code.google.com/p/php-form-builder-class/source/browse/trunk/PFBC/Element/Select.php

    Lines 23-26

    Once select is set the first time, the IF test fails for all future values even if in_array(..) is true.

    Commenting out the set value on line 25 is a hack solution that fixes the issue.

Original issue reported on code.google.com by docon...@gmail.com on 13 Aug 2013 at 11:53

@GoogleCodeExporter
Copy link
Author

Hi
I replaced my render file with the following to make it work:

public function render() { 
        if(isset($this->_attributes["value"])) {
            if(!is_array($this->_attributes["value"]))
                $this->_attributes["value"] = array($this->_attributes["value"]);
        }
        else
            $this->_attributes["value"] = array();

        if( isset($this->_attributes["multiple"]) && $this->_attributes["multiple"] == true)
        {
            $multiple=true;
        }
        if($multiple && substr($this->_attributes["name"], -2) != "[]")
            $this->_attributes["name"] .= "[]";

        echo '<select', $this->getAttributes(array("value", "selected")), '>';
        $selected = false;
        foreach($this->options as $value => $text) {
            $value = $this->getOptionValue($value);
            echo '<option value="', $this->filter($value), '"';
            if((!$selected || $multiple)  && in_array($value, $this->_attributes["value"])) {
                echo ' selected="selected"';
                $selected = true;
            }   
            echo '>', $text, '</option>';
        }   
        echo '</select>';
    }

Original comment by jamil.ab...@qualizone-lb.com on 4 May 2015 at 6:09

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant