Esempio di form PHP per inserire dati in database MYSQL

Esempio di form PHP per inserire dati in database MYSQL

php-mysql-form

In questo articolo vi mostriamo un esempio di form PHP per inserire dati in database MYSQL. Quello di cu abbiamo bisogno sono 2 pagine (una html e una php) per creare un semplice form per inserire e registrare i dati e un database mysql, contenente, per il nostro esempio, una tabella di nome anagrafica composta dai campi “name” e “address“. Prima di tutto dobbiamo creare il database mysql all’interno del quale andremo a salvare i dati inseriti dall’utente. A riguardo abbiamo creato una guida “Creare database mysql” (leggi questo articolo prima di proseguire, nel caso non sappia come creare un db) che fa proprio al nostro caso.

Form HTML

Il primo file si chiamerà form.html e altro non è che un semplice form che cattura i dati inseriti dall’utente al momento della digitazione: Inserisci il codice qui sotto nelle tue pagine web per poterlo utilizzare.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 
Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
<title>PAGINA CARICAMENTO DATI</title>
</head>

<body>
<table border="0">
  <tr>
    <td align="center">Inserisci i dati richiesti</td>
  </tr>
  <tr>
    <td>
      <table>
        <form method="post" action="input.php">
        <tr>
          <td>Nome</td>
          <td><input type="text" name="name" size="20">
          </td>
        </tr>
        <tr>
          <td>Indirizzo</td>
          <td><input type="text" name="address" size="40">
          </td>
        </tr>
        <tr>
          <td></td>
          <td align="right"><input type="submit" 
          name="submit" value="Sent"></td>
        </tr>
        </form>
        </table>
      </td>
    </tr>
</table>
</body>
</html>
Dopo il salvataggio, la pagina dovrebbe apparire così:
form html

form html

form PHP per inserire dati in database MYSQL

Il secondo file (input.php) file recupera i dati inseriti (nome e indirizzo) e li inserisce nelle 2 tabelle.  
<?
//la stringa mysql_connect deve essere compilata con i dati relativi al proprio database
// HOST = IP server Mysql
// USER = Nome utente databse
// PASSWORD = Password utente databse
mysql_connect("HOST","USER","PASSWORD");//database connection
// Qui sotto al posto di NOME_DATABASE, inserite il nome del vostro DB
mysql_select_db("NOME_DATABASE");

// recupero i valori si NOME e INDIRIZZO e li assegno alle variabili $name e $address
$name = $_POST['name'];
$address = $_POST['address'];


//inserting data order
$toinsert = "INSERT INTO anagrafica
			(name, address)
			VALUES
			('$name',
			'$address')";

//declare in the order variable
$result = mysql_query($toinsert);	//order executes
if($result){
	echo("<br>Inserimento avvenuto correttamente");
} else{
	echo("<br>Inserimento non eseguito");
}
?>
Puoi scaricare i files contenuti in questa pagina, aiutandoci con una condivisione. Dopo la condivisione potrai accedere al link per il download dei files appena elencati:
Se avete dubbi o domande, commentate. Buon lavoro!

Tags: , , , ,

Trackback dal tuo sito.

Fabio

Appassionato di tecnologia, lavoro nel mondo dell'informatica dal 1999. Mi diletto con PHP e MYSQL e ultimamente mi sono appassionato al mondo SEO ...più per sfida che per necessità. In questo blog voglio condividere con gli utenti quello che imparo, sperando che altri possano trarne "profitto" .

