IPB     Il futuro di Tevac dipende da te!  

Benvenuto Visitatore ( Log In | Registrati )

9 Pagine V   1 2 3 > »    · · · · · · · · · · · ·
Reply to this topicStart new topic
> [TUTORIAL][PHP] Creare un catalogo
azael
messaggio 17 Nov 2004, 14:53
Messaggio #1


Level 8/11
********

Gruppo: Forum User
Messaggi: 3.123
Iscritto il: 2-February 04
Da: Bergamo
Utente Nr.: 1.423



Cominciamo da buon non programmatori (come sono io! icon_redface.gif ) con al progettazione di quello che vogliamo.

Diciamo che ci serve un catalogo che presenti tutti i nostri prodotti, ogni prodotto deve avere una scheda propria specifica che contiene varie informazioni specifiche e che, cosa meno ovvia, ci serve un backend, cioe' una pagina web dove inserire le informazioni dei nostri oggetti.
Diciamo quindi che ci sono sostanzialmente tre casi d'uso:
- catalogo
- scheda singola
- inserimento prodotto

Non andiamo nello specifico con l'analisi/progettazione: questo e' un tutorial base; successivamente potremo aggiungere tutto quello che ci serve.

Altro aspetto che dobbiamo definire prima e' la progettazione del database. Dalla lettura dei casi d'uso (e che lettura, direi! icon_wink.gif ) diciamo che l'unico oggetto che viene manipolato e' questo oggetto generico del catalogo; eventualmente si potrebbe considerare anche l'oggetto catalogo, ma per semplificare le cose consideriamo un catalogo unico (aggiungeremo poi questa opzione). Evidentemente stiamo anche omettendo una serie di informazioni aggiuntive quali: progettazione di un framework, ecc... cose che esulano sempre dal tutorial per via della complessita' della trattazione.

Diciamo che il nostro catalogo riguarda "oggetti" generici, quindi la descrizione di questi oggetti puo' essere effettuata attraverso le seguenti caratteristiche:
- nome
- descrizione
- figura
- note (ce le metto sempre che non si sa mai)
ovviamente ogni oggetto deve avere un codice identificativo univoco che chiameremo id (come tradizione vuole).

