php - HTML form POST data not transferring to next page

I have a form with a drop-down box. The user selects an option from the dropdown box and hits submit. On submit, a new page opens up with a new form. The option that was selected is not being transferred to the next page. My form code is:

<form method="post" action="hero_modify_form.php">
    <div>
        <label>Select a hero to add or modify:  </label>
        <select name="heroname" type="input">
            <option></option>
<?php foreach ($data as $row): ?>
            <option>
            <?php echo $row['Hero_Name'] ?>
            </option>
<?php endforeach ?>
        </select>
    </div>
    <div>
        <button type="submit" name="heroname">Submit</button>
    </div>
</form>

The next page loads and displays some test variables at the top, but the variable from the POST is empty. My code on the page is

<?php
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);
include('header.php');
$username = $_SESSION['username'];
echo $_POST['heroname'];
echo $username;
$test1 = "test 1, before the if statement";
echo $test1;

I get no errors on the page. The username variable and the test1 variable echo normally. The heroname variable doesn't. I need help figuring out why the selection from the form is not transferring to the next page. Thanks in advance.

Answer

Solution:

  1. You have forgotten the value attribute from the <option> elements. Whatever is in the value attribute is what is returned to the server script.

  2. You have a type="input" attribute on the <select> element, that does not belong there.

  3. You have called the button <button type="submit" name="heroname"> which is also what you called the dropdown <select name="heroname"> you cannot use the same name more than once. So change the button name to something else like <button type="submit" name="submithero"> for example


<form method="post" action="hero_modify_form.php">
    <div>
        <label>Select a hero to add or modify:  </label>
        <select name="heroname">
            <option></option>
<?php foreach ($data as $row): ?>
            <option value="<?php echo $row['Hero_Name'] ?>">
            <?php echo $row['Hero_Name'] ?>
            </option>
<?php endforeach ?>
        </select>
    </div>
    <div>
        <button type="submit" name="submithero">Submit</button>
    </div>
</form>

Answer

Solution:

the button does not need a name attribute

<form method="post" action="hero_modify_form.php">
        
            <div>
                <label>Select a hero to add or modify:  </label>
                <select name="heroname">
                    <option></option>
                    <?php foreach ($data as $row): ?>
                        <option value="<?php echo $row['Hero_Name'] ?>">
                            <?php echo $row['Hero_Name'] ?>
                        </option>
                    <?php endforeach ?>
                </select>
            </div>
            <div>
                <button type="submit">Submit</button>
            </div>
        </form>

Answer

Solution:

First, I removed the value attribute from select. Second, I added a value attribute to option. Third, I changed the name for the button to match the IF statement on the next page. The heroname is now being passed to the next page. I have a whole new set of errors now about undefied index, which I will research first, and if needed, post a new question. Thank you all for the help!!

Source