SlideShare ist ein Scribd-Unternehmen logo
1 von 55
Downloaden Sie, um offline zu lesen
Php – MySQL - CMS
Ugo Rinaldi - 2010-2013
ugo.rinaldi@gmail.com
PHP – Hypertext Preprocessor

Motore di scripting (eseguiti sul server)

Sintassi “C-like”

Piattaforme diverse

Linguaggio potente, ricco di funzioni

Connessione a database

Modulo del Web Server

...modulo CGI
A cosa vogliamo arrivare

Php

Mysql

Php + Mysql >>> Applicazioni web dinamiche
Pagine statiche

Html = pagine statiche

Javascript migliora molto la dinamicità client

Necessario aggiornare contenuti e dati
Web Server

Una applicazione server: Apache, IIS, ...

Riceve richieste client

Interagisce con altre applicazioni server

Determina ed invia al client risposta con dati e/o
codice HTML
Cosa serve

Xampp:

Download

Installazione

Prova

Editor di testo

Browser
Iniziamo con Php
Il tag per inserire codice php:
<?php … ?>
Per scrivere nella pagina:
echo “Hello World!”
Print(“......”)
Nomi variabili:
$a, $b, $importo
Costanti
define("COSTANTE", "Ciao mondo.");
I cicli
while($i>0) { echo “i vale $i”; }
do {
echo "$i <br />n";
$i++;
} while ($i < 10);
for ($i=-5; $i < 5; $i++) { echo "$i <br />n"; }
Variabili Stringa
$s=”Linkin Park”;
print(“stringa = $s”);
for ($i=0; $i<strlen($s); $i++) {
print($s{$i}.“<br>”);
}
Caratteri speciali tra apici
' singolo apice
” doppio apice
 backslash