Attarverso lo strumento che preferiamo (ottimo e' phpMyAdmin) creiamo quindi un database per questo nostro tutorial e lo chiamiamo "tutorial_catalogo".
All'interno creiamo una tabella che chiameremo "oggetto", caratterizzata da 5 campi:
id : INTERO (sara' un numero), AUTO INCREMENT (significa che il server si occupa di assegnare agli oggetti inseriti un valore crescente senza che dobbiamo pensarci noi) e' ovviamente la chiave primaria della tabella.
nome: VARCHAR di lunghezza 64 (scelta arbitraria mia, mi sembra sufficiente) non NULL (cioe' deve essere imputato non puo' essere vuoto)
descrizione: TEXT con valore di default a NULL (significa che a catalogo possiamo avere oggetti non descritti)
figura: VARCHAR 128 e' il nome del file che rappresenta l'oggetto, e' NULLabile in quanto un oggetto potrebbe non avere fotografie associate.
note: TEXT NULLabile.

Questo e' il primo passo, il prossimo sara' cominciare a scrivere codice PHP.

Domande, problemi, chiarimenti?

Ciao,

Roberto


--------------------
Azael's New: ho aperto il mio blog ... visitatelo!!!
Supporta Tevac
Go to the top of the page
 
+Quote Post
dergolem
messaggio 17 Nov 2004, 15:24
Messaggio #2


Michele
******

Gruppo: Forum User +
Messaggi: 1.027
Iscritto il: 28-November 03
Da: Brescia
Utente Nr.: 1.043



Innanzitutto grazie per aver accolto così presto la mia richiesta icon_smile.gif, se stasera ho tempo provo subito a impostare da phpMyAdmin, grazie!


--------------------
Go to the top of the page
 
+Quote Post
Lord_Lele
messaggio 17 Nov 2004, 16:52
Messaggio #3


Game Master
******

Gruppo: Team Moderatori
Messaggi: 1.311
Iscritto il: 8-December 03
Da: Pontegradella (Barbecue-Bridge) - Ferrara
Utente Nr.: 1.103



Et Voilà, mi permetto di intervenire, postandovi il codice SQL per generare la tabella così ben descritta da Azael... icon_biggrin.gif

CODICE
CREATE TABLE oggetto (
  id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT ,
  nome VARCHAR(64) NOT NULL ,
  descrizione TEXT DEFAULT NULL ,
  figura VARCHAR(128) DEFAULT NULL ,
  note TEXT DEFAULT NULL,
  PRIMARY KEY (id)
);


Il codice l'ho provato e funziona bene, se vi da errori di sintassi SQL icon_eek.gif informatemi subito !!! icon_biggrin.gif


--------------------
Emanuele
In nome del Senato Galattico della Repubblica, vi dichiaro in arresto, Cancelliere! (Mace Windu, Maestro Jedi)
Supporta Tevac
Go to the top of the page
 
+Quote Post
dergolem
messaggio 17 Nov 2004, 19:37
Messaggio #4


Michele
******

Gruppo: Forum User +
Messaggi: 1.027
Iscritto il: 28-November 03
Da: Brescia
Utente Nr.: 1.043



CITAZIONE(azael)
nome: VARCHAR di lunghezza 64 (scelta arbitraria mia, mi sembra sufficiente) non NULL (cioe' deve essere imputato non puo' essere vuoto)

Se lo imposto not NULL ho un errore:
#1067 - Invalid default value for 'nome'

Devo impostarlo NULL.

Per il resto tutto chiaro icon_smile.gif


--------------------
Go to the top of the page
 
+Quote Post
dergolem
messaggio 17 Nov 2004, 19:50
Messaggio #5


Michele
******

Gruppo: Forum User +
Messaggi: 1.027
Iscritto il: 28-November 03
Da: Brescia
Utente Nr.: 1.043



CITAZIONE(Lord_Lele)
Et Voilà, mi permetto di intervenire, postandovi il codice SQL per generare la tabella

Cioè? E' possibile creare la tabella tramite terminal di Mac OS X senza phpMyAdmin? Scusate la domanda se è troppo banale icon_confused.gif


--------------------
Go to the top of the page
 
+Quote Post
djzero00
messaggio 17 Nov 2004, 20:19
Messaggio #6


Level 4/11
****

Gruppo: Forum User +
Messaggi: 400
Iscritto il: 14-November 03
Da: Treviso
Utente Nr.: 936



CITAZIONE(dergolem)
Cioè? E' possibile creare la tabella tramite terminal di Mac OS X senza phpMyAdmin? Scusate la domanda se è troppo banale icon_confused.gif


Ma ceeeeerto! MySQL nasce come strumento a linea di comando (o meglio, la sua parte client). Qualcuno però, lamentandosi del fatto che la linea di comando non gli piaceva, ha sviluppato interfacce grafiche, a terminale evoluto, ed anche php. PhpMyAdmin è una di queste, ed è veramente comoda.
Ma sono sicuro che ce ne sono altre...


--------------------
Arrivederci e grazie per tutto il pesce
Macocoa, Megaphone, Flickr, Anobii
Go to the top of the page
 
+Quote Post
azael
messaggio 18 Nov 2004, 00:52
Messaggio #7


Level 8/11
********

Gruppo: Forum User
Messaggi: 3.123
Iscritto il: 2-February 04
Da: Bergamo
Utente Nr.: 1.423



Allora, facciamo un po' di chiarezza.

L'SQL e' un linguaggio che serve per dialogare con un server SQL (MySQL, Oracle... tutti insomma).
Come tale basta che venga "dato in pasto" al server perche' questo ritorni dei risultati. Ma come si puo' interagire con un server SQL?
In mille modi diversi, ma diciamo che i tre principali sono:
- linea di comando della shell
- consolle
- interfacce grafiche

Il primo e' sostanzialmente il terminale: scrivi una query e la giri al comando opportuno; io quanod facevo elaborazioni pesanti di dati avevo uno script che mi creava in automatico dinamicamente le query necessarie, le metteva in un file, poi leggeva il file e, una riga/query alla volta le sparava a mysql.
La consolle e' sempre a riga di comando ma si usa "dall'interno". Per attivarla basta andare al terminale e scrivere:
CODICE
/usr/local/mysql/bin/mysql

o solo mysql se il path comprende la strada per arrivare a MySQL (per la cronaca per uscire basta scrivere quit).
Il terzo metodo e' il piu' semplice perche' prevede di usare interfacce grafiche che semplificano la vita, ma non crediate, molte funzioni derivano alla fine dalle implementazioni dei comandi a linea... icon_wink.gif

Se prendiamo in considerazione phpMyAdmin (in assoluto l'interfaccia piu' diffusa) si puo' notare che cmq e' possibile anche scrivere ed immettere query attraverso questo strumento:
1. apriamo phpMyAdmin
2. selezionamo il database che ci interessa
3. scegliamo la linguetta "SQL"
4. scriviamo la query e diamo invio

Per creare la tabella che ha riportato Lele (grazie mille dell'aiuto, ogni tuo intervento e' come sempre gradito!!! icon_smile.gif ) basta quindi riscrivere il suo codice nella finestrella SQL.
ATTENZIONE: il copia ed incolla e' utilissimo, ma porta spesso a casini inenarrabili per via di caratteri invisibili rompiscatole, quindi il consiglio e': ricopiate (ed intanto cercate di capire cosa state copiando! icon_wink.gif ).

Forza e coraggio...

Ciao,

Roberto

P.S.: ringrazio anche Livio per il suo intervento e ne approfitto per fargli i complimenti (che non ero mai riuscito a fare) per il suo progetto MaCocoa (che seguo senza riuscire a trovare il tempo per mettere poi nulla in pratica icon_sad.gif ).


--------------------
Azael's New: ho aperto il mio blog ... visitatelo!!!
Supporta Tevac
Go to the top of the page
 
+Quote Post
Maurizio
messaggio 18 Nov 2004, 08:06
Messaggio #8


Level 4/11
****

Gruppo: Forum User +
Messaggi: 329
Iscritto il: 13-December 03
Utente Nr.: 1.124



BENE!!
Forza Azael e Lord, ci sono anch'io.
Se passate dalle mie parti pizza e birra a volontà icon_biggrin.gif


--------------------
"Meglio stare zitti dando l'impressione di essere stupidi, che parlare togliendo ogni dubbio" (Confucio)
Go to the top of the page
 
+Quote Post
Lord_Lele
messaggio 18 Nov 2004, 08:43
Messaggio #9


Game Master
******

Gruppo: Team Moderatori
Messaggi: 1.311
Iscritto il: 8-December 03
Da: Pontegradella (Barbecue-Bridge) - Ferrara
Utente Nr.: 1.103



CITAZIONE(azael)
3. scegliamo la linguetta "SQL"
4. scriviamo la query e diamo invio


5. NON FUNZIONA !!! eheheheh...

Questo perchè la casella per inserire la query SQL è una textarea e l'invio va a capo di una riga... icon_biggrin.gif icon_biggrin.gif icon_biggrin.gif

Piccola banalità assolutamente triviale... l'ho scritta perchè mi è appena successa !!! icon_eek.gif


--------------------
Emanuele
In nome del Senato Galattico della Repubblica, vi dichiaro in arresto, Cancelliere! (Mace Windu, Maestro Jedi)
Supporta Tevac
Go to the top of the page
 
+Quote Post
azael
messaggio 18 Nov 2004, 10:05
Messaggio #10


Level 8/11
********

Gruppo: Forum User
Messaggi: 3.123
Iscritto il: 2-February 04
Da: Bergamo
Utente Nr.: 1.423



Ops, scusate!!! icon_redface.gif

Le query andrebbero scritte su una riga sola (mentre quando le scrivete all'interno delle virgolette in php potete anche andare a capo). icon_cool.gif

Ciao,

Roberto


--------------------
Azael's New: ho aperto il mio blog ... visitatelo!!!
Supporta Tevac
Go to the top of the page
 
+Quote Post
Maurizio
messaggio 18 Nov 2004, 11:39
Messaggio #11


Level 4/11
****

Gruppo: Forum User +
Messaggi: 329
Iscritto il: 13-December 03
Utente Nr.: 1.124



ma non andiamo + avanti con il Tutorial? icon_rolleyes.gif icon_redface.gif icon_lol.gif


--------------------
"Meglio stare zitti dando l'impressione di essere stupidi, che parlare togliendo ogni dubbio" (Confucio)
Go to the top of the page
 
+Quote Post
Lord_Lele
messaggio 18 Nov 2004, 11:47
Messaggio #12


Game Master
******

Gruppo: Team Moderatori
Messaggi: 1.311
Iscritto il: 8-December 03
Da: Pontegradella (Barbecue-Bridge) - Ferrara
Utente Nr.: 1.103



No. Basta.

icon_biggrin.gif icon_biggrin.gif icon_biggrin.gif SCHERZO !

Sono piuttosto impegnato in questi giorni e riesco a partecipare solo nei piccoli ritagli di tempo... quando posso, metto su qualcosa.


--------------------
Emanuele
In nome del Senato Galattico della Repubblica, vi dichiaro in arresto, Cancelliere! (Mace Windu, Maestro Jedi)
Supporta Tevac
Go to the top of the page
 
+Quote Post
azael
messaggio 18 Nov 2004, 12:13
Messaggio #13


Level 8/11
********

Gruppo: Forum User
Messaggi: 3.123
Iscritto il: 2-February 04
Da: Bergamo
Utente Nr.: 1.423



Ok, ok, quanta impazienza!!! icon_eek.gif icon_lol.gif

Allora, partiamo definendo meglio i casi d'uso: in effetti possiamo pensare, razionalizzando, che l'inserimento e la visualizzazione di una scheda non sono che due operazioni afferenti allo stesso caso d'uso generale, quello di gestione (in generale) dell'oggetto.
Diciamo quindi che il nostro sistema potrebbe basarsi su due variabili generali:
- dove: rappresenta in quale sezione del nostro programma siamo (gestione catalogo, gestione oggetto, ecc...)
- cosa: definisce l'azione che stiamo andando a fare sull'oggetto

Quindi riassumento abbiamo una situazione del genere:
DOVE COSA
catalogo visualizzazione
oggetto visualizzazione
oggetto inserimento

Quindi il nostro software dovra' essere in grado di gestire queste variabili.
Il dove lo chiameremo where, il cosa lo chiameremo action.
La pagina php chiamata sara' sempre la stessa e sara' lei a richiamare la sezione di codice che ci serve; il come verra' operata questa "selezione" ci interessa poco ora e lo decideremo successivamente.

Cominciamo con la parte piu' noiosa: l'inserimento di nuovi oggetti.

Buttiamo giu' il codice che visualizza il form di inserimento dell'oggetto:

HTML
<html>
<head>
</head>
<body>
<form action="index.php?where=object&action=insert" method="post">
<div class="form">
Nome: <input type="text" name="nome" /><br />
Descrizione: <textarea wrap="virtual" rows="5" cols="40" name="note" ></textarea><br />
Figura: <input type="text" name="figura" /><br />
Note: <textarea wrap="virtual" rows="5" cols="40" name="note" ></textarea><br />
<input type="submit" value="Inserisci" /><br />
</div>
</form>
</body>
</html>


icon_eek.gif icon_eek.gif E il php dove sta??? In effetti e' semplicissimo notare che per questa pagina non c'e' bisogno di alcun che' di dinamico.

Uno spirito attento potrebbe pero' notare che le parti:
HTML
<html>
<head>
</head>
<body>

e
HTML
</body>
</html>


sono comune a tutte le pagine che andremo a realizzare... icon_twisted.gif

Possiamo quindi scrivere due funzioncine che fanno questo lavoro e che richiamero ogni volta:

CODICE
function makeHead() {
    ?>
    <html>
    <head>
    </head>
    <body>
    <?
}

function makeTail() {
    ?>
    </body>
    </html>
    <?
}

Sembra una stupidata ma ci permette di scoprire due cose sul php:
- come si creano le funzioni: basta scrivere function e farlo seguire dal nome che si vuole dare alla funzione stessa; il nome deve essere seguito da parentesi all'interno delle quali vanno specificati gli eventuali parametri che la funzione accetta in entrata (per ora soprassediamo su questo aspetto). La funzione e' poi delimitata dalle parentesi graffe.
- se si deve "stampare a video" grosse quantita' di codice html sempre uguale, il modo migliore e piu' veloce e' quello di chiudere i tag PHP! Cosa significa? Semplice: il browser chiede ad Apache una certa pagina, Apache la prende e, prima di inviarla, la passa al parser php; questo cosa fa? Esegue il codice (che banalita' o detto??? icon_wink.gif )! Arrivato alla funzione makeHead (quando essa viene chiamata) il parser entra ad eseguire la funzione ma quello che vede e' un chiusura del tag php... quindi cosa fa? Ignora quello che c'e' li' in mezzo, stampandolo tale e quale. Poi nota che il tag php e' riaperto e quindi ricomincia a eseguire il codice e trova la fine della funzione, chiudendola. Torna a questo punto dove la funzione e' stata chiamata.

Il codice della nostra pagina php quindi sara':

CODICE
<?php

makeHead();
?>
<form action="index.php?where=object&action=insert" method="post">
<div class="form">
Nome: <input type="text" name="nome" /><br />
Descrizione: <textarea wrap="virtual" rows="5" cols="40" name="note" ></textarea><br />
Figura: <input type="text" name="figura" /><br />
Note: <textarea wrap="virtual" rows="5" cols="40" name="note" ></textarea><br />
<input type="submit" value="Inserisci" /><br />
</div>
</form>
<?
makeTail();

function makeHead() {
    ?>
    <html>
    <head>
    </head>
    <body>
    <?
}

function makeTail() {
    ?>
    </body>
    </html>
    <?
}

?>


Ora, la cosa e' parecchio confusa nella vostra testa, lo sento... quindi sotto con le domande!

Ciao,

Roberto


--------------------
Azael's New: ho aperto il mio blog ... visitatelo!!!
Supporta Tevac
Go to the top of the page
 
+Quote Post
azael
messaggio 18 Nov 2004, 13:21
Messaggio #14


Level 8/11
********

Gruppo: Forum User
Messaggi: 3.123
Iscritto il: 2-February 04
Da: Bergamo
Utente Nr.: 1.423



Tornando a bomba (e a stomaco pieno).

Provate a scrivere quello che ho messo nell'ultima parte dle post i un file chiamato index.php
Mettete il file della cartella /Library/WebApplication/Documents (vado a memoria, correggetemi se sbaglio)

quindi da browser aprite l'indirizzo:

http://127.0.0.1/index.php

Dovreste vedere il form di inserimento dei dati.
Guardate il codice html creato per capire al meglio come funzionano le funzioni e le loro chiamate.

Quando ci siamo fatemi sapere che procediamo al prossimo passo.

Ciao,

Roberto


--------------------
Azael's New: ho aperto il mio blog ... visitatelo!!!
Supporta Tevac
Go to the top of the page
 
+Quote Post
Maurizio
messaggio 18 Nov 2004, 13:37
Messaggio #15


Level 4/11
****

Gruppo: Forum User +
Messaggi: 329
Iscritto il: 13-December 03
Utente Nr.: 1.124



beh, la prima cosa che mi viene da chiederti e di capire meglio questo
CITAZIONE
<form action="index.php?where=object&action=insert" method="post">


--------------------
"Meglio stare zitti dando l'impressione di essere stupidi, che parlare togliendo ogni dubbio" (Confucio)
Go to the top of the page
 
+Quote Post
Lord_Lele
messaggio 18 Nov 2004, 13:54
Messaggio #16


Game Master
******

Gruppo: Team Moderatori
Messaggi: 1.311
Iscritto il: 8-December 03
Da: Pontegradella (Barbecue-Bridge) - Ferrara
Utente Nr.: 1.103



La Form (perchè mi dicono che sia femminile) invierà i dati, in modalità POST, alla pagina index.php.
Inoltre, sempre alla pagina index.php, saranno passati in modalità GET i parametri where ed action.

Poi vedremo come si recuperano questi dati, per ora sappi che vengono inviati alla pagina in questione.

Piccola Nota: la cartella è /Library/WebServer/Documents


--------------------
Emanuele
In nome del Senato Galattico della Repubblica, vi dichiaro in arresto, Cancelliere! (Mace Windu, Maestro Jedi)
Supporta Tevac
Go to the top of the page
 
+Quote Post
azael
messaggio 18 Nov 2004, 14:23
Messaggio #17


Level 8/11
********

Gruppo: Forum User
Messaggi: 3.123
Iscritto il: 2-February 04
Da: Bergamo
Utente Nr.: 1.423