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['alias']; ?>"><?php echo $row['alias']; ?></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');
?>
| alias | identity | hero_villain | first_appeared | power |
|---|---|---|---|---|
| Thor | Thor Odinson | 1962 | Magic | |
| Red Skull | Johan Schmidt | 1941 | Biological | |
| Winter SolBucky Barnes | Winter Soldier | 1941 | Tech | |
| Clint Barton | Hawkeye | 1969 | Skill | |
| Odin | Odin | 1962 | Magic | |
| Nick Fury | Nick Fury | 1963 | Skill | |
| Phil Coulson | Agent Coulson | 2008 | Skill | |
| Peter Quill | Starlord | 1976 | Tech | |
| Gamora | Gamora | 1975 | ||
| Pepper Potts | Rescue | 1963 | Tech |
INSERT INTO `heroes` (`alias`, `identity`, `hero_villain`, `first_appeared`, `power`) VALUES ('Bucky Barnes', 'Winter Soldier', 'Villain', '1941', 'Tech');
// check which form
if ($_POST['submit'] == 'Add Hero') {
} else if ($_POST['submit'] == 'Add Appearance') {
} else {
}
switch ($variable) {
case 'value':
# code...
break;
default:
# code...
break;
}
break command.default:.break at the end of a case, the code from the next case will also run. This can be useful if you want the same code to run for multiple cases like this. (Don't add this code)switch ($age) {
case 1:
case 17:
case 43:
# code...
break;
case 22:
case 39:
# code...
break;
}
$_POST['submit']. switch ($_POST['submit']) {
case 'Add Hero':
break;
case 'Add Appearance':
break;
default:
break;
}
case 'Add Hero':. $query = "";
$args = array();
$rslt = $pdo->prepare($query);
$rslt->execute($args)
? then add the respective user input as elements in the '$args' array. $query = "INSERT INTO `heroes` (`alias`, `identity`, `hero_villain`, `first_appeared`, `power`) VALUES (?,?,?,?,?)";
$args = array($_POST['alias'], $_POST['identity'], $_POST['alias'], $_POST['side'], $_POST['year'], $_POST['power']);
$rslt->execute($args) to the following. if ($rslt->execute($args)) {
}
if ($rslt->execute($args)) {
$message = "{$_POST['name']} was inserted successfully.";
}
INSERT INTO appearances (character_name, movie) VALUES ('Thor Odinson', 'Thor: Dark World'), ('Thor Odinson', 'Avengers: Age of Ultron')
foreach loop. foreach($_POST['movie'] as $movie) {
}<code>
* And we can add them to an existing array using the <html>array_push</html> function.
<code> array_push($args, $_POST['hero'], $movie);
foreach. $args = array();
foreach($_POST['movie'] as $movie) {
array_push($args, $_POST['hero'], $movie);
}
// check if it exists already
$mquery = "SELECT * FROM appearances WHERE character_name=? AND movie=?";
$margs = array($_POST['hero'], $movie);
$rslt = $pdo->prepare($mquery);
if (!$rslt->execute($margs)) {
array_push($args, $_POST['hero'], $movie);
}
if (!$rslt->execute($margs))) then we add it to the list of arguments. if ($movie == 'new') {
array_push($args, $_POST['hero'], $_POST['new_movie']);
} else {
// check if it exists already
$mquery = "SELECT * FROM appearances WHERE character_name=? AND movie=?";
$margs = array($_POST['hero'], $movie);
$rslt = $pdo->prepare($mquery);
if (!$rslt->execute($margs)) {
array_push($args, $_POST['hero'], $movie);
}
}
$_POST['new_movie'] as the movie name instead of the value stored in $_POST['movie'].(?,?) at the end of the query.
* We can get the number of elements in the <html>$args array using count and then halve it.count is like .length in Javascript, counting the number of elements in an array.foreach loop.$movies = count($args)/2;
(?,?) at the end of the query, but they need to be separated by a <html> , . $values = str_repeat('(?,?), ', $movies-1) . '(?,?)';
str_repeat to repeat a set string a number of times. If we repeated '(?,?),' the correct number of times, we'd have a hanging , at the end which would cause an error. Instead, we add one less than the required amount (count($movies) -1), then add (?,?) at the end. $query = "INSERT INTO heroes ('character_name', 'movie') VALUES $values";
break. error_log("MURRAY: $query\n" . print_r($args, 1);