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>