Creare, modificare, aggiornare ed eliminare i contenuti di un sito Web è ciò che rende dinamico il sito. Questo è ciò che faremo in questo post.
Un utente che visita il nostro sito potrà creare post che verranno salvati in un database mysql, recuperare i post dal database e visualizzarli sulla pagina web. Ogni post verrà visualizzato con un pulsante di modifica ed eliminazione per consentire all'utente di aggiornare i post e di eliminarli.
Innanzitutto, crea un database chiamato crud. Nel database crud, crea una tabella denominata info. La tabella delle informazioni dovrebbe avere le seguenti colonne:
-
id - int(11)
- nome - varchar(100)
- indirizzo - varchar(100)
Sì! Solo due campi. Sto cercando di mantenere le cose semplici qui. quindi, passiamo al passaggio successivo.
Crea un file chiamato index.php e incollaci il seguente codice:
<!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>
Se salvi e apri il sito sul tuo browser, ottieni qualcosa del genere:
Non sembra la forma migliore del mondo, giusto? Risolviamolo. Aggiungi questa riga direttamente sotto il tag
<link rel="stylesheet" type="text/css" href="style.css">
Questo è il link per caricare lo stile dal file del foglio di stile. Creiamo il file styles.css e aggiungiamo questo codice di stile al suo interno.
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;
}
Ora controlliamo di nuovo il nostro modulo nel browser:
Va meglio!
Di solito mi piace separare il più possibile il mio codice HTML dal mio codice PHP. Considero questa buona pratica. In questa nota, creiamo un altro file chiamato php_code.php in cui implementiamo tutte le funzionalità php come la connessione al database, query del database e simili.
Quindi apri php_code.php e incollaci il seguente codice:
<?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');
}
// ...
Ora includi questo file nella parte superiore (la prima riga) del tuo file index.php. Così:
<?php include('server.php'); ?>
A questo punto, tutto ciò che fa questo codice è connettersi al database, inizializzare alcune variabili e salvare i dati inviati dal modulo al database nelle informazioni che abbiamo creato in precedenza. Questa è solo la parte CReate di CRUD. Procediamo con gli altri.
Ora visita di nuovo il tuo file index.php e aggiungi questo codice direttamente sotto il tag
// ...
<body>
<?php if (isset($_SESSION['message'])): ?>
<div class="msg">
<?php
echo $_SESSION['message'];
unset($_SESSION['message']);
?>
</div>
<?php endif ?>
Questo codice visualizza un messaggio di conferma per informare l'utente che è stato creato un nuovo record nel database.
Per recuperare i record del database e visualizzarli nella pagina, aggiungi questo codice immediatamente sopra il modulo di input:
<?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>
// ...
Creiamo un nuovo record e vediamo se funziona:
..e voilà!! Funziona perfettamente!
Ora passiamo alla modifica. Nella parte superiore del tuo file index.php (subito dopo l'istruzione include) aggiungi il seguente codice:
<?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'];
}
}
?>
Quando si modifica un record di database, è necessario inserire i vecchi valori nel modulo in modo che possano essere modificati. Per fare ciò, modifichiamo i nostri campi di input sul modulo e impostiamo quei valori presi dal database ($nome, $indirizzo) come valori sul valore attributo dei campi del modulo.
Aggiungi anche un campo nascosto per contenere l'id del record che aggiorneremo in modo che possa essere riconosciuto nel database in modo univoco dal suo ID. Questo lo spiega meglio:
// 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; ?>">
Ricorda che è tutto nell'input