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:
You have forgotten the
value
attribute from the<option>
elements. Whatever is in thevalue
attribute is what is returned to the server script.You have a
type="input"
attribute on the<select>
element, that does not belong there.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