Commenti (43)

  • FABIO

    |

    ciao ho provato il tuo script ma non riesco a scrivere sul database mi potresti aiutare

    Reply

    • Fabio Iegri

      |

      Ciao Fabio, hai creato la tabella “tabella_esempio” composta dai campi “name” e “address” ?
      Che errore ricevi?

      Reply

  • Alessandro

    |

    Ciao, a me dà un errore in questa riga:
    mysql_select_db(“u418751281_nyvej”);

    Reply

    • Fabio Iegri

      |

      Ciao Alessandro, sembra siano sbagliate le credenziali per accedere al database.
      Controlla il nome del database, lo username e la password

      Reply

      • Alessandro

        |

        Mi da questo errore:
        Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/u418751281/public_html/test/index.php on line 9

        Reply

        • Fabio Iegri

          |

          Se sei certo che la riga 9 sia mysql_select_db, prova a usare gli apici singoli anziché i doppi. Se non dovesse andare ne anche con gli apici singoli, prova a togliergli.
          Ciao
          Fabio

          Reply

          • Alessandro

            |

            Grazie delle risposte, posto qui l’intero file ovviamente nascondendo i dati di accesso:

            E’ solo un file di test visto che sto imparando.

          • Alessandro

            |

            setcookie(‘nome’, $_POST[‘nome’]);
            echo “Ciao” .$_POST[‘nome’];
            mail(“[email protected]”, “Utente”, $_POST[‘nome’], “From: [email protected]“);
            echo “Mail inviata!”;
            //DB
            mysql_connect(“—-“,”—“,”—“);
            mysql_select_db(“—“);
            $dati = “INSERT INTO test(nome) VALUES($_POST[‘nome’])”;
            mysql_query($dati);

          • Fabio Iegri

            |

            Faccio una prova con il tuo codice e ti dico.
            Dammi qualche minuto.

          • Fabio Iegri

            |

            Ciao,
            ho fatto i test (solo della insert, non dell’invio mail). TI riporto il codice funzionante.
            Ho fatto una sola modifica per velocizzare i test; per la variabile $nome, anziché prendere il valore dalla post, l’ho impostata staticamente con $nome=”Fabio”;
            Ti basta commetare la riga e nella insert sostituire VALUES(‘$nome’) con VALUES($_POST[‘nome’])

            < ? setcookie(‘nome’, $_POST['nome']); echo “Ciao” .$_POST['nome']; mail("[email protected]", "Utente", $_POST['nome'], "From: [email protected]"); echo “Mail inviata!”; $nome="Fabio"; mysql_connect("localhost","TUOUSER","TUAPWD");//database connection // Qui sotto al posto di NOME_DATABASE, inserite il nome del vostro DB mysql_select_db("test"); //inserting data order // TEST è il nome della tabella // nome è il il nome del campo della suddetta tabella $dati = "INSERT INTO test (nome) VALUES('$nome')"; mysql_query($dati); ?>

            Fammi sapere se ha funzionato.
            Ciao
            Fabio

  • Alessandro

    |

    Grazie mille, ora funziona

    Reply

  • Mattia

    |

    Il form come postato inizialmente mancava della cosa piu importante: prelevare e postare sul database. Cosi com’è manda la form (con tanto di errori) ma nel database i campi risultano vuoti. Pertanto, vanno aggiunte queste 2 stringhe:

    $name = $_POST[‘name’];
    $address = $_POST[‘address’];

    M.

    Reply

    • Fabio Iegri

      |

      Hai ragione Mattia.
      Grazie per averlo fatto notare.
      Modificato!!!

      Reply

  • peppe

    |

    Complimenti Fabio per il sito…
    sto provando, ma ho il seguente problema:
    quando dalla pagina form html clicco su sent mi apre la finestra salva con nome con il nome del file input.php e non riesco ad andare avanti.
    Riesci a consigliarmi?
    Grazie

    Reply

    • Fabio Iegri

      |

      Ciao peppe e scusami per il ritardo.
      Probabilmente non hai il php attivo sul tuo server?

      Che succede se chiami direttamente il file input.php ?

      Grazie
      Fabio

      Reply

  • carmine peluso

    |

    ciao premesso che sono un mezzo principiante, ho fatto tutto come descritto ma la risposta è sempre inserimento non riuscito ho un server mysql aruba.

    ho creato la tabella “anagrafica”
    ho configurato le credenziali
    ho inserito il nome del db dove è presente la tabella.
    che altro devo fare?

    Reply

    • Fabio Iegri

      |

      Buongiorno Carmine,
      senza vedere il tuo ambiente l’unica cosa che mi viene in mente è che potresti non aver aggiornato correttamente il puntamento al tuo DB.
      Hai provato scaricando i files allegati all’articolo?

      Li ho provati personalmente più di una volta e sono certo funzionino.
      Unica accortezza dopo averli scaricate è quella di aggiornare il file di configurazione, inserendo le coordinate /ip, user e pwd) del tuo database.

      Scrivimi ancora se non va neanche scaricando gli allegati.

      Reply

  • Fabio

    |

    Ciao Fabio, ho letto questo articolo e lo trovo fantastico. Espongo il mio problema. Fino ad oggi ho usato joomla per aggiornare il mio sito con news e tutto il resto ma ho integrato con frontpage le sezioni dove gli utenti si divertivano con fantacalcio e torneo pronostici. Da Luglio è stato tolto il supporto a programmi obsoleti (come appunto frontpage2003) lasciandomi in mezzo ad un mare di guai. Prima per l’invio di formazioni e pronostici avevo creato dei form spettacolari dove gli utenti inserivano le loro scelte ed una volta cliccato su invia le stesse venivano incollate su una pagina nel sito. E’ possibile fare tutto questo in php? Ad oggi ho trovato solo form che riuscissero ad inviare i dati via mail, e questo come il tuo al database, ma uno che me li incolli direttamente sul sito? Ti ringrazio anticipatamente.

    Reply

    • Fabio Iegri

      |

      Ciao Fabio, SI, si puoi fare.
      Con la form presente nell’articolo (adattandola alle tue necessità) puoi inserire i dati nel database e con poche righe di codice puoi estrarli dal DB e pubblicarli nella pagina che desideri.
      Se mi dici che tipo di dati pubblichi (campi), provo a scriverti 2 righe di codice.
      Ciao
      F.

      Reply

  • Fabrizio

    |

    Ciao Fabio, ho provato ad inserire i dati e funziona tutto perfettamente, il solo problema è che quando vado a a leggere i dati sul Database non li restituisce, nonostante il campo ID incrementi normalmente. Io lavoro su un normale sito Altervista basato su HTML5
    Grazie Mille

    Reply

    • Fabio Iegri

      |

      Ciao Fabrizio, potresti inviarmi il codice che usi per estrarre i dati dal database?
      Vediamo se riesco ad aiutarti.

      Grazie 1000

      Reply

  • Mattia

    |

    Ciao Fabio e complimenti 🙂 una domandona: ho seguito i consigli e tutto funziona. Ora, sempre da pagina web, è possibile visualizzare il risultato di una query? Per esempio, metti che voglio sapere tutti i nomi delle persone che abitano nella località x, come posso fare? Grazie mille

    Reply

    • Fabio

      |

      Ciao Mattia, in pratica vorresti estrarre e visualizzare i dati anziché inserirli?
      Ho capito bene?
      Ciao
      Fabio

      Reply

      • Mattia

        |

        Ciao Fabio e grazie della veloce risposta!
        In realtà vorrei sia inserirle che estrarli e visualizzarli 🙂 per l’inserimento non ho avuto problemi seguendo i tuoi esempi, ma ora sto facendo dei tentavi per la visualizzazione ma non riesco!

        per rimanere fedele al tuo esempio, se volessi visualizzare in una pagina web tutte le persone che si chinano Fabio e abitano a Roma (per esempio 😛 ) cosa dovrei scrivere in php?

        Reply

        • Fabio

          |

          Ciao Luca.
          Per visualizzare i dati la strada da percorrere è più o meno la stessa. Basta usare una select invece della insert.
          Se mi dai un po di tempo, ti posto un esempio.
          Ciao
          Fabio

          Reply

        • Fabio

          |

          Mattia scusami per il ritardo. We impegnato 🙂

          Ecco 2 righe veloci per risolvere i tuoi dubbi. Con queste righe puoi estrarre tutti i record che hanno come nome Fabio.
          Crea un file che si chiama estrai.php (è solo un esempio, puoi chiamarlo come vuoi) e richiamalo da browser con:
          http://localhost/estrai.php?name=Fabio


          < ? mysql_connect("HOST","USER","PASSWORD");//database connection // Qui sotto al posto di NOME_DATABASE, inserite il nome del vostro DB mysql_select_db("NOME_DATABASE");
          // recupero i valori si NOME e INDIRIZZO e li assegno alle variabili $name e $address
          $name = $_GET['name'];
          $address = $_GET['address'];

          mysql_select_db("$DB_name",$link);
          $q= mysql_query("SELECT * FROM anagrafica where name ='$name'");
          while($row = mysql_fetch_array($q)) {
          echo $nome= $row['name'];

          }

          ?>

          Questo è solo un semplice esempio. Potrei modificare a tuo piacimento sia le query string (ES. name=Fabio&Address=Roma) e modificando la query con $q= mysql_query(“SELECT * FROM anagrafica where name =’$name’ and address like ‘%Roma%'”);

          Spero di esserti stato d’aiuto.
          Appena possibile scriverò un articolo dedicato più completo

          Se hai dubbi rispondi pure a questo commento.
          Ciao
          Fabio

          Reply

          • Mattia

            |

            Ciao Fabio e scusa per il ritardo… Finalmente un paio di giorni di vacanza:P ho provato e funziona tutto perfettamente grazie mille per il tuo aiuto!

          • Fabio

            |

            Figurati, hai fatto bene 🙂
            Sono contento di esserti stato d’aiuto.
            Se hai altro dubbi, commenta pure 🙂

            Un saluto

  • Luca

    |

    Ciao, sto facendo un sito nel quale devo mettere una pagina la quale mi permette di aggiungere dati in un db. Se io copio il tuo codice cambiando solo i dati per collegarmi al db va tutto bene ma se io inserisco nuovi campi, non mi fa inserire niente? Secondo te cosa potrebbe essere? Di seguito l’intero codice.

    PAGINA CARICAMENTO DATI

    Inserisci i dati richiesti

    Nome programma

    Breve descrizione

    Descrizione completa

    Link download

    Link sito

    <?
    //la stringa mysql_connect deve essere compilata con i dati relativi al proprio database
    // HOST = IP server Mysql
    // USER = Nome utente databse
    // PASSWORD = Password utente databse

    $db = mysql_connect("sql.lucafranchi.it","lucafran29346","luca77158") or die ('Errore in connessione');//database connection
    // Qui sotto al posto di NOME_DATABASE, inserite il nome del vostro DB
    mysql_select_db("lucafran29346", $db) or die ('Errore in selezione db');

    // recupero i valori si NOME e INDIRIZZO e li assegno alle variabili
    $name = $_POST['name'];
    $desc = $_POST['desc'];
    $description = $_POST['description'];
    $download = $_POST['download'];
    $site = $_POST['site'];

    //inserting data order
    $toinsert = "INSERT INTO anagrafica (name, desc, description, download, site)
    VALUES ('$name', '$desc', '$description', '$download', '$site')";

    //declare in the order variable
    $result = mysql_query($toinsert); //order executes
    if($result){
    echo("Inserimento avvenuto correttamente”);
    } else{
    echo(“Inserimento non eseguito”);
    }

    ?>

    Grazie e buone feste!

    Reply

    • Fabio

      |

      Buongiorno,
      scusa per il ritardo ma ho avuto dei problemi. Leggo la tua richiesta e provo a darti una risposta.

      Grazie
      Fabio

      Reply

    • Fabio

      |

      Ciao Luca,
      come promesso, anche se con un po di ritardo, eccomi ad aiutarti.
      Il codice sembra corretto. Hai aggiunto i campi al database?
      Se aggiorni il codice, il tuo DB deve essere pronto a recepirlo.

      Fammi sapere
      Ciao
      Fabio

      Reply

  • Valerio

    |

    CIao,
    come si puo gestire la cosa in “locale”? magari usando un db di access sempre con un form web ma che stia sempre in locale (magari in una share di rete)
    grazie

    Reply

    • Fabio

      |

      Ciao Valerio e grazie per averci scritto.
      Se usi una macchina con windows ci sono prodotti già pronti per fare queste cose localmente, come WAMPP (XAMPP per linux e derivati).

      Fammi sapere se hai problemi
      Ciao
      F.

      Reply

  • Luca

    |

    Ciao faBIO! sTO CERCANDO DI FAR FUNZIONARE QUESTO CODICE MA QUANDO PREMO IL TASTO PER INVIARE I DATI ALLA PAGINA PHP HO ERRORE
    “La pagina localhost non funziona
    localhost al momento non è in grado di gestire la richiesta.”

    qUALCHE SUGGERIMENTO?

    p.s.
    BEL SITO.. l’UNICA COSA, CHI E’ DALTONICO (COME ME) NON RIESCE A LEGGERE BENE I CONTENUTI…

    Reply

    • Fabio

      |

      Ciao Luca e grazie per averci contattati.
      Se non riesci a contattare localhost potrebbe significare che il webserver non è attivo. Prova a sostituirlo con 127.0.0.1. Oppure da riga di comando prova a fare il telnet sulla ports di ascolto del webserver e guarda la riposta (o l’eventuale timeout).

      Mi dispiace per il problema dei colori. Non ci ho mai pensato e di conseguenza, evidentemente sbagliando, non me ne sono mai preoccupato. Come potrei migliorare?
      Grazie 1000
      Fabio

      Reply

  • ENRICO

    |

    CIAO
    Warning: mysql_connect(): Access denied for user ‘Sql993712’@’89.46.105.192′ (using password: YES) in /web/htdocs/www.ciplo.eu/home/php/inputdati.php on line 8

    QUESTO IL MESSAGGIO DI ERRORE, LA COSA CHE MI INCURIOSISCE E’ CHE L’INDIRIZZO IP NON E QUELLO IMPOSTATO DA ME…..

    Reply

    • Fabio

      |

      Ciao Enrico,
      cone le poche informazioni che ho a disposizione mi viene da pensare che il file che richiami stia puntando a un file di configurazione diverse.

      Se Riesci a dare altre informazioni, provo a fare di meglio.

      Grazie
      Fabio

      Reply

  • MAX

    |

    ciao e grazie per aiuto, PER CHI COME ME, E A ZERO DI TUTTO.
    STO PROVANDO A METTERE QUESTI 2 FILE FORM.HTML e INPUT.PHP,
    NELLA MIA DIRETTORI WEB HOSTING DOVE HO LA PAGINA INDEX DI UN SITO WEB PROVA.
    LA MIA DOMANDA E QUESTA DOPO AVER RILETTO PIU VOLTE I DUE FILE,
    NON CAPISCO COME FA IL FILE input.php a cercare e riconoscere il file form.html e prendersi i dati dalle variabili ?
    o al contrario il file form dopo invio sul tasto sent, come fa a cercare il file di nome input.php ed eseguire ?
    dove e come si comunicano? come si legano ?
    questo perche se io creo piu tabelle, creo piu form con nomi diversi per ogni tabella, e forse penso dovro creare piu file input.php con nomi diversi per raccogliere i dati dai form e metterli sul dbase.
    io sto leggendo di tutto ma le cose piu banali non le trovo,

    poi 2 domanda e mia idea : se e come ti ho scritto in precedenza
    alora dentro il mio sito su una pagina html la chiamo menu
    e ci metto dei bottoni form inseri anagrafica e collego con link al form specifico di quella tabella ? e del file input.php ne creo tanti e forse ogni form va a collegarsi non so come al suo input.php anche si gli do nomi diversi ???

    grazie non vado oltre perke non serve a farmi fantasie e paranoie aspetto una gentile risposta per illuminarmi e darmi fiducia e speranza , max

    Reply

    • Fabio

      |

      Ciao Max

      Input.php è richiamata in form.php dove vedi scritto ACTION.

      La seconda domanda non l’ho capita 🙂 potresti spiegarmi meglio cosa vorresti fare?

      Grazie
      Fabio

      Reply

  • angelo

    |

    CIAO FABIO, POTRESTI GENTILMENTE INTEGRARE L’ESEMPIO DA TE PROPOSTO AGGIUNGENDO UNA TABELLA ESTERNA COME CITTÀ (DOVE VI POSSA ESSERE LA RELAZIONE 1- MOLTI) PER RENDERE L’ESEMPIO PIÙ INTERESSANTE? TI RINGRAZIO E RIMANGO IN ATTESA TUE NOTIZIE.

    Reply

    • Fabio

      |

      Ciao Angelo. Dovrei avere qualcosa di pronto. Martedì o mercoledì lo condivido qui

      Ciao
      Fabio

      Reply

  • enrico

    |

    Ciao
    stavo cercando una soluzione simile per fare delle iscrizioni a delle gare online
    premetto che sto lavorando con xampp in locale
    Ho scaricato sia il dbase che il form dopo averne creato uno in precedenza che non registrava i dati nel dbase ma anche utilizzando l’esempio i dati non vengono memorizzati evidentemente mi sfugge il passaggio per memorizzarli.
    Se mi puoi dare un aiuto

    Grazie

    Reply

Lascia un commento