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 </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
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