Visualizzazione risultati 1 fino 9 di 9

Discussione: EasyPHP Form html e php per inserimento record

  1. #1
    sand non è connesso Neofita
    Data registrazione
    08-01-2008
    Messaggi
    21

    Predefinito EasyPHP Form html e php per inserimento record

    Sto cercando di attivare una immissione dati via form di una database creato con mysql, ma siccome l'impresa è al di sopra delle mie forze mi affido all'aiuto dei volenterosi del forum.

    Ho installato easy php 2.01b (PHP 5.2.0, PhpMyAdmin 2.9.1.1, SQLite 1.2.0, MySQL 5.0.27) con il server Apache e Mysql che "girano" - com'è noto - in locale sulla mia macchina. Ho creato un database di prova con l'interfaccia PhpMyAdmin che ho iniziato a popolare sempre grazie alla interfaccia con la funzione "inserisci".

    Poi mi sono cimentato nella scrittura del codicePHP per mostrare il contenuto dei campi della tabella (database: "danx", tabella "anagrafica", campi Nome, Cognome, Telefono).

    Ecco la struttura come da Mysql:
    Server: localhost - Database: danx
    anagrafica
    Commenti sulla tabella: Prova strutturata x input

    Campo Tipo Null Predefinito Commenti
    Nome varchar(20) No
    Cognome varchar(20) No
    Telefono varchar(15) No

    ecco l'output della funzione "esporta" della tabella popolata

    -- phpMyAdmin SQL Dump
    -- version 2.9.1.1
    -- http://www.phpmyadmin.net
    --
    -- Host: localhost
    -- Generato il: 16 Giu, 2008 at 02:05 PM
    -- Versione MySQL: 5.0.27
    -- Versione PHP: 5.2.0
    --
    -- Database: `danx`
    --
    -- --------------------------------------------------------
    --
    -- Struttura della tabella `anagrafica`
    --

    DROP TABLE IF EXISTS `anagrafica`;
    CREATE TABLE `anagrafica` (
    `Nome` varchar(20) NOT NULL default '',
    `Cognome` varchar(20) NOT NULL default '',
    `Telefono` varchar(15) NOT NULL default '',
    KEY `Cognome` (`Cognome`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Prova strutturata x input';

    --
    -- Dump dei dati per la tabella `anagrafica`
    --

    INSERT INTO `anagrafica` (`Nome`, `Cognome`, `Telefono`) VALUES
    ('Gino', 'Bartali', '00000000001'),
    ('Fausto', 'Coppi', '00000000002'),
    ('Eddie', 'Mercz', '00000000003');


    Sono riuscito, (soffrendo molto e studiando in maniera assolutamente da neofita le guide ufficiali - e non - di PHP e MYSQL) a creare uno script php per la visualizzazione dei dati contenuti nella tabella (files collocati nella subdirectory "www" di EasyPHP).

    ecco il codice del file "index.php" (a proposito nella documentazione di Easyphp non è data l'informazione della necessità, per il caricamento della pagina in locale, che il file DEBBA essere nominato così, appunto "index", ma tant'è ...) :

    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>

    <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
    <title>anagrafica2</title>

    </head>
    <body>
    <br>

    <?php

    $connessione
    = mysql_connect("localhost","root","")or die("Connessione non riuscita: " . mysql_error());
    print (
    "Connesso con successo");

    mysql_select_db("danx", $connessione) or die("Errore nella selezione del database");

    $query = mysql_query("SELECT * FROM `anagrafica` WHERE 1 LIMIT 0, 30; ",$connessione);

    echo
    "<br>";

    if (
    $query==FALSE) die("errore nella composizione della query". mysql_error());

    mysql_close($connessione);

    while(
    $row=mysql_fetch_array($query)){

    echo
    "nome: ".$row[Nome];

    echo
    " cognome: ".$row[Cognome];

    echo
    " telefono: ".$row[Telefono];

    echo
    "<br>";

    }
    ?>
    <br>

    </body>
    </html>
    eccone l'output:

    Connesso con successo
    nome: Gino cognome: Bartali telefono: 00000000001
    nome: Fausto cognome: Coppi telefono: 00000000002
    nome: Eddie cognome: Mercz telefono: 00000000003

    adesso le dolenti note. Volevo creare una maschera di input per caricare gli array (giusto?) con i valori assegnati alle variabili da collegare ai contenuti dei campi della tabella del database. Ecco il tentativo (file : "immissione.html")

    Codice PHP:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <
    html>
    <
    head>
    <
    meta http-equiv="Content-Language" content="it">
    <
    meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <
    title>Immissione dati</title>

    </
    head>
    <
    body>
    <
    center>
    <
    form action="report.php" name="Invio dati" target="_parent" enctype="application/x-www-form-urlencoded" method="post">
    <
    p>Immissione Dati&nbsp;</p>

    <
    p>NOME</p>

    <
    input maxlength="20" name="Nome"><br>
    <
    br>
    COGNOME<br>
    <
    br>
    <
    input maxlength="20" name="Cognome"><br>
    <
    br>
    TELEFONO<br>
    <
    br>
    <
    input maxlength="15" name="Telefono"><br>
    <
    br>
    <
    p align="center"><input value="Inserisci" name="B1" type="submit"></p>
    </
    form>
    </
    center>
    <
    br /><div style="z-index:3" class="smallfont" align="center">LinkBacks Enabled by <a rel="nofollow" href="http://www.crawlability.com/vbseo/">vBSEO</a> 3.0.0</div></body>
    </
    html>
    essendo un file html non ho errori ... ma la form potrebbe anche aver incamerato le variabili ...

    ecco però poi di seguito il contenuto dello script (file?) php che ho nominato "report.php", e che avrebbe dovuto, nelle mie intenzioni (e copiando codice da lezioni esemplari sul web), assumere i valori delle variabili negli arrays (dico giusto?) e mostrarne i contenuti dei campi

    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>

    <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
    <title>anagrafica2</title>

    </head>
    <body>
    <br>

    <?php

    $descrizione
    = $_POST['Nome'];
    $descrizione2 = $_POST['Cognome'];
    $descrizione3 = $_POST['Telefono'];


    $connessione = mysql_connect("localhost","root","")or die("Connessione non riuscita: " . mysql_error());
    print (
    "Connesso con successo");

    mysql_select_db("danx", $connessione) or die("Errore nella selezione del database");


    $query=("Insert into 'anagrafica' ('Nome' ) VALUES ( NULL , '$descrizione');";
    $query1=("Insert into 'anagrafica' ('Cognome') VALUES ( NULL , '$descrizione2');";
    $query2=("Insert into 'anagrafica' ('Telefono') VALUES ( NULL , '$descrizione3');";

    if (
    $query==FALSE) die("errore nella composizione della query". mysql_error());

    $result=mysql_query($query,$connessione);
    if (
    $result==FALSE) die("Errore inserimento articolo");
    echo
    "Articolo inserito con successo: ".$descrizione;


    // mostra la tabella

    $query = mysql_query("SELECT * FROM `anagrafica` WHERE 1 LIMIT 0, 30; ",$connessione);

    echo
    "<br>";

    if (
    $query==FALSE) die("errore nella composizione della query". mysql_error());


    while(
    $row=mysql_fetch_array($query)){

    echo
    "nome: ".$row[Nome];

    echo
    " cognome: ".$row[Cognome];

    echo
    " telefono: ".$row[Telefono];

    echo
    "<br>";

    }


    mysql_close($connessione);


    ?>
    <br>


    </body>
    </html>

    l'output (errato) è il seguente


    "; if ($query==FALSE) die("errore nella composizione della query". mysql_error()); mysql_close($connessione); while($row=mysql_fetch_array($query)){ echo "nome: ".$row[Nome]; echo " cognome: ".$row[Cognome]; echo " telefono: ".$row[Telefono]; echo "
    "; } mysql_close($connessione); ?>

    Comunque, interrogando la tabella da Mysql, questa non risulta aggiornata

    Post prolisso, mi rendo conto, ma sto cercando di capire. Grazie in anticipo per i suggerimenti e la pazienza.

    Sand
    Ultima modifica di sand : 16-06-2008 alle ore 18.07.34 Motivo: agilità nel text, aggiustamenti script

  2. #2
    Guest

    Predefinito

    Penso che il problema sia nella query:
    Codice PHP:
    $query=("Insert into 'anagrafica' ('Nome' ) VALUES ( NULL , '$descrizione');";
    Inserisci un nome, ma gli altri campi non possono avere valore nullo. La tabella è definita così:
    Codice PHP:
    DROP TABLE IF EXISTS `anagrafica`;
    CREATE TABLE `anagrafica` (
    `
    Nome` varchar(20) NOT NULL default '',
    `
    Cognome` varchar(20) NOT NULL default '',
    `
    Telefono` varchar(15) NOT NULL default '',
    KEY `Cognome` (`Cognome`)
    )
    ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Prova strutturata x input';
    Prova a togliere quei "NOT" così almeno vedi se l'inserimento avviene...

    Nota $query, $query1 e $query2 dovrebbero essere eseguite tutte e tre?
    Puoi ottenere lo stesso risultato eseguendo una sola query.

    Potrebbero esserci altri errori... non ho prestato molta attenzione...

    Ciao

    PS: Meglio cancellare/sostituire quei numeri di telefono...
    Ultima modifica di giuseppeiemma : 16-06-2008 alle ore 16.45.53

  3. #3
    sand non è connesso Neofita
    Data registrazione
    08-01-2008
    Messaggi
    21

    Predefinito Script sistemato. L'immissione nella table funziona

    Per prima cosa ho modificato la struttura aggiungendo il campo "id" (numerico, auto incrementante, come chiave unica), sempre dalla shell di MySQL:

    Codice PHP:
    DROP TABLE IF EXISTS `anagrafica`;
    CREATE TABLE IF NOT EXISTS `anagrafica` (
    `
    id` int(2) NOT NULL auto_increment,
    `
    Cognome` varchar(20) default NULL,
    `
    Nome` varchar(20) default NULL,
    `
    Telefono` varchar(15) default NULL,
    PRIMARY KEY (`id`),
    KEY `Cognome` (`Cognome`)
    )
    ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Prova strutturata x input' AUTO_INCREMENT=8 ;
    poi ho ripulito il file report.php che presentava errori di ortografia, più che di sintassi, sostanzialmente sulla query (grazie Giuseppe), dove ho aggiunto i backquotes al nome della tabella (dovrebbe essere irrilevante, visto che è un opzione di Mysql?) ma li ho tolti (i quotes) dai nomi dei campi del DB eliminando anche gli spazi tra i nomi-campo

    Codice PHP:
    $query = "INSERT INTO `anagrafica` (Cognome,Nome,Telefono) VALUES ('$descrizione', '$descrizione2', '$descrizione3');";
    aggiungendo invece i quotes sui nomi degli arrays ('$descrizione' ...) in quanto campi alfabetici, anche se dichiarati indirettamente tramite gli arrays stessi.

    Ho poi aggiunto dei controlli sotto forma di output per verificare che gli step critici si mostrassero:
    1) Connessione all'host
    2) Accesso al database
    3) Controllo che i valori immessi nel form (tramite file di immissione, che ho rinominato da immissione.html a index.php per poterlo lanciare come pagina in locale) fossero stati caricati negli arrays dichiarati
    4) Verifica della correttezza della query contenuta in "$query"
    5) Verifica dell'avvenuto inserimento del nuovo record
    6) stampa a video del database aggiornato

    ecco l'output :)

    Connesso con successo
    selezione database ok
    Visualizzo i valori Post:
    FrankSinatra1111111119090
    composizione della query ok
    Articolo inserito con successo: FrankSinatra1111111119090
    nome: Gino cognome: Bartali telefono: 31111111111
    nome: Fausto cognome: Coppi telefono: 31111111117683
    nome: Eddie cognome: Mercz telefono: 311111111111
    nome: Freddie cognome: Mercury telefono: 461111111111
    nome: Pantani cognome: Marco telefono: 24222222222222
    nome: Sinatra cognome: Frank telefono: 1111111119090

    Spero che possa essere di aiuto a qualche neo come me.

    Adesso non mi resta che tentare l'approccio in remoto, cioè caricare sul webserver Altervista ...


    Sand
    Ultima modifica di sand : 19-06-2008 alle ore 00.06.30 Motivo: Mancavano i rigraziamenti per Giuseppe

  4. #4
    Guest

    Predefinito

    Ciao Sand!!
    ho seguito il tuo lavoro perchè sto imparando ad usare php e phpMyAdmin..
    funziona tutto fino al tuo ultimo passo....
    non capisco perchè il file report.php non funzioni...

    Ho copiato i tuoi file modificandoli secondo le mie esigenze.
    Ho un db che si chiama intranet in cui vi è una tabella Cliente con i campi IdCliente (auto incrementante) e NomeCliente.
    Dalla tua pagina immissione.html(anch'essa opportunamente modificata) inserisco il nome di un nuovo cliente da inserire ed invio. eppure la pagina report è bianca e nel db non ci sono righe nuove.

    Se avete risolto il problema io non ho capito come :( Puoi aiutarmi?

    Ti posto le pagine:

    immissione.php
    Codice PHP:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <
    html>
    <
    head>
    <
    meta http-equiv="Content-Language" content="it">
    <
    meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <
    title>Immissione dati</title>

    </
    head>
    <
    body>
    <
    center>
    <
    form action="report.php" name="Invio dati" target="_parent" enctype="application/x-www-form-urlencoded" method="post">
    <
    p>Immissione Dati&nbsp;</p>

    <
    p><br>
    Cliente<br>
    <
    br>
    <
    input maxlength="15" name="NomeCliente">
    <
    br>
    <
    br>
    </
    p>

    <
    p align="center"><input value="Inserisci" name="B1" type="submit"></p>
    </
    form>
    </
    center>
    <
    br />
    </
    body>
    </
    html>
    e adesso la pagina report.php:

    Codice PHP:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>

    <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
    <title>report</title>

    </head>
    <body>
    <br>

    <?php

    $descrizione
    = $_POST['NomeCliente'];
    // $descrizione2 = $_POST['Cognome'];
    // $descrizione3 = $_POST['Telefono'];


    $connessione = mysql_connect("localhost","root","")or die("Connessione non riuscita: " . mysql_error());
    print (
    "Connesso con successo");

    mysql_select_db("intranet", $connessione) or die("Errore nella selezione del database");


    $query=("Insert into 'Cliente' ('Descrizione') VALUES ( NOT NULL , '$descrizione');";
    //$query1=("Insert into 'anagrafica' ('Cognome') VALUES ( NULL , '$descrizione2');";
    //$query2=("Insert into 'anagrafica' ('Telefono') VALUES ( NULL , '$descrizione3');";

    if ($query==FALSE) die("errore nella composizione della query". mysql_error());

    $result=mysql_query($query,$connessione);
    if (
    $result==FALSE) die("Errore inserimento articolo");
    echo
    "Articolo inserito con successo: ".$descrizione;


    // mostra la tabella

    $query = mysql_query("SELECT * FROM `Cliente` ORDER BY NomeCliente",$connessione);

    echo
    "<br>";

    if (
    $query==FALSE) die("errore nella composizione della query". mysql_error());


    while(
    $row=mysql_fetch_array($query)){

    echo
    "Id: ".$row[IdCliente];

    echo
    " Cliente: ".$row[NomeCliente];

    //echo " telefono: ".$row[Telefono];

    echo "<br>";

    }


    mysql_close($connessione);


    ?>
    <br>


    </body>
    </html>
    Nella pagina report non da nessun errore o conferma...è proprio una pag bianca. Puoi dirmi come l'hai risolta?
    Grazie :)

  5. #5
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Ci sono due errori sulla query:
    - il primo è che le stringhe costanti (leggi: i valori) vanno specificati all'interno di 'single quote', i nomi di tabelle e di campi invece vanno scritti senza quote (o al più con i `back-quotes` - non presenti sulle tastiere italiane - se avete la scellerata idea di mettere come nomi dei campi parole riservate di MySQL...)
    - il secondo errore è che chiedi l'inserimento di un campo, ma specifichi due valori, la sintassi corretta della query dovrebbe essere questa:
    Codice:
    INSERT INTO Cliente (Descrizione) VALUES ('$descrizione');
    ricorda che i campi che non vengono impostati esplicitamente, assumono il valore di default previsto nella costruzione della tabella. Se questo non c'è, il valore assunto sarà NULL (oppure un opportuno numerico nel caso di valori AUTO_INCREMENT).

    Aggiungo un'altra cosa: per testare la validità della query, devi prima eseguirla... un test del genere:
    Codice PHP:
    if ($query==FALSE) die("errore nella composizione della query". mysql_error());
    non ha alcun senso, perché la query prima di essere eseguita è una semplice stringa... la sintassi che viene usata di solito è questa:
    Codice PHP:
    $result = mysql_query ($query) or die ("Errore nell'esecuzione della query: " . mysql_error ());
    Stammi bene...
    Ultima modifica di dementialsite : 01-10-2008 alle ore 10.11.10
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  6. #6
    Guest

    Predefinito ehm...

    si...hai ragione...così tutto funziona.
    Erano banalità eh?
    devo studiarmi la teoria :(
    Grazie mille

    Se non oso troppo....posso chiedere un'altra cosa?

    Il db è su alcuni progetti realizzati(non da me! doh..)..quindi la tabella clienti è una, poi ce n'è un altra sul tipo di backup, poi un'altra ancora sul tipo di progetto - es.sito web/cd multimediale...etc- e tutte queste tabelle poi si riuniscono in quella principale "Backup" in cui ci sono tutte le info su quel backup di progetto...quindi il tipo di progetto, il cliente, il tipo backup...etc...) (un po' lunga eh?)

    La questione è la seguente: adesso dovrei reiterare l'inserimento per diversi dati....
    La form relativa ai progetti sarà ampliata con l'inserimento di NomeCliente(che c'era già), NomeBackup, NomeProgetto, Data (del progetto) etc.. ma come faccio per reiterare l'inserimento senza dover ripetere le stringhe mille volte? C'è un modo?
    E soprattutto....è possibile inserire un solo dato invece che tutti? Ho provato a farlo ma da diversi problemi...non capisco

    ps. Per comodità riporto il db:
    tabella1= Cliente
    campo1= IdCliente
    campo2= NomeCliente

    tabella2= TipoBackup
    campo1= IdTipoBackup
    campo2= NomeBackup

    tabella3= TipoProgetto
    campo1= IdTipoProgetto
    campo2= NomeProgetto

    tabella4= Backup - quella riassuntiva di tutto
    campo1= IdBackup
    campo2= IdCliente
    campo3= IdTipoCommessa
    campo4= IdTipoBackup
    campo5= Data
    campo6= NomeProgetto
    Ultima modifica di ilaextras : 01-10-2008 alle ore 15.20.13

  7. #7
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Non so se ho capito bene la tua domanda, però è possibile inserire più record nella stessa tabella con una sola query. La sintassi generica (per inserire M record specificando per ciascuno N campi) è la seguente:
    Codice:
    INSERT INTO Tabella (Campo1, ..., CampoN) VALUES
       (Valore11, ..., Valore1N),
       (Valore21, ..., Valore2N),
       ...
       (ValoreM1, ..., ValoreMN)
    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  8. #8
    Guest

    Predefinito

    ragazzi sul mio dominio non riesco ad inserire il record.mi dice sempre errore aggiunta record.potete aiutarmi?grazie.

  9. #9
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,762

    Predefinito

    Non riesumare vecchi topic.

    Devi crearne uno, specificando di cosa stai parlando.

    Ciao!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •