Esempio Progetto PHP - Benvenuti sul sito del corso Master di primo

Transcript

Esempio Progetto PHP - Benvenuti sul sito del corso Master di primo
Esempio Progetto PHP
Un piccolo negozio online
CORSO: Master di primo livello in tecnologie sicurezza web e networking
Docente: Dott.ssa Daniela Remogna – www.fimietta.it
1
Presentazione del progetto
L’azienda InfoTech è un piccolo negozio di informatica che tratta le seguenti
categorie di articoli:
• CHIAVETTE
• HARD DISK
• RAM
• SCHEDE VIDEO
• PORTATILI
• ROUTER
InfoTech decide di ingrandire la propria attività vendendo i propri prodotti sulla
rete di Internet.
Infotech ha bisogno di un sito Internet che le consenta di presentare i propri
prodotti sul web.
Inoltre anche i dipendenti dell’azienda con basse competenze informatiche,
devono aver la possibilità di inserire nuovi prodotti in modo semplice e veloce.
2
Presentazione del progetto
Come progettare tutto questo?
Prima di tutto bisogna pensare a come strutturare le pagine del sito. Quante sono? Cosa
fanno?
In linea generale dovranno esserci due categorie di pagine:
La prima categoria è quella del front-end e qui troviamo le pagine visibili a tutti gli utenti,
ad esempio la pagina catalogo prodotti.
La seconda categoria è quella del back-end e qui troviamo le pagine di amministrazione
del sito web, come ad esempio la pagina inserisci un nuovo prodotto.
Le pagine del back-end dovrebbero essere protette con autenticazione. In questo modo
solo il personale dell’azienda InfoTech potrà inserire dei nuovi prodotti e non il resto del
mondo di internet. ☺
La fase di autenticazione non sarà illustrata in questo progetto. Per ora ci accontentiamo
di creare la struttura e le pagine senza protezione.
3
Struttura delle pagine
FRONT-END:
GUIDE UTILI
index.php
prodotti.php
http://php.html.it/guide/
BACK-END:
RACCOLTA SCRIPT UTILI
admin.php
nuova_categoria.php
nuovo_prodotto.php
inserisci_prodotto.php
inserisci_categoria.php
http://php.html.it/script/
4
L’HOME PAGE la pagina index.php
FRONT-END:
index.php
E’ la pagina di presentazione del
sito.
La parte più importante è il link
CONSULTA IL CATALOGO che
consente di sfogliare per
categoria i prodotti registrati nel
DATABASE.
5
LA PAGINA prodotti.php
FRONT-END:
prodotti.php
E’ il catalogo prodotti del sito.
Cosa fa questa pagina?
In poche parole, legge il
contenuto di due tabelle
presenti nel database e
impagina i risultati utilizzando
l’HTML e i CSS.
La prima tabella ad essere
letta è CATEGORIE.
Mentre la seconda tabella è
PRODOTTI.
6
LA SEZIONE AMMINISTRATIVA
BACK-END:
admin.php
Questa sezione è quella che
utilizzeranno i dipendenti
dell’azienda InfoTech per
aggiungere in modo semplice e
veloce nuovi prodotti.
La parte più importante di questa
pagina è il menu composto dalle
voci
“NUOVO PRODOTTO”, “NUOVA
CATEGORIA”, “HOME PAGE”.
7
INSERIMENTO DI UN NUOVO PRODOTTO
BACK-END:
nuovo_prodotto.php
Cosa fa questa pagina?
Consente di registrare un nuovo
prodotto nel database.
La parte più importante è il
FORM / MODULO che consente
di raccogliere i dati inseriti dal
personale dell’InfoTech
all’interno di apposite caselle di
testo/textarea e menu a tendina.
Notare che il menu a tendina
della Categoria viene compilato
dinamicamente leggendo il
contenuto della tabella
Categorie.
Il form spedisce i dati alla pagina
inserisci_prodotto.php
8
LA PAGINA inserisci_prodotto.php
BACK-END:
inserisci_prodotto.php
Cosa fa questa pagina?
Raccoglie i dati digitati dal
personale dell’InfoTech nella pagina
nuovo_prodotto.php e li salva nel
database all’interno della tabella
PRODOTTI.
9
LA PAGINA nuova_categoria.php
BACK-END:
nuova_categoria.php
Cosa fa questa pagina?
Consente di registrare una
nuova categoria di prodotti.
La parte più importante è il
FORM / MODULO che
consente di raccogliere i dati
inseriti dal personale
dell’InfoTech all’interno delle
caselle di testo.
E’ importante che ogni
elemento del form abbia un
nome univoco (attributo name
del tag apposito)
10
LA PAGINA prodotti.php
BACK-END:
inserisci_categoria.php
Cosa fa questa pagina?
Raccoglie i dati digitati dal
personale dell’InfoTech nella
pagina nuova_categoria.php e
li salva nel database all’interno
della tabella CATEGORIE.
11
Flusso pagine per l’inserimento di un nuovo prodotto
1
index.php
2 admin.php
3 nuovo_prodotto.php
4 inserisci_prodotto.php
12
Progettazione DATABASE
Per ogni articolo trattato si desidera visualizzare le seguenti informazioni:
IDARTICOLO
NOME
CATEGORIA
DESCRIZIONE
QTA
PREZZO
FOTO
1
CHIAVE USB 1 GB
KINGSTON
CHIAVETTE
Questo modello
risponde alle esigenze
degli utenti home
office, delle piccole
aziende e di scuole
20
6.00 €
KIN_MH_51796_DTI_1GB_C.jpg
2
CHIAVETTA USB
BRACCIALE 1GB NERO
CHIAVETTE
La particolarità di
questa pen drive è
costituita dal fatto che
la puoi facilmente
indossare come un
braccialetto in modo
da avere sempre con
te i tuoi dati, le tue
foto e la tua musica!
50
15.00 €
NEO_MH_55930_PD2104K_2_C.jpg
3
SAMSUNG HARD DISK
80GB 2.5 IDE
HARD DISK
Una grande capacità
di archiviazione
associata ad un
funzionamento
silenzioso ed affidabile
8
50.00 €
SHD_MM_63058_HM080HC.jpg
4
HARD DISK 1 THERA
SATA2 GREEN POWER
HARD DISK
La prima famiglia di
hard disk attenti ai
consumi !
10
200.00 €
WDG_MM_58362_WD10EACS.jpg
13
TECNOLOGIE
E’ necessario creare e progettare un database dove memorizzare i dati dei prodotti
trattati.
E’ necessario progettare pagine dinamiche che permettano di inserire nuovi
prodotti nel database.
Per fare tutto ciò useremo le Tecnologie Web Server Side.
14
Tecnologie Web Server Side
Php è un modulo aggiuntivo per web servers
che permette di creare delle pagine web
dinamiche.
Esempi di applicazioni:
1. Contatore accessi, Blog
2. Inserire/Modificare/Leggere dati memorizzati in un
database
3. Realizzare un sito di commercio elettronico
4. Programmi gestionali che funzionano via WEB
(gestione magazzino, gestione commesse etc)
LINK di progetti sviluppati in php:
CMS(Content Management System): per creare siti web in modo semplice e automatico. URL: http://www.joomla.it/
Programmi gestionali che funzionano via web:
GAFFI - Gestione affitti via WEB: è un programma scritto in PHP eseguibile su server WEB Apache e DBMS Mysql
per gestire gli immobili dati in locazione: http://www.devincentiis.it/softgaff.php
Software gestione alberghiera: http://www.digitaldruid.net/phphttp://www.digitaldruid.net/php-residence/
Open Source EE-Commerce: http://www.oscommerce.com
15
PREREQUISITI
(Structured Query Language) è un linguaggio
creato per l'accesso a informazioni
memorizzate nei DATABASE.
Permette di:
1. Creare tabelle
2. Inserire/Modificare/Cancellare dati in tabelle
3. Definire le relazioni
4. etc
Si utilizza insieme ad un linguaggio OSPITE, che nel nostro caso è il PHP.
Qualsiasi programma gestionale(software per la gestione di prenotazioni
Alberghiere, commercio elettronico, gestione commesse) è basato su un database
16
SERVER CHE SI UTILIZZERANNO
è un Database management system
(DBMS) relazionale, composto da un
client con interfaccia a caratteri e un
server, entrambi disponibili sia per
sistemi Unix che per Windows, anche se
prevale un suo utilizzo in ambito Unix.
Apache è il nome dato alla piattaforma
server Web più diffusa (ma anche al
gruppo di lavoro open source che ha
creato, sviluppato e aggiornato il
software server), in grado di operare da
sistemi operativi UNIX-Linux e Microsoft.
17
EasyPHP è una piattaforma di sviluppo Web, che permette di far funzionare
localmente (senza connettersi ad un server esterno) degli script PHP.
EasyPHP non è solo un software, ma un ambiente di sviluppo comprendente:
1. due server (un server Web Apache e un server di basi di dati MySQL)
2. un interprete di script PHP
3. un amministratore di database MySQL con interfaccia grafica chiamato
phpMyAdmin.
Dispone di un’interfaccia d’amministrazione che permette di gestire gli utenti,
l’avvio e lo spegnimento dei server. Permette di installare in un volta sola
tutto il necessario per iniziare lo sviluppo locale di PHP.
18
Il server Apache crea automaticamente di default un dominio virtuale (in locale)
all’indirizzo di localhost (http://127.0.0.1).
EasyPHP può essere utilizzato come applicazione portatile, per esempio
attraverso una chiave USB.
La versione 2.0 apporta le nuove versioni dei suoi componenti: Apache 2.2.3,
PHP 5.2.0, MySQL 5.0.2, PHPMyAdmin 2.9.1.1, SQLiteManager 1.2.0
Il software ha l'enorme vantaggio di installare tutti i software necessari per la
progettazione e il funzionamento di un sito web in locale.
E' possibile vedere le pagine progettate semplicemente digitando
l'indirizzo:http://localhost nella barra degli indirizzi del proprio browser.
19
LINK
PhpMyAdmin: http://www.phpmyadmin.net/home_page/index.php
EasyPhp: http://easyphp.org/index.php
Apache: http://www.apache.org/
MySql: http://www-it.mysql.com/
PHP: http://www.php.net/
20
COSA DOBBIAMO FARE?
Dobbiamo creare un nuovo database dove memorizzare i prodotti trattati
dall’azienda InfoTech.
Questo database sarà composto da due tabelle: la tabella Prodotti e la
tabella Categorie.
21
CREAZIONE DEL DATABASE
Per creare un nuovo database è necessario accedere a PhpMyAdmin
attraverso la seguente procedura: cliccare sull’icona E di easyphp e scegliere
la voce Amministrazione, oppure aprire il browser e digitare il seguente url:
http://127.0.0.1/home/
22
EASY PHP ADMINISTRATION
Questa è una pagina di
riepilogo che mostra quali
sono i server e moduli installati
in EasyPhp.
Per gestire il server di database
Mysql cliccare su
Manage Database
23
phpMyAdmin
PhpMyAdmin è un tool che permette di gestire l'amministrazione di database
MySQL. Scritto in linguaggio PHP permette di gestire tramite web browser i
database contenuti in un server mySQL.
Cliccando sul
menu a tendina
(Database) è
possibile
selezionare un
database esistente
http://openskill.info/topic.php?ID=187
Qui è possibile creare un nuovo
database.
24
CREAZIONE DEL DATABASE
Per il nostro progetto creiamo un database nominato “infotechdb”
Tutte le operazioni che esegue
phpMyAdmin sono sempre
traducibili in linguaggio SQL.
25
CREAZIONE DELLA TABELLA CATEGORIE
Un database è composto da una o più tabelle.
Per creare una nuova
tabella, compilare la
maschera presenta in crea
una nuova tabella nel
database infotechdb.
26
Inserimento dei campi
Una tabella è composta da uno o più campi (colonne). Ogni tabella dovrebbe avere un campo
di tipo chiave primaria che identifica in maniera univoca ogni record(riga) della tabella.
Inoltre la chiave primaria viene utilizzata per creare relazioni tra tabelle.
Per definire un campo di tipo chiave primaria, mettere la spunta sul simbolo della
27
chiave.
Inserimento dei campi
La tabella Categoria è composta da due campi: IDCategorie e Nome.
Per ogni campo bisogna specificare quale tipo di dato conterrà, un po’ come le variabili.
Il campo IDCategoria sarà la chiave primaria della tabella Categorie, è di tipo INT e si auto
incrementa da solo.
Cliccare su Salva per confermare
la creazione della tabella.
Guida sul linguaggio SQL: http://database.html.it/guide/leggi/40/guida-linguaggio-sql/
28
CREAZIONE della tabella CATEGORIE
PhpMyAdmin mostra sempre
il codice SQL utilizzato per
creare la tabella.
Cliccare su infotechdb
29
CREAZIONE della tabella PRODOTTI
E’ possibile creare altre
tabelle compilando la
maschera Crea una nuova
tabella del database
infotechdb
Creiamo la tabella prodotti
composta da 7 campi e
clicchiamo sul pulsante
Esegui.
Esegui
30
CREAZIONE dei campi della tabella prodotti
In questo caso il campo IDProdotti sarà la chiave primaria della tabella prodotti.
Notare che il campo Descrizione è stato impostato di tipo LONGTEXT.
31
CREAZIONE dei campi della tabella prodotti
Notare che il campo foto non contiene l’immagine, ma solo il nome dell’immagine o
il suo percorso. Questo perché in genere le immagini si salvano all’interno di
cartelle e sul database si salva solo il nome.
32
CREAZIONE dei campi della tabella prodotti
Cliccando su Salva viene creata la tabella Prodotti e viene mostrato il codice SQL
generato.
33
CREAZIONE delle pagine dinamiche
A questo punto la fase di creazione del database è terminata.
Ora dobbiamo costruire le nostre pagine dinamiche in linguaggio PHP.
Partiamo dal BACK-END ovvero costruiamo le pagine per inserire un nuovo
prodotto o una nuova categoria nel database.
Creiamo in C:\Program Files\EasyPHP1-8\www una cartella di nome infotech e
al suo interno memorizzeremo tutti i file del sito.
Per accedere al sito sarà sufficiente digitare nella barra degli indirizzi:
http://127.0.0.1/infotech/
34
La sezione Amministrativa
Creiamo un file php nominato admin.php
Questa sezione è semplice, l’unica cosa un po’
particolare è che il menu lo includiamo
dinamicamente attraverso l’istruzione php include.
<? include "menu.inc"; ?>
Questo è il contenuto del file menu.inc:
<a class='admin' href='nuovo_prodotto.php'>NUOVO PRODOTTO</a>
<a class='admin' href='nuova_categoria.php'>NUOVA CATEGORIA</a>
<a class='admin' href='index.php'>HOME PAGE</a>
In questo modo possiamo includere il menu in tutte le pagine della sezione amministrazione.
Questo sistema ha il vantaggio di offrire un facile aggiornamento delle voci del menu poiché
35
basta aggiornare un unico file e tutte le pagine di amministrazione si aggiornano di conseguenza.
La sezione Amministrativa
Ecco il listato di codice per creare la pagina admin.php
Notare come il codice PHP si mischi con il codice HTML.
<HTML>
<HEAD>
<TITLE>HOME PAGE - INFOTECH IL TUO NEGOZIO DI INFORMATICA ONLINE</TITLE>
<LINK rel="stylesheet" href='stile.css'>
</HEAD>
<BODY>
<IMG src='img/testata.jpg'>
<H1>INFOTECH IL TUO NEGOZIO DI INFORMATICA ONLINE</H1>
<H2>SEZIONE AMMINISTRATIVA</H2>
<a href='admin.php'><img src='img/area_amministrativa.jpg'></a><br><br>
<p style='width:600px;text-align:justify;font-family:Tahoma,Verdana,Sans-serif;border:1px solid black;'>
Benvenuto nell'area amministrativa di <b>INFOTECH.</b><br><br>
Tramite il <b>menu</b> sottostante avrai la possibilità di aggiornare la tua banca dati
online inserendo <b>nuovi prodotti</b> o <b>nuove categorie</b> compilando le apposite interfacce
web.
</p>
<!-- INCLUDO IL MENU DELLA SEZIONE AMMINISTRATIVA -->
<? include "menu.inc
"; ?>
"menu.inc";
<br><br>
<IMG src='img/pie_di_pagina.jpg'>
</BODY>
</HTML>
36
La pagina di inserimento di una nuova categoria
Creiamo un file php nominato
nuova_categoria.php
La parte più importante di questa pagina è
la maschera di inserimento di un nuova
categoria.
<FORM action='inserisci_categoria.php' method='get'>
<TABLE>
<TR>
<TD class='newp'>Nome Nuova Categoria</TD>
<TD><INPUT type='text' name='nome_categoria
'></TD>
name='nome_categoria'
</TR>
<TR>
<TD><INPUT type='reset' value='AZZERA'>
<TD><INPUT type='submit' value='INSERISCI
CATEGORIA'></TD>
</TR>
</TABLE>
</FORM>
E’ importante impostare l’attributo name del tag INPUT, perché è in base a quel valore che faremo
riferimento al testo digitato all’interno della casella di testo tramite PHP. Prestare attenzione anche al metodo
37
di invio del form, in questo caso è il metodo GET.
GET
Listato pagina nuova_categoria.php
<HTML>
<HEAD>
<TITLE>INSERISCI UNA NUOVA CATEGORIA</TITLE>
<LINK rel="stylesheet" href='stile.css'>
</HEAD>
<BODY>
<IMG src='img/testata.jpg'>
<H1>INFOTECH IL TUO NEGOZIO DI INFORMATICA ONLINE</H1>
<H2>SEZIONE AMMINISTRAZIONE</H2>
<? include "menu.inc" ?>
<H3>INSERISCI UNA NUOVA CATEGORIA</H3>
<FORM action='inserisci_categoria.php' method='get'>
<TABLE>
<TR>
<TD class='newp'>Nome Nuova Categoria</TD>
<TD><INPUT type='text' name='nome_categoria'></TD>
</TR>
<TR>
<TD><INPUT type='reset' value='AZZERA'>
<TD><INPUT type='submit' value='INSERISCI CATEGORIA'></TD>
</TR>
</TABLE>
</FORM>
<br><br>
<IMG src='img/pie_di_pagina.jpg'>
</BODY>
</HTML>
38
La pagina che salva una nuova categoria
Creiamo un file php nominato
inserisci_categoria.php.
Il primo passo di questo script è quello di
leggere il valore digitato nella casella di
testo nominata “nome_categoria” della
pagina nuova_categoria.php
Siccome il form invia i dati attraverso il
metodo GET, per leggerlo si usa l’array
associativo $_GET
<?php
Costruisco la query
SQL che mi permette di
$nome_cat=$_GET["nome_categoria"];
inserire una nuova categoria.
include "database.inc";
$query="INSERT INTO Categorie(Nome) VALUES('$nome_cat')";
mysql_query($query) or die("Query fallita: ".mysql_error());
Eseguo la query.
39
Listato pagina inserisci_categoria.php
<HTML>
<HEAD>
<TITLE>AREA AMMINISTRATIVA - INSERISCI CATEGORIA</TITLE>
<LINK rel="stylesheet" href='stile.css'>
</HEAD>
<BODY>
<IMG src='img/testata.jpg'>
<H1>INFOTECH IL TUO NEGOZIO DI INFORMATICA ONLINE</H1>
<a href='admin.php'><img src='img/area_amministrativa.jpg'></a><br>
<? include "menu.inc" ?>
<?php
$nome_cat=$_GET["nome_categoria"];
include "database.inc";
$query="INSERT INTO Categorie(Nome) VALUES('$nome_cat')";
mysql_query($query) or die("Query fallita: ".mysql_error());
echo "<br><br><strong>INSERIMENTO AVVENUTO CON SUCCESSO</strong><br><br>";
mysql_close($connessione);
?>
<br><br>
<IMG src='img/pie_di_pagina.jpg'>
</BODY>
</HTML>
40
La pagina di inserimento di un nuovo prodotto
Creiamo un file php nominato nuovo_prodotto.php
La parte più importante di questa pagina è la
maschera di inserimento di un nuovo prodotto.
Il menu a tendina categoria è compilato in modo
dinamico leggendo il contenuto della tabella
categorie.
Quindi sarà necessario stabilire una connessione con
il server di database MySql.
Siccome le pagine dinamiche in genere stabiliscono
una connessione con il server di database allora si
crea un file esterno nominato database.inc che
include le istruzioni per collegarsi al server di
database.
<?
/* Stabiliamo la connesione verso il server di Database Mysql */
$connessione= mysql_connect("localhost", "root", "") or die("connessione nn risucita: " . mysql_error());
/** Selezioniamo il database datidb **/
mysql_select_db("infotechdb") or die("Selezione database non avvenuta");
?>
41
La pagina di inserimento di un nuovo prodotto
<?
/* Stabiliamo la connesione verso il server di Database Mysql */
$connessione= mysql_connect("localhost", "root", "") or die("connessione nn risucita: " . mysql_error());
/** Selezioniamo il database datidb **/
mysql_select_db("infotechdb") or die("Selezione database non avvenuta");
?>
Descrizione delle funzioni PHP utilizzate:
mysql_connect stabilice una connessione ad un server MySQL. Il primo parametro indica l’indirizzo
del server, il secondo la username, il terzo la password (in questo caso la password è nulla).
mysql_select_db seleziona un database MySQL. Accetta come parametro il nome del database con
cui si desidera lavorare.
mysql_error Restituisce il testo dell'errore dall'ultima funzione MySQL, oppure '' (la stringa vuota) se
nessun errore intercorre. Gli errori ritornano dal database MySQL senza visualizzare i messaggi di
avvertimento. Si usa invece mysql_error() per recuperare il testo dell'errore.
die equivale alla funzione exit. Interrompe l’esecuzione dello script e stampa il messaggio specificato.
Elenco di tutte le funzioni mysql: http://www.php.net/manual/it/ref.mysql.php
42
La pagina di inserimento di un nuovo prodotto
Le funzioni più importanti di questa fase sono:
mysql_query() invia una query al database selezionato
Solo per le istruzioni SELECT mysql_query() restituisce un
identificativo di risorsa o FALSE se la query non è stata eseguita
correttamente.
Per altri tipi di istruzioni SQL(UPDATE,DELETE,INSERT)
mysql_query() restituisce TRUE in caso di successo e FALSE in caso
di errore.
<SELECT name='categoria_prodotto'>
<!-- I VALORI LI LEGGIAMO DALLA TABELLA CATEGORIE -->
<?
include "database.inc";
$query="SELECT IDCategorie, Nome FROM CATEGORIE";
$risultato=mysql_query($query) or die("Errore nella query" . mysql_error());
while($riga=mysql_fetch_array($risultato,MYSQL_ASSOC)){
echo "<OPTION value=" . $riga['IDCategorie'] . ">" . $riga['Nome'] . "</OPTION>\n";
}
mysql_free_result($risultato);
mysql_close($connessione);
?>
</SELECT>
43
La pagina di inserimento di un nuovo prodotto
mysql_fetch_array: restituisce un array che corrisponde alla riga
caricata o FALSE se non ci sono più righe.
Si utilizza quando si lavora con un’istruzione SQL di tipo SELECT che
puo’ restituire 0, 1 o più righe di una tabella. Questa funzione ci
permette di scorrere riga per riga la tabella.
Il ciclo while continua finché non è diverso da FALSE.
Si potrebbe anche scrivere così:
$riga=mysql_fetch_array($risultato,MYSQL_ASSOC);
while($riga!=FALSE){
echo “……..”;
$riga=mysql_fetch_array($risultato,MYSQL_ASSOC);
}
<SELECT name='categoria_prodotto'>
<!-- I VALORI LI LEGGIAMO DALLA TABELLA CATEGORIE -->
<?
include "database.inc";
$query="SELECT IDCategorie, Nome FROM CATEGORIE";
$risultato=mysql_query($query) or die("Errore nella query" . mysql_error());
while($riga=mysql_fetch_array($risultato,MYSQL_ASSOC)){
echo "<OPTION value=" . $riga['IDCategorie'] . ">" . $riga['Nome'] . "</OPTION>\n";
}
mysql_free_result($risultato);
mysql_close($connessione);
?>
</SELECT>
44
La pagina di inserimento di un nuovo prodotto
mysql_fetch_array è una versione estesa di mysql_fetch_row(). Oltre
a memorizzare i dati del risultato in array con indice numerico, questa li
memorizza anche con indici associativi usando i nomi dei campi come
chiavi.
Il secondo argomento opzionale tipo_risultato in mysql_fetch_array()
è una costante e può assumere i seguenti valori: MYSQL_ASSOC,
MYSQL_NUM e MYSQL_BOTH.
Usando MYSQL_BOTH, si ottiene un array con entrambe gli indici
(associativo e numerico). Usando MYSQL_ASSOC, si ottengono solo
gli indici associativi, usando MYSQL_NUM, si ottengono solo gli indici
numerici
<SELECT name='categoria_prodotto'>
<!-- I VALORI LI LEGGIAMO DALLA TABELLA CATEGORIE -->
<?
include "database.inc";
$query="SELECT IDCategorie, Nome FROM CATEGORIE";
$risultato=mysql_query($query) or die("Errore nella query" . mysql_error());
while($riga=mysql_fetch_array($risultato,MYSQL_ASSOC)){
echo "<OPTION value=" . $riga['IDCategorie'] . ">" . $riga['Nome'] . "</OPTION>\n";
}
mysql_free_result($risultato);
mysql_close($connessione);
?>
</SELECT>
45
La pagina di inserimento di un nuovo prodotto
Notare che come <option value è impostata la chiave primaria della
tabella categoria. Mentre poi viene visualizzata il nome della categoria.
Questo perché il form invia poi il valore della chiave primaria e non il
nome della categoria.
In questo modo nella tabella prodotti si salva la chiave primaria della
tabella categoria e si imposta la relazione tra le due tabelle.
mysql_free_result() libera tutta la memoria associata.
mysql_free_result() deve essere richiamata solo se si è preoccupati
sulla quantità di memoria usata dalle query che restituiscono dei grandi
risultati. Tutta la memoria associata al risultato è automaticamente
liberata al termine dell'esecuzione dello script.
<SELECT name='categoria_prodotto'>
<!-- I VALORI LI LEGGIAMO DALLA TABELLA CATEGORIE -->
<?
include "database.inc";
$query="SELECT IDCategorie, Nome FROM CATEGORIE";
$risultato=mysql_query($query) or die("Errore nella query" . mysql_error());
while($riga=mysql_fetch_array($risultato,MYSQL_ASSOC)){
echo "<OPTION value=" . $riga['IDCategorie'] . ">" . $riga['Nome'] . "</OPTION>\n";
}
mysql_free_result($risultato);
mysql_close($connessione);
?>
</SELECT>
46
Listato pagina nuovo_prodotto.php
<HTML>
<HEAD>
<TITLE>INSERISCI UN NUOVO PRODOTTO</TITLE>
<LINK rel="stylesheet" href='stile.css'>
</HEAD>
<BODY>
<IMG src='img/testata.jpg'>
<H1>INFOTECH IL TUO NEGOZIO DI INFORMATICA ONLINE</H1>
<H2>SEZIONE AMMINISTRAZIONE</H2>
<? include "menu.inc" ?>
<H3>INSERISCI UN NUOVO PRODOTTO</H3>
<!-- CREIAMO IL FORM PER L'INSERIMENTO DEI DATI -->
<FORM action='inserisci_prodotto.php' method='POST'>
<TABLE class='inserimento'>
<!-- SELEZIONIAMO LA CATEGORIA -->
<TR>
<TD class='newp'>Categoria</TD>
47
Listato pagina nuovo_prodotto.php
<TD>
<SELECT name='categoria_prodotto'>
<!-- I VALORI LI LEGGIAMO DALLA TABELLA CATEGORIE -->
<?
include "database.inc";
$query="SELECT IDCategorie, Nome FROM CATEGORIE";
$risultato=mysql_query($query) or die("Errore nella query" . mysql_error());
while($riga=mysql_fetch_array($risultato,MYSQL_ASSOC)){
echo "<OPTION value=" . $riga['IDCategorie'] . ">".$riga['Nome']."</OPTION>\n";
}
mysql_free_result($risultato);
mysql_close($connessione);
?>
</SELECT>
</TD>
</TR>
<TR>
<TD class='newp'>Nome:</TD>
<TD><INPUT type='text' name='nome_prodotto' size='30'></TD>
</TR>
<TR>
<TD class='newp'>DESCRIZIONE:</TD>
<TD><TEXTAREA name='descr_prodotto'></TEXTAREA></TD>
</TR>
<TR>
<TD class='newp'>QTA:</TD>
<TD><INPUT type='text' name='qta_prodotto' size='4'></TD>
</TR>
48
Listato pagina nuovo_prodotto.php
<TR>
<TD class='newp'>PREZZO:</TD>
<TD><INPUT type='text' name='prezzo_prodotto' size='4'></TD>
</TR>
<TR>
<TD class='newp'>FOTO:</TD>
<TD><INPUT type='text' name='foto_prodotto' size='30'></TD>
</TR>
<TR>
<TD class='newp'><INPUT type='reset' VALUE='CANCELLA'></TD>
<TD><INPUT type='submit' VALUE='INSERISCI PRODOTTO'></TD>
</TR>
</TABLE>
</FORM>
<IMG src='img/pie_di_pagina.jpg'>
</BODY>
</HTML>
49
La pagina che salva il prodotto nel database
Il compito principale della pagina
inserisci_prodotto.php è quello di
raccogliere i dati inseriti nel form della
pagina nuovo_prodotto.php e di
memorizzarli all’interno di apposite variabili.
Siccome i dati sono stati inviati con il
metodo POST per leggere i valori si usa
l’array associativo $_POST.
<?php
$nome_prod=$_POST["nome_prodotto"];
$cat_prod=$_POST["categoria_prodotto"];
$descr=$_POST["descr_prodotto"];
$quantita=$_POST["qta_prodotto"];
$prezzo=$_POST["prezzo_prodotto"];
$foto=$_POST["foto_prodotto"];
50
La pagina che salva il prodotto nel database
La fase successiva è quello di stabilire la
connessione al database.
Sicome dobbiamo salvare un nuovo
prodotto nel database creeremo una query
di tipo inserimento e la eseguiremo tramite
la funzione php mysql_query.
include "database.inc";
$query="INSERT INTO Prodotti(Nome,Categoria,Descrizione,Qta,Prezzo,Foto)
VALUES('$nome_prod','$cat_prod','$descr',$quantita,$prezzo,'$foto')";
mysql_query($query) or die("Query fallita: ".mysql_error());
51
Listato pagina inserisci_prodotto.php
<HTML>
<HEAD>
<TITLE>AREA AMMINISTRATIVA - INSERISCI PRODOTTO</TITLE>
<LINK rel="stylesheet" href='stile.css'>
</HEAD>
<BODY>
<IMG src='img/testata.jpg'>
<H1>INFOTECH IL TUO NEGOZIO DI INFORMATICA ONLINE</H1>
<a href='admin.php'><img src='img/area_amministrativa.jpg'></a>
<?php
$nome_prod=$_POST["nome_prodotto"];
$cat_prod=$_POST["categoria_prodotto"];
$descr=$_POST["descr_prodotto"];
$quantita=$_POST["qta_prodotto"];
$prezzo=$_POST["prezzo_prodotto"];
$foto=$_POST["foto_prodotto"];
Questo va tutto su un’unica riga
include "database.inc";
$query="INSERT INTO Prodotti(Nome,Categoria,Descrizione,Qta,Prezzo,Foto)
VALUES('$nome_prod','$cat_prod','$descr',$quantita,$prezzo,'$foto')";
mysql_query($query) or die("Query fallita: ".mysql_error());
echo "<br><br><strong>INSERIMENTO AVVENUTO CON SUCCESSO</strong><br><br>";
mysql_close($connessione);
?>
<br>
<IMG src='img/pie_di_pagina.jpg'>
</BODY>
</HTML>
52
Il catalogo prodotti
Creiamo un file nominato prodotti.php
I prodotti sono suddivisi per categorie, in questo
caso abbiamo 5 categorie(CHIAVETTE, SCHEDE
VIDEO, HARD DISK, PORTATILI, SCHEDE
AUDIO).
Per visualizzare i prodotti che appartengono a una
categoria è necessario cliccare sulla voce
corrispondente nel menu a sinistra.
La cosa più importante di questa pagina è che riceve
sempre un parametro nominato id.
Notare la URL nella barra degli indirizzi:
http://127.0.0.1/infotech/prodotti.php?id=1
?id=1
Il parametro id in questo caso identifica la
categoria.
categoria.
Questo significa che le voci del menu delle categorie a sinistra
sono composte nel modo seguente:
<a href=‘
href=‘prodotti.php?id=1
prodotti.php?id=1’’>CHIAVETTE</a>
<a href=‘
href=‘prodotti.php?id=2
prodotti.php?id=2’’>SCHEDE VIDEO</a>
<a href=‘
href=‘prodotti.php?id=3
prodotti.php?id=3’’>HARD DISK</a>
E così
..
così via……
via……..
Ogni volta che clicchiamo su una categoria,
richiamiamo sempre la pagina prodotti.php e gli
passiamo l’l’id della categoria che desideriamo
visualizzare.
53
Il catalogo prodotti
Come prima cosa componiamo il menu delle
categorie:
Notare come si compone ogni collegamento
ipertestuale.
include "database.inc";
$query_cat="SELECT * FROM Categorie";
$risult_cat=mysql_query($query_cat) or die("Errore nella query" . mysql_error());
while($riga=mysql_fetch_array($risult_cat,MYSQL_ASSOC)){
echo "<A href='prodotti.php?id=" . $riga['IDCategorie'] . "'>" . $riga['Nome'] . "</a> <br>";
}
54
Il catalogo prodotti
Successivamente mostriamo i prodotti che appartengono alla categoria
selezionata.
selezionata.
Quindi come prima cosa dobbiamo leggere il parametro id passato alla
pagina secondo questo formato prodotti.php?id=3
prodotti.php?id=3
E’ facile notare che questo modo di passare i parametri è identico a quello
utilizzato dai form con il metodo GET.
GET.
Di conseguenza nella pagina prodotti.php per sapere qual è la categoria
selezionata useremo un codice simile al seguente:
$categoria_selezionata=$_GET[“
$categoria_selezionata=$_GET[“id”
id”];
Ora costruiamo una query di selezione con un vincolo,
vincolo, cioè
cioè vogliamo
SELEZIONARE tutti i prodotti dalla tabella PRODOTTI DOVE la categoria è
uguale a $categoria_selezionata.
Questo in linguaggio SQL si traduce in un’
un’istruzione come la seguente:
SELECT * FROM Prodotti WHERE Categoria=‘
Categoria=‘$categoria_selezionata’
$categoria_selezionata’
In questo caso l’l’asterisco indica “prendi tutti i campi della tabella”
tabella”.
$categoria_selezionata=$_GET['id'];
$query="SELECT * FROM Prodotti WHERE Categoria=$categoria_selezionata";
$risult_prod=mysql_query($query) or die("Errore nella query" . mysql_error());
55
Il catalogo prodotti
A questo punto non ci resta che impaginare i risultati.
Notare come è inserita la foto del prodotto.
echo "\n\t<td> <img src='foto/" . $riga['FOTO'] . "'></td>";
In questo esempio tutte le immagini dei prodotti sono memorizzati
memorizzati all’
all’interno
della cartella foto presente in C:\
C:\Program Files\
Files\EasyPHP1EasyPHP1-8\www\
www\INFOTECH\
INFOTECH\foto
e sul database si salva solo il nome dell’
dell’immagine. Per farla visionare nella
pagina si utilizza il tag HTML IMG.
IMG.
echo "<table>";
echo "<tr><th>Foto</th><th>Nome</th><th>Descrizione</th><th>Qta</th><th>Prezzo</th></tr>";
while($riga=mysql_fetch_array($risult_prod,MYSQL_ASSOC)){
echo "\n\t<tr>";
echo "\n\t<td> <img src='foto/" . $riga['FOTO'] . "'></td>";
echo "\n\t<td>". $riga['NOME'] . "</td>";
echo "\n\t<td width=200px> " . $riga['DESCRIZIONE'] . "</td>";
echo "\n\t<td> " . $riga['QTA'] . "</td>";
echo "\n\t<td align='right'><b><span style='color:red'>" . $riga['PREZZO'] . "&euro;</span></b></td>";
echo "</tr>";
}
echo "</table>";
56
Listato pagina prodotti.php
Nota per testare questa pagina è necessario richiamarla nel modo seguente:
http://localhost/infotechdb/prodotti.php?id=1
<HTML>
<HEAD>
<TITLE>HOME PAGE - INFOTECH IL TUO NEGOZIO DI INFORMATICA ONLINE</TITLE>
<LINK rel="stylesheet" href='stile.css'>
</HEAD>
<BODY>
<IMG src='img/testata.jpg'>
<H1>INFOTECH IL TUO NEGOZIO DI INFORMATICA ONLINE</H1>
<a href='admin.php'><img src='img/area_amministrativa.jpg'></a>
<H2>ELENCO PRODOTTI</H2>
<table>
<tr>
<td valign='top' width=150 class='categorie'>
<?
include "database.inc";
$query_cat="SELECT * FROM Categorie";
$risult_cat=mysql_query($query_cat) or die("Errore nella query" . mysql_error());
while($riga=mysql_fetch_array($risult_cat,MYSQL_ASSOC)){
echo "<A href='prodotti.php?id=" . $riga['IDCategorie'] . "'>" . $riga['Nome'] . "</a> <br>";
}
echo "</td><td valign='top'>";
$categoria_selezionata=$_GET['id'];
$query="SELECT * FROM Prodotti WHERE Categoria=$categoria_selezionata";
$risult_prod=mysql_query($query) or die("Errore nella query" . mysql_error());
57
Listato pagina prodotti.php
echo "<table>";
echo "<tr><th>Foto</th><th>Nome</th><th>Descrizione</th><th>Qta</th><th>Prezzo</th></tr>";
while($riga=mysql_fetch_array($risult_prod,MYSQL_ASSOC)){
echo "\n\t<tr>";
echo "\n\t<td> <img src='foto/" . $riga['FOTO'] . "'></td>";
echo "\n\t<td>". $riga['NOME'] . "</td>";
echo "\n\t<td width=200px> " . $riga['DESCRIZIONE'] . "</td>";
echo "\n\t<td> " . $riga['QTA'] . "</td>";
echo "\n\t<td align='right'><b><span style='color:red'>" . $riga['PREZZO'] . "&euro;</span></b></td>";
echo "</tr>";
}
echo "</table>";
mysql_free_result($risult_cat);
mysql_free_result($risult_prod);
?>
</td>
</tr>
</table>
<IMG src='img/pie_di_pagina.jpg'>
</BODY>
</HTML>
58
La pagina index.php
Questa pagina è semplice, l’unica cosa importante è che il collegamento CONSULTA IL
CATALOGO punta al file prodotti.php.
Ma abbiamo visto nelle slide precedenti che bisogna passare un parametro a questa pagina,
quindi il link dovrà essere composto nel modo seguente:
<a href=‘prodotti.php?id=1’>CONSULTA IL CATALOGO</a>
59
Listato pagina index.php
<HTML>
<HEAD>
<TITLE>HOME PAGE - INFOTECH IL TUO NEGOZIO DI INFORMATICA ONLINE</TITLE>
<LINK rel="stylesheet" href='stile.css'>
</HEAD>
<BODY>
<IMG src='img/testata.jpg'>
<H1>INFOTECH IL TUO NEGOZIO DI INFORMATICA ONLINE</H1>
<a href='admin.php'><img src='img/area_amministrativa.jpg'></a>
<H2>PAGINA DI PRESENTAZIONE</H2>
<p style='width:700px;align:justidy;font-family:Tahoma,Verdana,Sans-Serif'>
Benvenuti nel sito dell'azienda INFOTECH. Qui troverai prodotti di informatica di ultima generazione
a prezzi imbattibili. Siamo i primi in Italia e trattiamo i nostri prodotti anche con l'estero.
Consulta il nostro catalogo online cliccando sulla voce sottostante:
</p>
<a href='prodotti.php?id=1'>CONSULTA IL CATALOGO</a>
<br><br>
<IMG src='img/pie_di_pagina.jpg'>
</BODY>
</HTML>
60
Il file stile.css
/* CSS Document */
h1{
width:800px;
font-family:Tahoma,Verdana,Sans-serif;
font-size:16px;
background-color:#FFFF99;
}
h2{
width:800px;
font-family:Tahoma,Verdana,Sans-serif;
font-size:14px;
background-color:#FFFF99;
}
h3{
width:800px;
font-family:Tahoma,Verdana,Sans-serif;
font-size:12px;
background-color:#FFFF99;
}
table{
font-family:Tahoma,Verdana,Sans-serif;
font-size:12px;
}
td.newp{
background:#CCCCCC;
font-weight:bold;
}
61
Il file stile.css
td.categorie{
color:#FFFFFF;
background-color:#9CAB10;
}
td.categorie a{
color:#FFFFFF;
padding-left:5px;
}
62