Eccoci giunti alla quarta sezione della guida dedicata alla creazione del proprio cms, oggi vediamo come inserire all’interno di un database Mysql alcuni dati tramite l’uso di un form e di PHP.
Per chi si fosse perso le altre 3 parti della guida ecco un piccolo “sommario” riassuntivo:
– L’importanza di una dashboard e impostazione del progetto
– Strutturare il database per l’inserimento dati.
01. Form e Struttura della pagina di inserimento.
Per prima cosa creiamo la pagina contente il form e lo script di elaborazione dei dati delle nuove news da parte del cliente:
<?php if (isset($_POST['titolo'])) : ?> //SCRIPT PHP ELABORAZIONE DATI <?php else: ?> //FORM INSERIMENTO NEWS <?php endif; ?>
Come vedete ho usato la funzione php ISSET che verifica l’esistenza di una variabile. Nel caso di specie, SE è presente la variabile “titolo” recuperata via POST la pagina esegue lo script per l’elaborazione dei dati. ALTRIMENTI (else) vuol dire che l’utente non ha ancora aggiunto nessuna news e pertanto viene visualizzato il form di inserimento. L’endif finale è essenziale per chiudere il ciclo.
Ovviamente questo non è l’unico metodo per l’inserimento di dati in un database. Vediamo altre modalità che possono esservi utili.
Ecco il form per l’inserimento (va messo subito dopo else:)
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> <input type="text" name="titolo" id="titolo" placeholder="Inserisci il titolo" style="width: 500px;"/> <textarea id="descrizione" name="descrizione" rows="30" cols="80" style="width: 90%;"></textarea> <input type="submit" value="Aggiungi"> </form>
Come vedete, grazie a SERVER PHP_SELF “passiamo” i dati alla stessa pagina in cui si trova il form, una volta ricaricata la pagina il comando ISSET trova la variabile “titolo” ed esegue la prima parte della struttura (quella dell’elaborazione dei dati).
02. Altri metodi di inserimento
Esistono altre tipologie di inserimento, uno è sicuramente il metodo ajax, che invia i valori e permette di inserire nuove news senza ricaricare la pagina. Per una panoramica di questa modalità guarda questo articolo.
Un altro sistema per l’inserimento, il meno “professionale” ma il più semplice da cui partire è dividere la struttura di inserimento in questo modo:
A) aggiungi.php
B) risultato_aggiunta.php
In aggiungi.php mettiamo SOLAMENTE il form di inserimento dati. Con risultato_aggiunta.php elaboriamo i nostri dati. Ovviamente il form va fatto “puntare” allo script di elaborazione.
03. Analisi dello script MYSQL
Ecco lo script mysql che viene usato per l’inserimento dei dati nel database (va posto nella prima parte della struttura del punto 1):
<?php include("connessione_db.php"); include("config.php"); mysql_select_db("$db_name",$connessione); $titolo = mysql_real_escape_string($_POST['titolo']); $descrizione = mysql_real_escape_string($_POST['descrizione']); $sql = "INSERT INTO news SET titolo = '$titolo', descrizione = '$descrizione', data = CURDATE() "; //esegue la query if (@mysql_query($sql)) { //potete mettere anche un #div e stilizzarlo come preferite. echo '<p>News Aggiunta con successo</p>'; } else { //messaggio di errore echo 'errore '. mysql_error().' '; } ?>
Come vedete è necessario includere nella nostra pagina anche il file config.php e connessione_db.php che servono a connetterci in modo corretto (e dinamico) al nostro database. Fatto questo, passiamo al recupero dati (filtrati da eventuali apici con mysql_real_escape), associati i dati recuperati alle variabili possiamo inserire nel database “news” i valori recuperati. Nel nostro caso: titolo e descrizione. La data della news viene auto-generata grazie a CURDATE().
Come precisato nei commenti, potete personalizzare il messaggio di errore come meglio preferite. Ad esempio con un div contenitore colorato di verde, magari con qualche immagine. E’ buona norma sotto al messaggio di “success” inserire anche un semplicissimo menu:
Torna Alla Dashboard | Aggiungi nuovo evento
In questo modo l’utente potrà facilmente navigare e aggiungere una nuova news.
mysql_error().
Serve per visualizzare eventuali errori, utile per capire i nostri sbagli!
04. Codice completo
Config.php
//URL PER HTACCESS $base_url = "http://localhost/tuosito"; //connessione DB $host = "localhost"; $db_user = "root"; $db_psw = "pass"; $db_name = "news";
Connessione_db.php
<?php include("config.php"); //includo file configurazione per recupero variabili $connessione = mysql_connect("$host","$db_user","$db_psw"); if(!$connessione) { die("Errore critico di Connessione al Database" . mysql_error()); } ?>
Aggiungi.php
<?php include("connessione_db.php"); include("config.php"); ?> <?php if (isset($_POST['titolo'])) : ?> mysql_select_db("$db_name",$connessione); $titolo = mysql_real_escape_string($_POST['titolo']); $descrizione = mysql_real_escape_string($_POST['descrizione']); $sql = "INSERT INTO news SET titolo = '$titolo', descrizione = '$descrizione', data = CURDATE() "; if (@mysql_query($sql)) { echo '<p>News Aggiunta con successo</p>'; } else { echo 'errore '. mysql_error().' '; } <?php else: ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> <input type="text" name="titolo" id="titolo" placeholder="Inserisci il titolo" style="width: 500px;"/> <textarea id="descrizione" name="descrizione" rows="30" cols="80" style="width: 90%;"></textarea> <input type="submit" value="Aggiungi"> </form> <?php endif; ?>
05. Conclusioni
Grazie a questa lezione avete imparato a inserire una news con tanto di titolo, data e descrizione. Nel prossimo appuntamento vi spiegherò come creare un permalink dinamico in perfetto stile WordPress (questa feature meritava una trattazione a parte ;)).
Spero vi sia utile per i vostri progetti 😉 Fatemi sapere cosa ne pensate! a domani!
Ciao, stavo seguendo la tua guida per un cms personale…vorrei sapere come inserire nel “post” delle immagini…come avviene l’upload di immaigni?
Continua a seguirmi il prossimo articolo della guida riguarda proprio quello 😉 spero di aver tempo di finirlo già per settimana prossima 😉
Ciao, avrei un piccolo problema, spero tu riesca ad aiutarmi.
Allora, ho seguito questa tua guida, e ho un problema. Ogni molta che aggiorno o arrivo alla pagina, invia dati alle query vuoti. Allora ho copiato il codice già pronto che hai messo alla fine della guida, ma dreamviewer mi da errore. Infatti, come aggiorno o arrivo alla pagina non invia dati, ma quando riempio i campi e clicco invia, mi scrive questo:
mysql_select_db(“$db_name”,$connessione); $titolo = mysql_real_escape_string($_POST[‘titolo’]); $url = mysql_real_escape_string($_POST[‘url’]); $sql = “INSERT INTO badge SET titolo = ‘$titolo’, url = ‘$url’ “; //esegue la query if (@mysql_query($sql)) { //potete mettere anche un #div e stilizzarlo come preferite. echo ‘
Badge aggiunto con successo
‘; } else { //messaggio di errore echo ‘errore ‘. mysql_error().’ ‘; }
Eppure sono sicuro al 100% di aver copiato bene il codice già pronto. Ora, io non so se sia un banalissimo problema di apici, o la condizione usata un po’ maluccio (non ho mai sentito , ma non saprei, l’esperto sei tu ) oppure un problema di formattazione codice PHP del tuo blog..
Potresti aiutarmi a risolvere questo piccolo inconveniente?
Ho risolto, nel tuo codice c’è un errore. Bisognava aggiungere altri tag
in questo modo:
?php
include(“connessione_db.php”);
include(“config.php”);
?>
<?php
mysql_select_db("$db_name",$connessione);
$titolo = mysql_real_escape_string($_POST['titolo']);
$descrizione = mysql_real_escape_string($_POST['descrizione']);
$sql = "INSERT INTO news SET
titolo = '$titolo',
descrizione = '$descrizione',
data = CURDATE()
";
if (@mysql_query($sql))
{
echo 'News Aggiunta con successo’;
}
else {
echo ‘errore ‘. mysql_error().’ ‘;
}
?>
<form action="” method=”post”>
Dall’esempio precedente manca il campo DATA sulla tabella del DB
Riccardo dirti complimenti e grazie é a dir poco riduttivo, queste guide sono splendide 😀
Comunque confermo quanto detto da Davide: c’é qualche errore con l’isset. Lui ha risolto levando tutti i controlli del caso (passando eventualmente al db anche “notizie vuote”), ma non mi sembra la migliore delle soluzioni.
e la pagina risultato_aggiunta.php? come visualizzo i file inseriti nel database?
Non riesco a fare la create table prendendo i dati dal form :/
Possiamo sentirci per email?