Het creëren, bewerken, bijwerken en verwijderen van inhoud op een website is wat de site dynamisch maakt. Dat gaan we in dit bericht doen.
Een gebruiker die onze site bezoekt, kan berichten maken die worden opgeslagen in een mysql-database, de berichten uit de database ophalen en op de webpagina weergeven. Elk bericht wordt weergegeven met een knop voor bewerken en verwijderen, zodat de gebruiker berichten kan bijwerken en verwijderen.
Maak eerst een database met de naam crud. Maak in de ruwe database een tabel met de naam info. De infotabel moet de volgende kolommen hebben:
-
id - int(11)
- naam - varchar(100)
- adres - varchar(100)
Jaap! Slechts twee velden. Ik probeer het hier simpel te houden. dus laten we verder gaan met de volgende stap.
Maak een bestand met de naam index.php en plak daarin de volgende code:
<!DOCTYPE html>
<html>
<head>
<title>CRUD: CReate, Update, Delete PHP MySQL</title>
</head>
<body>
<form method="post" action="server.php" >
<div class="input-group">
<label>Name</label>
<input type="text" name="name" value="">
</div>
<div class="input-group">
<label>Address</label>
<input type="text" name="address" value="">
</div>
<div class="input-group">
<button class="btn" type="submit" name="save" >Save</button>
</div>
</form>
</body>
</html>
Als u de site opslaat en opent in uw browser, krijgt u zoiets als dit:
Ziet er niet uit als de beste vorm ter wereld, toch? Laten we dat oplossen. Voeg deze regel toe direct onder de
<link rel="stylesheet" type="text/css" href="style.css">
Dat is de link om styling te laden vanuit het stylesheetbestand. Laten we het bestand styles.css maken en deze stylingcode erin toevoegen.
body {
font-size: 19px;
}
table{
width: 50%;
margin: 30px auto;
border-collapse: collapse;
text-align: left;
}
tr {
border-bottom: 1px solid #cbcbcb;
}
th, td{
border: none;
height: 30px;
padding: 2px;
}
tr:hover {
background: #F5F5F5;
}
form {
width: 45%;
margin: 50px auto;
text-align: left;
padding: 20px;
border: 1px solid #bbbbbb;
border-radius: 5px;
}
.input-group {
margin: 10px 0px 10px 0px;
}
.input-group label {
display: block;
text-align: left;
margin: 3px;
}
.input-group input {
height: 30px;
width: 93%;
padding: 5px 10px;
font-size: 16px;
border-radius: 5px;
border: 1px solid gray;
}
.btn {
padding: 10px;
font-size: 15px;
color: white;
background: #5F9EA0;
border: none;
border-radius: 5px;
}
.edit_btn {
text-decoration: none;
padding: 2px 5px;
background: #2E8B57;
color: white;
border-radius: 3px;
}
.del_btn {
text-decoration: none;
padding: 2px 5px;
color: white;
border-radius: 3px;
background: #800000;
}
.msg {
margin: 30px auto;
padding: 10px;
border-radius: 5px;
color: #3c763d;
background: #dff0d8;
border: 1px solid #3c763d;
width: 50%;
text-align: center;
}
Laten we nu ons formulier opnieuw in de browser bekijken:
Dat is beter!
Ik hou er meestal van om mijn HTML-code zoveel mogelijk van mijn PHP-code te scheiden. Dat vind ik een goede gewoonte. Laten we wat dat betreft een ander bestand maken met de naam php_code.php waarin we alle php-functionaliteiten implementeren, zoals verbinding maken met de database, de database opvragen en dergelijke.
Dus open php_code.php en plak de volgende code erin:
<?php
session_start();
$db = mysqli_connect('localhost', 'root', '', 'crud');
// initialize variables
$name = "";
$address = "";
$id = 0;
$update = false;
if (isset($_POST['save'])) {
$name = $_POST['name'];
$address = $_POST['address'];
mysqli_query($db, "INSERT INTO info (name, address) VALUES ('$name', '$address')");
$_SESSION['message'] = "Address saved";
header('location: index.php');
}
// ...
Voeg dit bestand nu bovenaan (de allereerste regel) van uw index.php-bestand toe. Vind ik leuk:
<?php include('server.php'); ?>
Op dit moment hoeft deze code alleen maar verbinding te maken met de database, enkele variabelen te initialiseren en de ingediende gegevens van het formulier op te slaan in de database in de informatie die we eerder hebben gemaakt. Dat is alleen het CReate-gedeelte van CRUD. Laten we verder gaan met de anderen.
Ga nu opnieuw naar je index.php-bestand en voeg deze code toe onder de
// ...
<body>
<?php if (isset($_SESSION['message'])): ?>
<div class="msg">
<?php
echo $_SESSION['message'];
unset($_SESSION['message']);
?>
</div>
<?php endif ?>
Deze code geeft een bevestigingsbericht weer om de gebruiker te vertellen dat er een nieuw record is aangemaakt in de database.
Om de databaserecords op te halen en op de pagina weer te geven, voegt u deze code direct boven het invoerformulier toe:
<?php $results = mysqli_query($db, "SELECT * FROM info"); ?>
<table>
<thead>
<tr>
<th>Name</th>
<th>Address</th>
<th colspan="2">Action</th>
</tr>
</thead>
<?php while ($row = mysqli_fetch_array($results)) { ?>
<tr>
<td><?php echo $row['name']; ?></td>
<td><?php echo $row['address']; ?></td>
<td>
<a href="index.php?edit=<?php echo $row['id']; ?>" class="edit_btn" >Edit</a>
</td>
<td>
<a href="server.php?del=<?php echo $row['id']; ?>" class="del_btn">Delete</a>
</td>
</tr>
<?php } ?>
</table>
<form>
// ...
Laten we een nieuw record maken en kijken of dit werkt:
..en voila!! Het werkt perfect!
Nu gaan we verder met bewerken. Voeg bovenaan je index.php-bestand (direct na de include-instructie) de volgende code toe:
<?php
if (isset($_GET['edit'])) {
$id = $_GET['edit'];
$update = true;
$record = mysqli_query($db, "SELECT * FROM info WHERE id=$id");
if (count($record) == 1 ) {
$n = mysqli_fetch_array($record);
$name = $n['name'];
$address = $n['address'];
}
}
?>
Bij het bewerken van een databaserecord moeten we de oude waarden in het formulier plaatsen zodat ze kunnen worden gewijzigd. Laten we hiervoor onze invoervelden op het formulier aanpassen en die waarden uit de database ($naam, $adres) als waarden instellen op de waarde kenmerk van de formuliervelden.
Voeg ook een verborgen veld toe voor de id van het record dat we gaan bijwerken, zodat het uniek kan worden herkend in de database door zijn id. Dit verklaart het beter:
// newly added field
<input type="hidden" name="id" value="<?php echo $id; ?>">
// modified form fields
<input type="text" name="name" value="<?php echo $name; ?>">
<input type="text" name="address" value="<?php echo $address; ?>">
Onthoud dat alles in de invoer