English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questo tutorial, imparerai come costruire un'applicazione CRUD utilizzando PHP e MySQL.
CRUD èC crea,R leggi,U aggiorna eD Abbreviazione iniziale di 'elete'. Le operazioni CRUD sono le operazioni di base dei dati del database. Nei capitoli precedenti, abbiamo imparato come eseguire operazioni di creazione (cioè inserimento), lettura (cioè selezione), aggiornamento e cancellazione. In questo tutorial, creeremo un'applicazione PHP semplice per eseguire tutte queste operazioni su una tabella del database MySQL in un solo posto.
Bene, iniziamo con la creazione della tabella, che utilizzeremo in tutti gli esempi.]}
Eseguire la seguente query SQL per creare un database chiamatoemployeedella tabella s. Utilizzeremo questa tabella in tutte le operazioni future.
CREATE TABLE employees ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL, address VARCHAR(255) NOT NULL, salary INT(10) NOT NULL );
Dopo aver creato la tabella, dobbiamo creare uno script PHP per connettersi al server del database MySQL. Creiamo un file chiamato “config.php” e inseriamo il seguente codice al suo interno.
Più tardi, utilizzeremo la funzione PHP require_once() per includere questo file di configurazione in altre pagine.
<?php /* Credenziali del database. Supponiamo che tu stia eseguendo MySQL Server con impostazioni predefinite (utente “root”, senza password) */ define('DB_SERVER', 'localhost'); define('DB_USERNAME', 'root'); define('DB_PASSWORD', ''); define('DB_NAME', 'demo'); /* Tentare di connettersi al database MySQL */ $link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME); //Controllare la connessione if($link === false){ die("Errore: Impossibile connettersi. ". mysqli_connect_error()); } ?>
Prima di tutto, creeremo una pagina di login per l'applicazione CRUD, che include una griglia dei dati che mostraemployeeregistri nella tabella del database. Fornisce anche un'icona di azione per ogni record visualizzato nella griglia, che puoi selezionare per visualizzare i dettagli, aggiornare o eliminare.
Aggiungeremo anche un pulsante di creazione in alto nella griglia dei dati, che può essere utilizzato peremployeeCreare un nuovo record nella tabella. Creare un file chiamato “index.php” e inserire il seguente codice al suo interno:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Dashboard</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css"> <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.js"></script> <style type="text/css"> .wrapper{ width: 650px; margin: 0 auto; } .page-header h2{ margin-top: 0; } table tr td:last-child a{ margin-right: 15px; } </style> <script type="text/javascript"> $(document).ready(function(){ $('[data-toggle="tooltip"]').tooltip(); }); </script> </head> <body> <div class="wrapper"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <div class="page-header clearfix"> <h2 class="pull-left">Employees Details</h2> <a href="create.php" class="btn btn-success pull-right">Add New Employee</a> </div> <?php // Includi file di configurazione require_once "config.php"; // Try to execute the selection query $sql = "SELECT * FROM employees"; if($result = mysqli_query($link, $sql)){ if(mysqli_num_rows($result) > 0){ echo "<table class='table table-bordered table-striped'>"; echo "<thead>"; echo "<tr>"; echo "<th>#</th>"; echo "<th>Name</th>"; echo "<th>Address</th>"; echo "<th>Salary</th>"; echo "<th>Action</th>"; echo "</tr>"; echo "</thead>"; echo "<tbody>"; while($row = mysqli_fetch_array($result)){ echo "<tr>"; echo "<td>" . $row['id'] . "</td>"; echo "<td>" . $row['name'] . "</td>"; echo "<td>" . $row['address'] . "</td>"; echo "<td>" . $row['salary'] . "</td>"; echo "<td>"; echo "<a href='read.php?id=%. $row['id'] ."' title='Visualizza Record' data-toggle='tooltip'><span class='glyphicon glyphicon-eye-open'></span></a>"; echo "<a href='update.php?id=%. $row['id'] ."' title='Aggiorna Record' data-toggle='tooltip'><span class='glyphicon glyphicon-pencil'></span></a>"; echo "<a href='delete.php?id=%. $row['id'] ."' title='Elimina Record' data-toggle='tooltip'><span class='glyphicon glyphicon-trash'></span></a>"; echo "</td>"; echo "</tr>"; } echo "</tbody>"; echo "</table>"; // Libera il set di risultati mysqli_free_result($result); } else{ echo "<p class='lead'><em>Nessun record trovato.</em></p>"; } } else{ echo "Errore: impossibile eseguire $sql." . mysqli_error($link); } //Chiudi la connessione mysqli_close($link); ?> </div> </div> </div> </div> </body> <a href="index.php" class="btn btn-default">Annulla</a>
InemployeesDopo aver inserito alcune registrazioni nella tabella, la pagina di login, che è la griglia CRUD, potrebbe apparire come nella figura seguente:
Suggerimento:Abbiamo utilizzato il framework Bootstrap per creare rapidamente e elegantemente la layout di questa applicazione CRUD. Bootstrap è il framework front-end più popolare e potente, progettato per accelerare e semplificare lo sviluppo web.
In questa sezione, costruiremo la pagina di creazione per l'applicazione CRUD.C reate funzionalita'.
Creiamo un file chiamato "create.php" e inseriamo il seguente codice al suo interno. Questo codice generera' un modulo web, che puo' essere utilizzato peremployeeinserisce un record nel tavolo.
<?php //包含配置文件 require_once "config.php"; // Definisci variabili e inizializzale con valori vuoti $name = $address = $salary = ""; $name_err = $address_err = $salary_err = ""; // Elabora dati form quando si invia il modulo if($_SERVER["REQUEST_METHOD"] == "POST"){ // Convalida nome $input_name = trim($_POST["name"]); if(empty($input_name)){ $name_err = "Inserisci un nome."; } elseif(!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){ $name_err = "Inserisci un nome valido."; } else{ $name = $input_name; } //Verifica dell'indirizzo $input_address = trim($_POST["address"]); if(empty($input_address)){ $address_err = "Inserisci un indirizzo."; } else{ $address = $input_address; } //Verifica del salario $input_salary = trim($_POST["salary"]); if(empty($input_salary)){ $salary_err = "Inserisci l'importo della retribuzione."; } elseif(!ctype_digit($input_salary)){ $salary_err = "Inserisci un numero intero positivo."; } else{ $salary = $input_salary; } //Controlla gli errori di input prima di inserire nel database if(empty($name_err) && empty($address_err) && empty($salary_err)){ //Query INSERT preparata $sql = "INSERT INTO employees (name, address, salary) VALUES (?, ?, ?)"; if($stmt = mysqli_prepare($link, $sql)){ //将变量作为参数绑定到预处理语句 mysqli_stmt_bind_param($stmt, "sss", $param_name, $param_address, $param_salary); //Imposta i parametri $param_name = $name; $param_address = $address; $param_salary = $salary; //Tenta di eseguire la query preparata if(mysqli_stmt_execute($stmt)){ //E' stato creato con successo il record. Redirect alla pagina di login header("location: index.php"); exit(); } else{ echo "E' successo qualcosa di sbagliato. Riprova piu' tardi."; } } //Chiudi la statement mysqli_stmt_close($stmt); } //Chiudi la connessione mysqli_close($link); } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Creazione Record</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css"> <style type="text/css"> .wrapper{ width: 500px; margin: 0 auto; } </style> </head> <div class="wrapper"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <div class="page-header"> <h2>Creazione del record</h2> </div> <p>Compila questo modulo e invialo per aggiungere un record di dipendente al database.</p> <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post"> <div class="form-group <?php echo (!empty($name_err)) ? 'has-error' : ''; ?>"> <label>Name</label> <input type="text" name="name" class="form-control" value="<?php echo $name; ?>"> <span class="help-block </div> <div class="form-group <?php echo (!empty($address_err)) ? 'has-error' : ''; ?>"> <label>Indirizzo</label> <textarea name="address" class="form-control"><?php echo $address; ?></textarea> </div> <span class="help-block"><?php echo $address_err;?></span> <div class="form-group <?php echo (!empty($salary_err)) ? 'has-error' : '';"> <label>Salario</label> <input type="text" name="salary" class="form-control" value="<?php echo $salary; ?>"> </div> <input type="hidden" name="id" value="<?php echo $id; ?>"/> <input type="submit" class="btn btn-primary" value="Invia"> </form> </div> </div> </div> </div> <a href="index.php" class="btn btn-default">Annulla</a>
Il file "create.php" identico mostrera' un modulo HTML e gestira' i dati del modulo inviati. Prima di salvare i dati, eseguirà anche una validazione basilare degli input dell'utente.
Ora e' il momento di costruire l'applicazione CRUD.R ead funzionalita'.
Creiamo un file chiamato "read.php" e inseriamo il seguente codice al suo interno. Questo codice leggera soloImpiegatorecupera i record con l'attributo id dal tavolo employees.
<?php //Controlla se il parametro id esiste prima di ulteriori elaborazioni if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){ // Includi file di configurazione require_once "config.php"; //Query SELECT $sql = "SELECT * FROM employees WHERE id = ?"; if($stmt = mysqli_prepare($link, $sql)){ //将变量作为参数绑定到预处理语句 mysqli_stmt_bind_param($stmt, "i", $param_id); //Imposta i parametri $param_id = trim($_GET["id"]); //Tenta di eseguire la query preparata if(mysqli_stmt_execute($stmt)){ $result = mysqli_stmt_get_result($stmt); if(mysqli_num_rows($result) == 1){ /* Estrae le righe di risultato come array associativo. Poiché il set di risultati contiene solo una riga, non e' necessario utilizzare un ciclo while */ $row = mysqli_fetch_array($result, MYSQLI_ASSOC); //Ricerca del valore di un singolo campo $name = $row["name"]; $address = $row["address"]; $salary = $row["salary"]; } else{ //L'URL non contiene un parametro id valido. Redirect alla pagina di errore header("location: error.php"); exit(); } } else{ echo "Oh no! È sorto un problema. Riprovate più tardi."; } } //Chiudi la statement mysqli_stmt_close($stmt); //Chiudi la connessione mysqli_close($link); } else{ //L'URL non contiene il parametro id. Redirect alla pagina di errore header("location: error.php"); exit(); } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Visualizza Record</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css"> <style type="text/css"> .wrapper{ width: 500px; margin: 0 auto; } </style> </head> <div class="wrapper"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <div class="page-header"> <h1>Visualizza i record</h1> </div> <div class="form-group"> <label>Name</label> <p class="form-control-static"><?php echo $row["name"]; ?></p> </div> <div class="form-group"> <p class="form-control-static"><?php echo $row["address"]; ?></p> </div> <div class="form-group"> <div class="form-group <?php echo (!empty($salary_err)) ? 'has-error' : '';"> <p class="form-control-static"><?php echo $row["salary"]; ?></p> </div> <p><a href="index.php" class="btn btn-primary">Torna indietro</a></p> </div> </div> </div> </div> <a href="index.php" class="btn btn-default">Annulla</a>
Allo stesso modo, possiamo costruire la funzione di aggiornamento CRUD della nostra applicazione.
Creiamo un file chiamato "update.php" e inseriamo il seguente codice. EssoImpiegatoattributo idImpiegatoregistrazioni esistenti nel database。
<?php // Includi file di configurazione require_once "config.php"; // Definisci variabili e inizializzale con valori vuoti $name = $address = $salary = ""; $name_err = $address_err = $salary_err = ""; // Elabora dati form quando si invia il modulo if(isset($_POST["id"]) && !empty($_POST["id"])){ // Ottieni valore input nascosto $id = $_POST["id"]; // Convalida nome $input_name = trim($_POST["name"]); if(empty($input_name)){ $name_err = "Inserisci un nome."; } elseif(!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){ $name_err = "Inserisci un nome valido."; } else{ $name = $input_name; } // Convalida indirizzo address $input_address = trim($_POST["address"]); if(empty($input_address)){ $address_err = "Inserisci un indirizzo."; } else{ $address = $input_address; } //Verifica del salario $input_salary = trim($_POST["salary"]); if(empty($input_salary)){ $salary_err = "Inserisci l'importo del salario."; } elseif(!ctype_digit($input_salary)){ $salary_err = "Inserisci un valore intero positivo."; } else{ $salary = $input_salary; } //Controlla gli errori di input prima di inserire nel database if(empty($name_err) && empty($address_err) && empty($salary_err)){ //Query di aggiornamento $sql = "UPDATE employees SET name=?, address=?, salary=? WHERE id=?"; if($stmt = mysqli_prepare($link, $sql)){ //将变量作为参数绑定到预处理语句 mysqli_stmt_bind_param($stmt, "sssi", $param_name, $param_address, $param_salary, $param_id); //Imposta i parametri $param_name = $name; $param_address = $address; $param_salary = $salary; $param_id = $id; //Prova ad eseguire la statement preparata if(mysqli_stmt_execute($stmt)){ //Registra l'aggiornamento con successo. Redirige alla pagina di login header("location: index.php"); exit(); } else{ echo "C'è stato un problema. Riprova più tardi."; } } //Chiudi la statement mysqli_stmt_close($stmt); } //Chiudi la connessione mysqli_close($link); } else{ //Controlla se il parametro id esiste prima di procedere if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){ //Ottieni il parametro dell'URL $id = trim($_GET["id"]); //Estrazione della query $sql = "SELECT * FROM employees WHERE id = ?"; if($stmt = mysqli_prepare($link, $sql)){ //将变量作为参数绑定到预处理语句 mysqli_stmt_bind_param($stmt, "i", $param_id); //Imposta i parametri $param_id = $id; //Prova ad eseguire la statement preparata if(mysqli_stmt_execute($stmt)){ $result = mysqli_stmt_get_result($stmt); if(mysqli_num_rows($result) == 1){ /* Estrae la riga di risultato come array associativo. Poiché il set di risultati contiene solo una riga, non è necessario utilizzare un ciclo while */ $row = mysqli_fetch_array($result, MYSQLI_ASSOC); //Ricerca del valore di un singolo campo $name = $row["name"]; $address = $row["address"]; $salary = $row["salary"]; } else{ //L'URL non contiene un ID valido. Redirezione alla pagina di errore header("location: error.php"); exit(); } } else{ echo "Oh no! È sorto un problema. Riprovate più tardi."; } } //Chiudi la statement mysqli_stmt_close($stmt); //Chiudi la connessione mysqli_close($link); } else{ //L'URL non contiene il parametro id. Redirect alla pagina di errore header("location: error.php"); exit(); } } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Aggiorna Record</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css"> <style type="text/css"> .wrapper{ width: 500px; margin: 0 auto; } </style> </head> <div class="wrapper"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <div class="page-header"> <h2>Aggiorna la registrazione</h2> </div> <p>Per favore, modifica i valori di input e invia per aggiornare la registrazione.</p> <form action="<?php echo htmlspecialchars(basename($_SERVER['REQUEST_URI'])); ?>" method="post"> <div class="form-group <?php echo (!empty($name_err)) ? 'has-error' : ''; ?>"> <label>Name</label> <input type="text" name="name" class="form-control" value="<?php echo $name; ?>"> <span class="help-block </div> <div class="form-group <?php echo (!empty($address_err)) ? 'has-error' : ''; ?>"> <label>Indirizzo</label> <textarea name="address" class="form-control"><?php echo $address; ?></textarea> </div> <span class="help-block"><?php echo $address_err;?></span> <div class="form-group <?php echo (!empty($salary_err)) ? 'has-error' : '';"> <label>Salario</label> <input type="text" name="salary" class="form-control" value="<?php echo $salary; ?>"> </div> <span class="help-block"><?php echo $salary_err;?></span> <input type="hidden" name="id" value="<?php echo $id; ?>"/> <input type="submit" class="btn btn-primary" value="Invia"> </form> </div> </div> </div> </div> <a href="index.php" class="btn btn-default">Annulla</a>
Creazione della pagina di eliminazioneInfine, costruiremod
Creiamo un file chiamato "delete.php" e inseriamo il seguente codice. Questo eseguirà la funzione di eliminazione del nostro applicativo CRUD.Impiegatol'attributo id daImpiegatoElimina i record esistenti nella tabella.
<?php //确认后进行删除操作 if(isset($_POST["id"]) && !empty($_POST["id"])){ //包含配置文件 require_once "config.php"; //DELETE语句 $sql = "DELETE FROM employees WHERE id = ?"; if($stmt = mysqli_prepare($link, $sql)){ //将变量作为参数绑定到预处理语句 mysqli_stmt_bind_param($stmt, "i", $param_id); //Imposta i parametri $param_id = trim($_POST["id"]); //Prova ad eseguire la statement preparata if(mysqli_stmt_execute($stmt)){ //Eliminazione del record avvenuta con successo. Redirect alla pagina di login header("location: index.php"); exit(); } else{ echo "Oh no! È sorto un problema. Riprovate più tardi."; } } //Chiudi la statement mysqli_stmt_close($stmt); //Chiudi la connessione mysqli_close($link); } else{ //Controlla se il parametro id esiste if(empty(trim($_GET["id"]))){ //L'URL non contiene il parametro id. Redirect alla pagina di errore header("location: error.php"); exit(); } } ?> <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post"> <div class="alert alert-danger fade in"> <input type="hidden" name="id" value="<?php echo trim($_GET["id"]); ?>"/> <p>Siete sicuri di voler eliminare questo record?</p><br> <p> <input type="submit" value="Yes" class="btn btn-danger"> <a href="index.php" class="btn btn-default">No</a> </p> </div> </form>
Infine, creiamo un file chiamato "error.php". Se la richiesta è non valida, ovvero se la stringa di ricerca dell'URL manca del parametro id o è non valido, verrà visualizzata questa pagina.
<h1>Richiesta non valida</h1> <div class="alert alert-danger fade in"> <p>Scusate, la richiesta che avete presentato non è valida. Per favore, <a href="index.php" class="alert-link">tornate indietro</a> e provate di nuovo.</p> </div>
Dopo un lungo viaggio, finalmente abbiamo completato l'applicazione CRUD utilizzando PHP e MySQL.