r ritorno a capo
n nuova linea
t tabulazione orizzontale
Da usare dentro una stringa tra singoli o doppi apici
esempio: “Marta disse: ”Firenze lo sa”nr”
Operatori
Operatori aritmetici
+ - * / % ++–
Operatori di assegnamento
+= -= *= /= %= &=
Operatori relazionali
== === < <=> >=!= !==
Operatori logici
&& AND || OR XOR !
$a%=$b equivale a $a=$a%$b
Flusso di controllo
if ($saldo==0) {
…;
} else {
...;
}
if ... elseif … else ...
switch e break
Switch ($scelta) {
case “+” : $r=$a+$b;
break;
case “-” : $r=$a-$b;
break;
case “*” : $r=$a*$b;
break;
case “/” : $r=$a/$b;
break;
default: echo “operatore errato!”;
}
foreach
Ciclo su tutti gli elementi di un array
$a=array(“ieri”,”oggi”,”domani”,”dopodomani”);
foreach($a as $ele) {
print(“$ele <br>”);
}
break – continue - exit
break :
Permette l'uscita da qualsiasi ciclo
continue :
Salta all'inizio del ciclo per l'iterazione successiva
exit :
Interrompe completamente l'esecuzione dello script
try … catch (MyException $e) ...
try {
// istruzione che puo' causare errore
} catch (Exception $e) {
// istruzioni in caso di errore
}
Funzioni
Per dichiarare la funzione
function somma($a, $b) {
$c=$a+$b;
return $c;
}
per richiamarla
$somma=somma($val1,$val2);
Oppure anche
print(“la somma e' : “.somma($val1,$val2).”<br>”);
Visibilità Variabili
Sono LOCALI le variabili dichiarate in una funzione
global nomevariabile
attiva l'uso di una variabile definita esternamente
static $contatore=0
Dichiara una variabile locale assegnando un valore non
reinizializzato nelle successive esecuzioni
Parametri di una funzione utente
Passati per valore es: function swap($a,$b) {…}
O per riferimento es: function swap(&$a,&$b) {…}
Valore di default es: function swap($a,$b=0) {…}
Funzioni con numero variabile di argomenti:
...func_num_args() e func_get_arg($i)
...esempio fattoriale e funzioni dinamiche
Array
Dichiarazioni di array:
$contatti [];
$nomi[0]=”Marcincus”;
$cd[]=”Metallica”;
$squadre[“campioni”]=”Inter”;
$vocali=array(“a”,”e”,”i”,”o”,”u”);
...esempio array
Array associativi

Fondamentali in PHP

Non usano numeri per puntare agli elementi

Usano stringhe
$clienti[“nome”]=”Rossi Mario”;
$clienti[“provincia”]=”Catania”;
$clienti[“telefono”]=”095-454545”;
$cd=array(“Autore”=>”Springsteen”,
“Titolo”=>”The River”,
“Anno”=>1980);
Variabili predefinite Php

$_GET

$_POST

$GLOBALS

$_SERVER

…

...

$_SESSION
Le Sessioni
La sessione è il modo più semplice per seguire un utente dal
momento in cui si collega a quando interrompe il collegamento
internet.
Il server apre una sessione con la funzione session_start() e gli
assegna un nome univoco.
Le variabili di sessione sono memorizzate in un array globale di
nome $_SESSION[]
Deposita un cookie nella macchina dell'utente e ogni volta che ne
ha bisogno, ne estrae i dati per risalire alla sessione e al file
salvato.
Iniziare la sessione con session_start() prima di ogni altro output
dal server. NESSUNA funzione di uscita deve precederla,
neppure il codice HTML!!
Session: funzioni e codici
session_start(); // apre una sessione
$_SESSION['nomevariabile']; //crea l'array globale che
contiene tutte le variabili di sesssione.
session_unset(); //distrugge le variabili sessione.
session_destroy(); //distrugge una sessione
session_set_cookie_params(); //imposta i secondi di inattività
oltre i quali la sessione è cancellata
Session: un esempio
<?php
session_start();
//Recupero username e password dal form e li salvo
$username = $_POST['user'];
$password = $_POST['pass'];
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
$_SESSION['views']=1;
?>
<html>...
<body>...
Session: l'esempio in una pagina successiva
<?php
session_start();
If (isset($_SESSION['views']))
$_SESSION['views']=$_SESSION['views']+1;
else
$_SESSION['views']=1;
echo "Views=". $_SESSION['views'];
?>
I file di testo

Caratteri visualizzabili (testo)

Accesso sequenziale

Ogni riga finisce con il carattere di ritorno a capo
'n'
Scrittura di un file
if (!$p_file = fopen("miofile2.txt","w")) {
echo "Errore: non posso aprire il file miofile2.txt";
exit;
}
flock($p_file,LOCK_EX);
fputs($p_file,"Pippon");
fputs($p_file,"Pluton");
fputs($p_file,"Paperinon");
flock($p_file,LOCK_UN);
fclose($p_file);
Lettura di un file
if (!$p_file = fopen("miofile3.txt","r")) {
echo "Spiacente, non posso aprire il file";
} else {
while(!feof($p_file)) {
$linea = fgets($p_file, 255);
echo "$linea<BR>";
}
fclose($p_file);
}
Lettura e scrittura
$p_file = fopen("rubrica2.csv","r");
$p_file_out = fopen("miofile3.txt","w");
If (!$p_file || !$p_file_out) {
echo "Spiacente, non posso aprire uno dei file";
} else {
flock($p_file_out,LOCK_EX);
while(!feof($p_file)) {
$linea = fgets($p_file, 255);
$linea=str_replace ( ",","n",$linea );
fputs($p_file_out,$linea);
}
fclose($p_file); flock($p_file_out,LOCK_UN);
fclose($p_file_out);
}
Invio dati da un form
<form action=”http://127.0.0.1/mobile/registra.php” method=”post”>
Nominativo: <input type=”text” name=”nome”>
Email: <input type=”text” name=”email”>
Citt&agrave: <input type=”text” name=”citta”>
<input type=”submit” value=”Invia”>
</form>
Ricezione dati
Il server riceverà i valori inviati dal form in un
vettore di sistema chiamato $_REQUEST
$a=$_REQUEST[nome];
$b=$_REQUEST[email];
$c=$_REQUEST[citta];
Esercizio - Client
Creare un form per
la selezione di una categoria di fornitori da una list
box
Generare 2 numeri interi compresi tra 1 e 100
(longitudine e latitudine)
Inserimento/modifica dei numeri generati
Inserimento dell'email utente
Invio delle 4 informazioni a ricerca.php
Esercizio - Server
Leggere un file di testo “fornitori.txt”
Per i soli record con categoria uguale a quella
selezionata dal Client calcolare la distanza minima
tra le coordinante client e quelle del fornitore
Visualizzare i dati del fornitore piu' vicino alla
posizione del client
MySQL
Potente database SQL
Utilizzato nella maggioranza dei siti dinamici sul web
Download dell'ultima versione dal sito Oracle
oppure download XAMPP
Perfettamente integrabile con Apache e Php
Panoramica Sql

Select - usata per interrogare 1 o più righe

Insert - usata nei nuovi inserimenti di riga

Update - usata per modificare 1 o più righe

Delete - usata per eliminare 1 o più righe
Interrogazione di un DB

$cs=mysql_connect(“localhost”, “pippo”, “miapassword”)
si connette al server

mysql_select_db(“rubrica”, $cs)
apre il database

mysql_close($cs);
chiude la connessione

$recSet=mysql_query("select * from rubrica", $cs);
esegue la query

$line=mysql_fetch_assoc($recSet)
copia il record puntato in un array associativo

mysql_free_result($recSet);
libera la memoria dal record set
Inserimento nuova riga in un DB

$cs=mysql_connect(“localhost”, “pippo”, “miapassword”)
si connette al server

mysql_select_db(“rubrica”, $cs)
apre il database

mysql_close($cs);
chiude la connessione

$recSet=
mysql_query("insert into tabella (campo1, …) values (val1,...)", $cs);
Modifica di una riga in un DB

$cs=mysql_connect(“localhost”, “pippo”, “miapassword”)
si connette al server

mysql_select_db(“rubrica”, $cs)
apre il database

mysql_close($cs);
chiude la connessione

$recSet=
mysql_query("update tabella set campo1=xxx, campo2=yyy...", $cs);
Elimina una riga in un DB

$cs=mysql_connect(“localhost”, “pippo”, “miapassword”)
si connette al server

mysql_select_db(“rubrica”, $cs)
apre il database

mysql_close($cs);
chiude la connessione

$recSet=
mysql_query("update tabella set campo1=xxx, campo2=yyy...", $cs);
Troppo difficile
HTML, Php, MySQL (Java, Tomcat, …)
TROPPO DIFFICILE
...e allora
CMS
Content Management System!

Sito dinamico

Applicazione lato server

No programmazione

Specializzati

Sfrutta un DB

Sezione di amministrazione
Vantaggi
No programmazione
Aspetto gestito tramite fogli di stile CSS anche già
disponibili in template (temi)
Anche i flat file CMS: solo file dati, nessun DB relazionale
Generici o Specializzati
Enciclopedia on-line (Wiki)
Blog
Forum
(E-Learning)
Gli attori dei CMS

Amministratori

Produttori

Fruitori
CMS open source
Drupal
Joomla
Php-Nuke
WordPress
WordPress

Download Wordpress in italiano

MySQL

Creare un db “wp”

Creare un utente “wp” con tutti i privilegi per il db

Creare c:xampphtdocswordpress

Estrarre i file dentro c:xampphtdocswordpress
WordPress 2

Copiare il file wp-config-sample.php in wp-config.php

Modificare il wp-config.php nei seguenti punti :

'DB NAME' 'wp'

'DB USER' 'wp'

'DB PASSWORD' 'wp'

Salvare e uscire

Browser: http://localhost/wordpress/wp-admin/install.php

Annotare la password

Collegati
Gli articoli

Creare una categoria

Creare un articolo - Visibilità

Pubblicare

Pubblicazione programmata
Le pagine

Creare un pagina

Pubblicare
Gli Utenti
Amministratore: tutto + commenti
Editore: Articoli, pagine, pubblicazione (no Aspetto, e
impostazioni limitate)
Autore: articoli, pubblicazione
Collaboratore: articoli
Sottoscrittore
???
Ricordate l'esercizio realizzato con localizzazione
dell'utente e individuazione del fornitore più
vicino?
Individuare i fruitori sul territorio
Individuare più frequenti richieste
MoULe
MoULe
Back Stage:
Associazione di contenuti didattici a specifiche
localizzazioni geografiche
Acquisizione materiale multimediale e pubblicazione
online
Funzionalità
Ricerca di informazioni legate alla posizione
Inserimento contenuti in modo collaborativo (wiki e
mappe concettuali)
Annotazioni multimediali mediante dispositivi
mobili
Chat e forum sensibili alla posizione
Point of interest
Monitoraggio utenti

Weitere ähnliche Inhalte

Was ist angesagt?

Fare con Zend Framework 2 ciò che facevo con ZF1
Fare con Zend Framework 2 ciò che facevo con ZF1Fare con Zend Framework 2 ciò che facevo con ZF1
Fare con Zend Framework 2 ciò che facevo con ZF1Steve Maraspin
 
Linux day 2016 la shell in linux
Linux day 2016   la shell in linuxLinux day 2016   la shell in linux
Linux day 2016 la shell in linuxGiuseppe Piccolo
 
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case study
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case studyMantenere una distribuzione Drupal attraverso test coverage: Paddle case study
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case studyDrupalDay
 
PHP Template Engine (introduzione)
PHP Template Engine (introduzione)PHP Template Engine (introduzione)
PHP Template Engine (introduzione)Asmir Mustafic
 
Write less do more...with jQuery
Write less do more...with jQueryWrite less do more...with jQuery
Write less do more...with jQueryXeDotNet
 
Gianfrasoft Corso Di Php Parte 1
Gianfrasoft   Corso Di Php   Parte 1Gianfrasoft   Corso Di Php   Parte 1
Gianfrasoft Corso Di Php Parte 1Gianfranco Fedele
 
Ajax Primi Passi Per Iniziare
Ajax Primi Passi Per IniziareAjax Primi Passi Per Iniziare
Ajax Primi Passi Per Iniziareastanco
 
breve introduzione a node.js
breve introduzione a node.jsbreve introduzione a node.js
breve introduzione a node.jseugenio pombi
 
Ajax Primi Passi Per Iniziare
Ajax Primi Passi Per IniziareAjax Primi Passi Per Iniziare
Ajax Primi Passi Per Iniziareastanco
 
Autenticazione delle api con jwt e symfony (Italian)
Autenticazione delle api con jwt e symfony (Italian)Autenticazione delle api con jwt e symfony (Italian)
Autenticazione delle api con jwt e symfony (Italian)Marco Albarelli
 
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBMongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBStefano Dindo
 
Levate l'ancora! Rotte senza problemi con ZF2
Levate l'ancora! Rotte senza problemi con ZF2Levate l'ancora! Rotte senza problemi con ZF2
Levate l'ancora! Rotte senza problemi con ZF2Diego Drigani
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPGiorgio Cefaro
 
Cattive abitudini e-lineeguida
Cattive abitudini e-lineeguidaCattive abitudini e-lineeguida
Cattive abitudini e-lineeguidaRobert Casanova
 

Was ist angesagt? (20)

Fare con Zend Framework 2 ciò che facevo con ZF1
Fare con Zend Framework 2 ciò che facevo con ZF1Fare con Zend Framework 2 ciò che facevo con ZF1
Fare con Zend Framework 2 ciò che facevo con ZF1
 
Linux day 2016 la shell in linux
Linux day 2016   la shell in linuxLinux day 2016   la shell in linux
Linux day 2016 la shell in linux
 
local::lib
local::liblocal::lib
local::lib
 
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case study
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case studyMantenere una distribuzione Drupal attraverso test coverage: Paddle case study
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case study
 
Comandi bash
Comandi bashComandi bash
Comandi bash
 
Introduzione a node.js
Introduzione a node.jsIntroduzione a node.js
Introduzione a node.js
 
PHP
PHPPHP
PHP
 
PHP Template Engine (introduzione)
PHP Template Engine (introduzione)PHP Template Engine (introduzione)
PHP Template Engine (introduzione)
 
Php e mysql (primi passi)
Php e mysql (primi passi)Php e mysql (primi passi)
Php e mysql (primi passi)
 
Write less do more...with jQuery
Write less do more...with jQueryWrite less do more...with jQuery
Write less do more...with jQuery
 
Gianfrasoft Corso Di Php Parte 1
Gianfrasoft   Corso Di Php   Parte 1Gianfrasoft   Corso Di Php   Parte 1
Gianfrasoft Corso Di Php Parte 1
 
Bash intro
Bash introBash intro
Bash intro
 
Ajax Primi Passi Per Iniziare
Ajax Primi Passi Per IniziareAjax Primi Passi Per Iniziare
Ajax Primi Passi Per Iniziare
 
breve introduzione a node.js
breve introduzione a node.jsbreve introduzione a node.js
breve introduzione a node.js
 
Ajax Primi Passi Per Iniziare
Ajax Primi Passi Per IniziareAjax Primi Passi Per Iniziare
Ajax Primi Passi Per Iniziare
 
Autenticazione delle api con jwt e symfony (Italian)
Autenticazione delle api con jwt e symfony (Italian)Autenticazione delle api con jwt e symfony (Italian)
Autenticazione delle api con jwt e symfony (Italian)
 
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBMongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDB
 
Levate l'ancora! Rotte senza problemi con ZF2
Levate l'ancora! Rotte senza problemi con ZF2Levate l'ancora! Rotte senza problemi con ZF2
Levate l'ancora! Rotte senza problemi con ZF2
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
 
Cattive abitudini e-lineeguida
Cattive abitudini e-lineeguidaCattive abitudini e-lineeguida
Cattive abitudini e-lineeguida
 

Andere mochten auch

Introduzione ai Sistemi Operativi
Introduzione ai Sistemi OperativiIntroduzione ai Sistemi Operativi
Introduzione ai Sistemi OperativiorestJump
 
Guida introduttiva al css
Guida introduttiva al cssGuida introduttiva al css
Guida introduttiva al cssEnrico Mainero
 
Struttura di una pagina html
Struttura di una pagina htmlStruttura di una pagina html
Struttura di una pagina htmlEnrico Mainero
 
Tecnologie informatiche
Tecnologie informaticheTecnologie informatiche
Tecnologie informaticheorestJump
 
HTML5 e Css3 - 4 | WebMaster & WebDesigner
HTML5 e Css3 - 4 | WebMaster & WebDesignerHTML5 e Css3 - 4 | WebMaster & WebDesigner
HTML5 e Css3 - 4 | WebMaster & WebDesignerMatteo Magni
 
Html5 appunti.0
Html5   appunti.0Html5   appunti.0
Html5 appunti.0orestJump
 
Html5 e css3 nuovi strumenti per un nuovo web
Html5 e css3 nuovi strumenti per un nuovo webHtml5 e css3 nuovi strumenti per un nuovo web
Html5 e css3 nuovi strumenti per un nuovo webMassimo Bonanni
 
Html e Css - 3 | WebMaster & WebDesigner
Html e Css - 3 | WebMaster & WebDesignerHtml e Css - 3 | WebMaster & WebDesigner
Html e Css - 3 | WebMaster & WebDesignerMatteo Magni
 
Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi orestJump
 
Introduzione JQuery
Introduzione JQueryIntroduzione JQuery
Introduzione JQueryorestJump
 
Html e CSS ipertesti e siti web 4.5
Html e CSS   ipertesti e siti web 4.5Html e CSS   ipertesti e siti web 4.5
Html e CSS ipertesti e siti web 4.5orestJump
 
Guida introduttiva al codice HTML
Guida introduttiva al codice HTMLGuida introduttiva al codice HTML
Guida introduttiva al codice HTMLEnrico Mainero
 
Musica, illustrazione e social media: una storia da raccontare
Musica, illustrazione e social media: una storia da raccontareMusica, illustrazione e social media: una storia da raccontare
Musica, illustrazione e social media: una storia da raccontareInSide Training
 
Corso PHP ENAIP - lezione #01 - 17/01/2014
Corso PHP ENAIP - lezione #01 - 17/01/2014Corso PHP ENAIP - lezione #01 - 17/01/2014
Corso PHP ENAIP - lezione #01 - 17/01/2014Matteo Moro
 
Presentazione Blog Università la Sapienza
Presentazione Blog Università la SapienzaPresentazione Blog Università la Sapienza
Presentazione Blog Università la Sapienzafabio73
 

Andere mochten auch (20)

Introduzione ai Sistemi Operativi
Introduzione ai Sistemi OperativiIntroduzione ai Sistemi Operativi
Introduzione ai Sistemi Operativi
 
Guida introduttiva al css
Guida introduttiva al cssGuida introduttiva al css
Guida introduttiva al css
 
Struttura di una pagina html
Struttura di una pagina htmlStruttura di una pagina html
Struttura di una pagina html
 
Tecnologie informatiche
Tecnologie informaticheTecnologie informatiche
Tecnologie informatiche
 
HTML5 e Css3 - 4 | WebMaster & WebDesigner
HTML5 e Css3 - 4 | WebMaster & WebDesignerHTML5 e Css3 - 4 | WebMaster & WebDesigner
HTML5 e Css3 - 4 | WebMaster & WebDesigner
 
Html5 appunti.0
Html5   appunti.0Html5   appunti.0
Html5 appunti.0
 
Html5 e css3 nuovi strumenti per un nuovo web
Html5 e css3 nuovi strumenti per un nuovo webHtml5 e css3 nuovi strumenti per un nuovo web
Html5 e css3 nuovi strumenti per un nuovo web
 
Html e Css - 3 | WebMaster & WebDesigner
Html e Css - 3 | WebMaster & WebDesignerHtml e Css - 3 | WebMaster & WebDesigner
Html e Css - 3 | WebMaster & WebDesigner
 
Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi
 
Introduzione JQuery
Introduzione JQueryIntroduzione JQuery
Introduzione JQuery
 
Html5 - Un anno dopo
Html5 - Un anno dopoHtml5 - Un anno dopo
Html5 - Un anno dopo
 
Html e CSS ipertesti e siti web 4.5
Html e CSS   ipertesti e siti web 4.5Html e CSS   ipertesti e siti web 4.5
Html e CSS ipertesti e siti web 4.5
 
Guida introduttiva al codice HTML
Guida introduttiva al codice HTMLGuida introduttiva al codice HTML
Guida introduttiva al codice HTML
 
Html
HtmlHtml
Html
 
Musica, illustrazione e social media: una storia da raccontare
Musica, illustrazione e social media: una storia da raccontareMusica, illustrazione e social media: una storia da raccontare
Musica, illustrazione e social media: una storia da raccontare
 
08 09 26 Hyves At Picnic
08 09 26 Hyves At Picnic08 09 26 Hyves At Picnic
08 09 26 Hyves At Picnic
 
CINEMA 4D
CINEMA 4DCINEMA 4D
CINEMA 4D
 
Media tools e significati simbolici 11 aprile 2014 Orient@ti
Media tools e significati simbolici 11 aprile 2014 Orient@tiMedia tools e significati simbolici 11 aprile 2014 Orient@ti
Media tools e significati simbolici 11 aprile 2014 Orient@ti
 
Corso PHP ENAIP - lezione #01 - 17/01/2014
Corso PHP ENAIP - lezione #01 - 17/01/2014Corso PHP ENAIP - lezione #01 - 17/01/2014
Corso PHP ENAIP - lezione #01 - 17/01/2014
 
Presentazione Blog Università la Sapienza
Presentazione Blog Università la SapienzaPresentazione Blog Università la Sapienza
Presentazione Blog Università la Sapienza
 

Ähnlich wie Php mysql e cms

Progetto di Basi di Dati
Progetto di Basi di DatiProgetto di Basi di Dati
Progetto di Basi di Datisegarva
 
Come Drupal costruisce le tue pagine
Come Drupal costruisce le tue pagineCome Drupal costruisce le tue pagine
Come Drupal costruisce le tue paginesparkfabrik
 
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Codemotion
 
breve introduzione a node.js
breve introduzione a node.jsbreve introduzione a node.js
breve introduzione a node.jsnetmeansnet
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-databaseMajong DevJfu
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.jsMichele Capra
 
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxProgettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxGiovanni Cappellini
 
Accelera lo sviluppo con il web framework! Componenti a supporto dello svilup...
Accelera lo sviluppo con il web framework! Componenti a supporto dello svilup...Accelera lo sviluppo con il web framework! Componenti a supporto dello svilup...
Accelera lo sviluppo con il web framework! Componenti a supporto dello svilup...Tsuneo Kurihara
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacyTommaso Torti
 
corso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascriptcorso web developer - Introduzione a Javascript
corso web developer - Introduzione a JavascriptRiccardo Piccioni
 
Consigli per iniziare tdd
Consigli per iniziare tddConsigli per iniziare tdd
Consigli per iniziare tddTassoman ☺
 
Come portare il profiler di symfony2 in drupal8
Come portare il profiler di symfony2 in drupal8Come portare il profiler di symfony2 in drupal8
Come portare il profiler di symfony2 in drupal8Luca Lusso
 
Entity Framework 4 vs NHibernate 3
Entity Framework 4 vs NHibernate 3Entity Framework 4 vs NHibernate 3
Entity Framework 4 vs NHibernate 3Martino Bordin
 
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019Matteo Enna
 
Laboratorio Di Basi Di Dati 11 P H P Interazione Con I D B M S
Laboratorio Di  Basi Di  Dati 11  P H P   Interazione Con I  D B M SLaboratorio Di  Basi Di  Dati 11  P H P   Interazione Con I  D B M S
Laboratorio Di Basi Di Dati 11 P H P Interazione Con I D B M Sguestbe916c
 

Ähnlich wie Php mysql e cms (20)

Progetto di Basi di Dati
Progetto di Basi di DatiProgetto di Basi di Dati
Progetto di Basi di Dati
 
Come Drupal costruisce le tue pagine
Come Drupal costruisce le tue pagineCome Drupal costruisce le tue pagine
Come Drupal costruisce le tue pagine
 
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
 
breve introduzione a node.js
breve introduzione a node.jsbreve introduzione a node.js
breve introduzione a node.js
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-database
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
 
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxProgettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
 
Java lezione 10
Java lezione 10Java lezione 10
Java lezione 10
 
Html5 e PHP
Html5 e PHPHtml5 e PHP
Html5 e PHP
 
Accelera lo sviluppo con il web framework! Componenti a supporto dello svilup...
Accelera lo sviluppo con il web framework! Componenti a supporto dello svilup...Accelera lo sviluppo con il web framework! Componenti a supporto dello svilup...
Accelera lo sviluppo con il web framework! Componenti a supporto dello svilup...
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacy
 
corso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascriptcorso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascript
 
Java lezione 17
Java lezione 17Java lezione 17
Java lezione 17
 
Programmazione Internet
Programmazione InternetProgrammazione Internet
Programmazione Internet
 
Consigli per iniziare tdd
Consigli per iniziare tddConsigli per iniziare tdd
Consigli per iniziare tdd
 
Come portare il profiler di symfony2 in drupal8
Come portare il profiler di symfony2 in drupal8Come portare il profiler di symfony2 in drupal8
Come portare il profiler di symfony2 in drupal8
 
Entity Framework 4 vs NHibernate 3
Entity Framework 4 vs NHibernate 3Entity Framework 4 vs NHibernate 3
Entity Framework 4 vs NHibernate 3
 
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
 
Laboratorio Di Basi Di Dati 11 P H P Interazione Con I D B M S
Laboratorio Di  Basi Di  Dati 11  P H P   Interazione Con I  D B M SLaboratorio Di  Basi Di  Dati 11  P H P   Interazione Con I  D B M S
Laboratorio Di Basi Di Dati 11 P H P Interazione Con I D B M S
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 

Php mysql e cms

  • 1. Php – MySQL - CMS Ugo Rinaldi - 2010-2013 ugo.rinaldi@gmail.com
  • 2. PHP – Hypertext Preprocessor  Motore di scripting (eseguiti sul server)  Sintassi “C-like”  Piattaforme diverse  Linguaggio potente, ricco di funzioni  Connessione a database  Modulo del Web Server  ...modulo CGI
  • 3. A cosa vogliamo arrivare  Php  Mysql  Php + Mysql >>> Applicazioni web dinamiche
  • 4. Pagine statiche  Html = pagine statiche  Javascript migliora molto la dinamicità client  Necessario aggiornare contenuti e dati
  • 5. Web Server  Una applicazione server: Apache, IIS, ...  Riceve richieste client  Interagisce con altre applicazioni server  Determina ed invia al client risposta con dati e/o codice HTML
  • 7. Iniziamo con Php Il tag per inserire codice php: <?php … ?> Per scrivere nella pagina: echo “Hello World!” Print(“......”) Nomi variabili: $a, $b, $importo Costanti define("COSTANTE", "Ciao mondo.");
  • 8. I cicli while($i>0) { echo “i vale $i”; } do { echo "$i <br />n"; $i++; } while ($i < 10); for ($i=-5; $i < 5; $i++) { echo "$i <br />n"; }
  • 9. Variabili Stringa $s=”Linkin Park”; print(“stringa = $s”); for ($i=0; $i<strlen($s); $i++) { print($s{$i}.“<br>”); }
  • 10. Caratteri speciali tra apici ' singolo apice ” doppio apice backslash r ritorno a capo n nuova linea t tabulazione orizzontale Da usare dentro una stringa tra singoli o doppi apici esempio: “Marta disse: ”Firenze lo sa”nr”
  • 11. Operatori Operatori aritmetici + - * / % ++– Operatori di assegnamento += -= *= /= %= &= Operatori relazionali == === < <=> >=!= !== Operatori logici && AND || OR XOR ! $a%=$b equivale a $a=$a%$b
  • 12. Flusso di controllo if ($saldo==0) { …; } else { ...; } if ... elseif … else ...
  • 13. switch e break Switch ($scelta) { case “+” : $r=$a+$b; break; case “-” : $r=$a-$b; break; case “*” : $r=$a*$b; break; case “/” : $r=$a/$b; break; default: echo “operatore errato!”; }
  • 14. foreach Ciclo su tutti gli elementi di un array $a=array(“ieri”,”oggi”,”domani”,”dopodomani”); foreach($a as $ele) { print(“$ele <br>”); }
  • 15. break – continue - exit break : Permette l'uscita da qualsiasi ciclo continue : Salta all'inizio del ciclo per l'iterazione successiva exit : Interrompe completamente l'esecuzione dello script
  • 16. try … catch (MyException $e) ... try { // istruzione che puo' causare errore } catch (Exception $e) { // istruzioni in caso di errore }
  • 17. Funzioni Per dichiarare la funzione function somma($a, $b) { $c=$a+$b; return $c; } per richiamarla $somma=somma($val1,$val2); Oppure anche print(“la somma e' : “.somma($val1,$val2).”<br>”);
  • 18. Visibilità Variabili Sono LOCALI le variabili dichiarate in una funzione global nomevariabile attiva l'uso di una variabile definita esternamente static $contatore=0 Dichiara una variabile locale assegnando un valore non reinizializzato nelle successive esecuzioni
  • 19. Parametri di una funzione utente Passati per valore es: function swap($a,$b) {…} O per riferimento es: function swap(&$a,&$b) {…} Valore di default es: function swap($a,$b=0) {…} Funzioni con numero variabile di argomenti: ...func_num_args() e func_get_arg($i) ...esempio fattoriale e funzioni dinamiche
  • 20. Array Dichiarazioni di array: $contatti []; $nomi[0]=”Marcincus”; $cd[]=”Metallica”; $squadre[“campioni”]=”Inter”; $vocali=array(“a”,”e”,”i”,”o”,”u”); ...esempio array
  • 21. Array associativi  Fondamentali in PHP  Non usano numeri per puntare agli elementi  Usano stringhe $clienti[“nome”]=”Rossi Mario”; $clienti[“provincia”]=”Catania”; $clienti[“telefono”]=”095-454545”; $cd=array(“Autore”=>”Springsteen”, “Titolo”=>”The River”, “Anno”=>1980);
  • 23. Le Sessioni La sessione è il modo più semplice per seguire un utente dal momento in cui si collega a quando interrompe il collegamento internet. Il server apre una sessione con la funzione session_start() e gli assegna un nome univoco. Le variabili di sessione sono memorizzate in un array globale di nome $_SESSION[] Deposita un cookie nella macchina dell'utente e ogni volta che ne ha bisogno, ne estrae i dati per risalire alla sessione e al file salvato. Iniziare la sessione con session_start() prima di ogni altro output dal server. NESSUNA funzione di uscita deve precederla, neppure il codice HTML!!
  • 24. Session: funzioni e codici session_start(); // apre una sessione $_SESSION['nomevariabile']; //crea l'array globale che contiene tutte le variabili di sesssione. session_unset(); //distrugge le variabili sessione. session_destroy(); //distrugge una sessione session_set_cookie_params(); //imposta i secondi di inattività oltre i quali la sessione è cancellata
  • 25. Session: un esempio <?php session_start(); //Recupero username e password dal form e li salvo $username = $_POST['user']; $password = $_POST['pass']; $_SESSION['username'] = $username; $_SESSION['password'] = $password; $_SESSION['views']=1; ?> <html>... <body>...
  • 26. Session: l'esempio in una pagina successiva <?php session_start(); If (isset($_SESSION['views'])) $_SESSION['views']=$_SESSION['views']+1; else $_SESSION['views']=1; echo "Views=". $_SESSION['views']; ?>
  • 27. I file di testo  Caratteri visualizzabili (testo)  Accesso sequenziale  Ogni riga finisce con il carattere di ritorno a capo 'n'
  • 28. Scrittura di un file if (!$p_file = fopen("miofile2.txt","w")) { echo "Errore: non posso aprire il file miofile2.txt"; exit; } flock($p_file,LOCK_EX); fputs($p_file,"Pippon"); fputs($p_file,"Pluton"); fputs($p_file,"Paperinon"); flock($p_file,LOCK_UN); fclose($p_file);
  • 29. Lettura di un file if (!$p_file = fopen("miofile3.txt","r")) { echo "Spiacente, non posso aprire il file"; } else { while(!feof($p_file)) { $linea = fgets($p_file, 255); echo "$linea<BR>"; } fclose($p_file); }
  • 30. Lettura e scrittura $p_file = fopen("rubrica2.csv","r"); $p_file_out = fopen("miofile3.txt","w"); If (!$p_file || !$p_file_out) { echo "Spiacente, non posso aprire uno dei file"; } else { flock($p_file_out,LOCK_EX); while(!feof($p_file)) { $linea = fgets($p_file, 255); $linea=str_replace ( ",","n",$linea ); fputs($p_file_out,$linea); } fclose($p_file); flock($p_file_out,LOCK_UN); fclose($p_file_out); }
  • 31. Invio dati da un form <form action=”http://127.0.0.1/mobile/registra.php” method=”post”> Nominativo: <input type=”text” name=”nome”> Email: <input type=”text” name=”email”> Citt&agrave: <input type=”text” name=”citta”> <input type=”submit” value=”Invia”> </form>
  • 32. Ricezione dati Il server riceverà i valori inviati dal form in un vettore di sistema chiamato $_REQUEST $a=$_REQUEST[nome]; $b=$_REQUEST[email]; $c=$_REQUEST[citta];
  • 33. Esercizio - Client Creare un form per la selezione di una categoria di fornitori da una list box Generare 2 numeri interi compresi tra 1 e 100 (longitudine e latitudine) Inserimento/modifica dei numeri generati Inserimento dell'email utente Invio delle 4 informazioni a ricerca.php
  • 34. Esercizio - Server Leggere un file di testo “fornitori.txt” Per i soli record con categoria uguale a quella selezionata dal Client calcolare la distanza minima tra le coordinante client e quelle del fornitore Visualizzare i dati del fornitore piu' vicino alla posizione del client
  • 35. MySQL Potente database SQL Utilizzato nella maggioranza dei siti dinamici sul web Download dell'ultima versione dal sito Oracle oppure download XAMPP Perfettamente integrabile con Apache e Php
  • 36. Panoramica Sql  Select - usata per interrogare 1 o più righe  Insert - usata nei nuovi inserimenti di riga  Update - usata per modificare 1 o più righe  Delete - usata per eliminare 1 o più righe
  • 37. Interrogazione di un DB  $cs=mysql_connect(“localhost”, “pippo”, “miapassword”) si connette al server  mysql_select_db(“rubrica”, $cs) apre il database  mysql_close($cs); chiude la connessione  $recSet=mysql_query("select * from rubrica", $cs); esegue la query  $line=mysql_fetch_assoc($recSet) copia il record puntato in un array associativo  mysql_free_result($recSet); libera la memoria dal record set
  • 38. Inserimento nuova riga in un DB  $cs=mysql_connect(“localhost”, “pippo”, “miapassword”) si connette al server  mysql_select_db(“rubrica”, $cs) apre il database  mysql_close($cs); chiude la connessione  $recSet= mysql_query("insert into tabella (campo1, …) values (val1,...)", $cs);
  • 39. Modifica di una riga in un DB  $cs=mysql_connect(“localhost”, “pippo”, “miapassword”) si connette al server  mysql_select_db(“rubrica”, $cs) apre il database  mysql_close($cs); chiude la connessione  $recSet= mysql_query("update tabella set campo1=xxx, campo2=yyy...", $cs);
  • 40. Elimina una riga in un DB  $cs=mysql_connect(“localhost”, “pippo”, “miapassword”) si connette al server  mysql_select_db(“rubrica”, $cs) apre il database  mysql_close($cs); chiude la connessione  $recSet= mysql_query("update tabella set campo1=xxx, campo2=yyy...", $cs);
  • 41. Troppo difficile HTML, Php, MySQL (Java, Tomcat, …) TROPPO DIFFICILE ...e allora
  • 42. CMS Content Management System!  Sito dinamico  Applicazione lato server  No programmazione  Specializzati  Sfrutta un DB  Sezione di amministrazione
  • 43. Vantaggi No programmazione Aspetto gestito tramite fogli di stile CSS anche già disponibili in template (temi) Anche i flat file CMS: solo file dati, nessun DB relazionale
  • 44. Generici o Specializzati Enciclopedia on-line (Wiki) Blog Forum (E-Learning)
  • 45. Gli attori dei CMS  Amministratori  Produttori  Fruitori
  • 47. WordPress  Download Wordpress in italiano  MySQL  Creare un db “wp”  Creare un utente “wp” con tutti i privilegi per il db  Creare c:xampphtdocswordpress  Estrarre i file dentro c:xampphtdocswordpress
  • 48. WordPress 2  Copiare il file wp-config-sample.php in wp-config.php  Modificare il wp-config.php nei seguenti punti :  'DB NAME' 'wp'  'DB USER' 'wp'  'DB PASSWORD' 'wp'  Salvare e uscire  Browser: http://localhost/wordpress/wp-admin/install.php  Annotare la password  Collegati
  • 49. Gli articoli  Creare una categoria  Creare un articolo - Visibilità  Pubblicare  Pubblicazione programmata
  • 50. Le pagine  Creare un pagina  Pubblicare
  • 51. Gli Utenti Amministratore: tutto + commenti Editore: Articoli, pagine, pubblicazione (no Aspetto, e impostazioni limitate) Autore: articoli, pubblicazione Collaboratore: articoli Sottoscrittore
  • 52. ??? Ricordate l'esercizio realizzato con localizzazione dell'utente e individuazione del fornitore più vicino? Individuare i fruitori sul territorio Individuare più frequenti richieste
  • 53. MoULe
  • 54. MoULe Back Stage: Associazione di contenuti didattici a specifiche localizzazioni geografiche Acquisizione materiale multimediale e pubblicazione online
  • 55. Funzionalità Ricerca di informazioni legate alla posizione Inserimento contenuti in modo collaborativo (wiki e mappe concettuali) Annotazioni multimediali mediante dispositivi mobili Chat e forum sensibili alla posizione Point of interest Monitoraggio utenti