PHP keep dropdown value after submit

10,905

You have to set the selected attribute for the option that was submitted. So you have to check the submitted value for each option. In my solution I am using the ternary operator to echo the selected attribute only for the correct operator.

<select name="operator">
    <option value="add" <?php echo (isset($_POST['operator']) && $_POST['operator'] == 'add') ? 'selected' : ''; ?>>+</option>
    <option value="minus" <?php echo (isset($_POST['operator']) && $_POST['operator'] == 'minus') ? 'selected' : ''; ?>>-</option>
    <option value="divide" <?php echo (isset($_POST['operator']) && $_POST['operator'] == 'divide') ? 'selected' : ''; ?>>/</option>
    <option value="multiply" <?php echo (isset($_POST['operator']) && $_POST['operator'] == 'multiply') ? 'selected' : ''; ?>>x</option>
</select>

The code above is somewhat repetitive. It keeps repeating a lot of code and html. It would be great if we could factor out the repetitive stuff. Luckily we can do that by creating an array that stores the options and loop through them using a foreach, like this:

<?php
$options = [
    'add' => '+',
    'minus' => '-',
    'divide' => '/',
    'multiply' => 'x'
];
?>

<select name="operator">
    <?php foreach ($options as $key => $label) { ?>
        <option value="<?= $key ?>" <?= (isset($_POST['operator']) && $_POST['operator'] == $key) ? 'selected' : '' ?>><?= $label ?></option>
    <?php } ?>
</select>
Share:
10,905
Tatws24
Author by

Tatws24

Updated on June 16, 2022

Comments

  • Tatws24
    Tatws24 almost 2 years

    I have the following code for a simple calculator. The code works fine, but I want the value in the dropdown list to stay there after submitted. How would I do this? Essentially, I want the operator to stay selected once the calculation has been done. At the moment, it just shows a '+', even if the sum is 25 / 5.

    <?php 
    
    $number1 = $_POST['number1'];
    $number2 = $_POST['number2'];
    $operation = $_POST['operator'];
    
    
    Switch ($operation) {
    case 'add': $answer = $number1 + $number2;
    break;
    case 'minus': $answer = $number1 - $number2; 
    break;
    case 'divide': $answer = $number1 / $number2; 
    break;
    case 'multiply': $answer = $number1 * $number2;
    break;
    }
    
    
    ?>
    
    <form name='calculator' method='post' action=''>
    <table>
        <tr>
            <td>
                <input name="number1" type="text" value="<?php     i    if(isset($_POST['number1'])) { echo  htmlentities($_POST['number1']);}?>"         />
            </td>
            <td>
                <select name="operator">
                    <option value="add">+</option>
                    <option value="minus">-</option>
                    <option value="divide">/</option>
                    <option value="multiply">x</option>
                </select>
            </td>
            <td>
                <input name="number2" type="text" value="<?php     if(isset($_POST['number2'])) { echo  htmlentities($_POST['number2']);}?>"     />
            </td>
            <td>    
                <input name="submit" type="submit" value="=" />
            </td>
            <td>        
                <input name="" type="text" value="<?php echo $answer ?>" />
            </td>
        </tr>
    </table>