Създаването, редактирането, актуализирането и изтриването на съдържание в уебсайт е това, което прави сайта динамичен. Това е, което ще правим в тази публикация.
Потребител, който посети нашия сайт, ще може да създава публикации, които ще бъдат запазени в база данни на mysql, да извлича публикациите от базата данни и да ги показва на уеб страницата. Всяка публикация ще се показва с бутон за редактиране и изтриване, за да позволи на потребителя да актуализира публикациите, както и да ги изтрива.
Първо създайте база данни с име crud. В базата данни crud създайте таблица, наречена info. Информационната таблица трябва да има следните колони:
-
id - int(11)
- име - varchar(100)
- адрес - varchar(100)
Яп! Само две полета. Опитвам се да опростя нещата тук. така че, нека да преминем към следващата стъпка.
Създайте файл, наречен index.php, и поставете в него следния код:
<!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>
Ако запазите и отворите сайта в браузъра си, ще получите нещо подобно:
Не изглежда като най-добрата форма в света, нали? Да поправим това. Добавете този ред директно под маркера
<link rel="stylesheet" type="text/css" href="style.css">
Това е връзката за зареждане на стилове от файла със стилова таблица. Нека създадем файла styles.css и да добавим този стилизиращ код в него.
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;
}
Сега нека проверим отново нашия формуляр в браузъра:
Това е по-добре!
Обикновено обичам да отделя своя HTML код от моя PHP код, доколкото е възможно. Считам това за добра практика. В тази връзка, нека създадем друг файл, наречен php_code.php, където внедряваме всички php функционалности като свързване към базата данни, заявка към базата данни и други подобни.
Затова отворете php_code.php и поставете следния код в него:
<?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');
}
// ...
Сега включете този файл в горната част (първият ред) на вашия файл index.php. Така:
<?php include('server.php'); ?>
В този момент всичко, което прави този код, е да се свързва с базата данни, да инициализира някои променливи и да записва изпратените данни от формуляра в базата данни в информацията, която създадохме по-рано. Това е само CReate част от CRUD. Да продължим с останалите.
Сега посетете отново вашия index.php файл и добавете този код точно под етикета
// ...
<body>
<?php if (isset($_SESSION['message'])): ?>
<div class="msg">
<?php
echo $_SESSION['message'];
unset($_SESSION['message']);
?>
</div>
<?php endif ?>
Този код показва съобщение за потвърждение, за да съобщи на потребителя, че е създаден нов запис в базата данни.
За да извлечете записите от базата данни и да ги покажете на страницата, добавете този код непосредствено над формата за въвеждане:
<?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>
// ...
Нека създадем нов запис и да видим дали тези неща работят:
..и воала!! Работи перфектно!
Сега преминаваме към редактиране. В горната част на вашия файл index.php (веднага след изявлението за включване) добавете следния код:
<?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'];
}
}
?>
Когато редактираме запис на база данни, трябва да поставим старите стойности във формата, така че да могат да бъдат модифицирани. За да направите това, нека променим нашите полета за въвеждане във формуляра и да зададем тези стойности, взети от базата данни ($name, $address), като стойности на стойността атрибут на полетата на формуляра.
Също така добавете скрито поле, което да съдържа идентификатора на записа, който ще актуализираме, така че да може да бъде разпознат в базата данни еднозначно по неговия идентификатор. Това го обяснява по-добре:
// 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; ?>">
Не забравяйте, че всичко това е във входния