This is an old revision of the document!
In this activity you'll learn how to obtain data from a form and insert it into a database table.
form.php
<?php include('database.php'); include('header.php'); include('menu.php'); // get list of heroes $query = "SELECT * FROM heroes"; $args = array(); $hrslt = $pdo->prepare($query); $hrslt->execute($args); // get list of movies $query = "SELECT movie FROM appearances GROUP BY movie"; $args = array(); $mrslt = $pdo->prepare($query); $mrslt->execute($args); ?> <main> <form name="add_hero" action="process_form.php" method="post"> <fieldset> <legend>Add Hero</legend> <ul> <li> <label>Hero Name:</label> <input type="text" name="name" size="30" maxlength="50"> </li> <li> <label>Side:</label> <ul> <li><input type="radio" name="side" value="Hero" checked> Hero</li> <li><input type="radio" name="side" value="Villain"> Villain</li> </ul> </li> <li> <label>First Appearance:</label> <input type="number" name="year"> </li> <li> <label>Source of Power:</label> <select name="power"> <option value="skill">Skill</option> <option value="bio">Biological</option> <option value="magic">Magic</option> <option value="tech">Technology</option> <option value="mutant">Mutant</option> </select> </li> </ul> <input type="submit" name="submit" value="Add Hero"> </fieldset> </form> <form name="add_appearances" action="process_form.php" method="post"> <fieldset> <legend>Add Appearances</legend> <ul> <li> <label>Hero</label> <select name="hero"> <?php // display list of heroes while($row = $hrslt->fetch()) { ?> <option value="<?php echo $row['character_name']; ?>"><?php echo $row['character_name']; ?></option> <?php } ?> </select> </li> <li> <label>Movie</label> <ul> <?php // display list of movies while($row = $mrslt->fetch()) { ?> <li><input type="checkbox" name="movie[]" value="<?php echo $row['movie']; ?>" id=""> <?php echo $row['movie']; ?></li> <?php } ?> <li><input type="checkbox" name="movie[]" value="new" id=""> <input type="text" name="new_movie"></li> </ul> </li> </ul> <input type="submit" name="submit" value="Add Appearance"> </fieldset> </form> </main> <?php include('footer.php'); ?>
process_form.php
<?php include('header.php'); include('menu.php'); ?> <main> <p><?php print_r($_POST); ?></p> </main> <?php include('footer.php'); ?>
character_name | alias | hero_villain | first_appeared | power |
---|---|---|---|---|
Thor Odinson | Thor | Hero | 1962 | Magic |
Johan Schmidt | Red Skull | Villain | 1941 | Biological |
Bucky Barnes | Winter Soldier | Villain | 1941 | Tech |
Clint Barton | Hawkeye | Hero | 1969 | Skill |
Odin | Odin | Hero | 1962 | Magic |
Nick Fury | Nick Fury | Hero | 1963 | Skill |
Phil Coulson | Agent Coulson | Hero | 2008 | Skill |
Peter Quill | Starlord | Hero | 1976 | Tech |
Gamora | Gamora | Hero | 1975 | |
Pepper Potts | Rescue | Hero | 1963 | Tech |
INSERT INTO `heroes` (`character_name`, `alias`, `hero_villain`, `first_appeared`, `power`) VALUES ('Thor', 'Thor', 'Hero', '1962', 'Magic');
INSERT INTO
then the name of the table. ()
we add the list of fields that we have data for.VALUES ()
with the data inside the ()
. ?
and put the actual values in an array to be sent separate to the query.INSERT INTO `heroes` (`character_name`, `alias`, `hero_villain`, `first_appeared`, `power`) VALUES (?,?,?,?,?)
('Thor', 'Thor', 'Hero', 1962, 'Magic')
if
, but there's another more powerful option you can use when you are checking for different values of the same variable.// check which form switch ($variable) { case 'value': # code... break; default: # code... break; }
switch
allows us to check the value of a particular variable (in this case $_POST['submit']) and run different code based on the result.case
values.default:
will run if the result is something unexpected / undefined.break;
at the end of each case
code block. If you leave this out, the code in the next case will keep running until eventually it hits break;
or the end of the switch
statement. This can be useful if you want the same code to be run in multiple options.case
block for 'Add Appearance'.// check which form switch ($_POST['submit']) { case 'Add Hero': break; case 'Add Hero': break; default: break; }
case 'Add Hero':
.$query = "INSERT INTO `heroes` (`character_name`, `alias`, `hero_villain`, `first_appeared`, `power`) VALUES (?,?,?,?,?)"; $args = array($_POST['name'], $_POST['alias'], $_POST['side'], $_POST['year'], $_POST['power']);
$rslt = $pdo->prepare($query); $rslt->execute($args);
if ($rslt->execute($args)) { $message = "{$_POST['name']} was inserted successfully."; }
$_POST['name']
is wrapped in {}
. This is to tell PHP that we want the value printed, not the text as is. Try removing {}
to see what the message says without them.<main>
.<main> <p><?php echo $message; ?></p> </main>