Form Inserimento dati in una tabella Mysql con PHP

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:

Login System

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!

  1. Ciao, stavo seguendo la tua guida per un cms personale…vorrei sapere come inserire nel “post” delle immagini…come avviene l’upload di immaigni?

  2. 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?

  3. 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”>

  4. 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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Up Next:

Font tipografico free: Cubano font

Font tipografico free: Cubano font