Vitale Corso SQL-PHP

Da Wiki-itsos.

Corso Sql-Php

Lavoro preliminare obbligatorio:

Se si usa un pc, deve rispondere agli stessi requisiti della macchina virtuale. In alternativa, è possibile implementare queste lezioni anche utilizzando un pc con una versione Windows di SO (Xp, Vista, o 7) ma chi intende farlo deve provvedere autonomamente a installare tutti i pacchetti richiesti (apache2, mysql, php) e a configurare il sistema affinchè tutto sia operativo. Fatelo solo se siete veramente esperti e autonomi.

  • Creare la pagina Vitale Corso Sql-php
Paginavitale corso sql.png

Pagina wiki creata

  • Linkare la pagina creata alla vostra pagina personale e alla pagina di classe
Vitale corso Sql evidenza1.png

Pagina linkata alla mia pagina personale

Vitale corso Sql evidenza2.png

Pagina linkata alla pagina di classe

  • Inserire nella pagina l'evidenza di disporre di una macchina (virtuale o fisica) alle specifiche indicate in queste note
Evidenza Servizi operativi.png

Servizi presenti


Installare un sistema LAMP con il comando

sudo apt-get install apache2 php5 php5-mysql mysql-server

SQL - Connettersi

Obiettivi mysql - Connettersi (usando interfaccia a terminale) - Definire utenti

Azioni - Connettersi a MySQL. La prima volta, entreremo come utente root, dando il comando

root@VitaleHostScuola:/home/tech# mysql -u root -p
 Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 5.5.47-0ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

- Definire utenti: possiamo farlo con il comando

create user 'Vitale' identified by 'Alessio';
Query OK, 0 rows affected (0.00 sec)

Verifichiamo se la creazione ha avuto esito, scollegandoci come root e e collegandoci come Vitale

mysql> exit
Bye
root@VitaleHostScuola:/home/tech# mysql -u Vitale -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 45
Server version: 5.5.47-0ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 


Nota: così come è stato definito, test può collegarsi a mysql da qualsiasi macchina. Se avessimo voluto limitare l'accesso, avremmpo potuto specificare o ridurre le macchine. Ad esempio

create user 'test'@'localhost' identified by 'supp';
create user 'test'@'192.168.2.135' identified by 'supp';

In questi casi, l'utente test può connettersi a MySql solo da localhost (primo esempio) o solo dall'IP 192.168.2.135 (secondo esempio).

Implementate i comandi di questo messaggio sulla vostra mv, spedite l'evidenza, quindi passate al successivo.

Schermata del 2016-03-03 11-52-02.png

Collegato come root

Schermata del 2016-03-03 11-52-19.png

Creazione utenti 'test' e 'Vitale'

Schermata del 2016-03-03 11-52-31.png

Collegato come Vitale

Schermata del 2016-03-03 11-52-49.png

Ricollegato come root

PHP - Connettersi

Obiettivo

Implementare la connessione a mysql usando php

Azione

Creare il file /var/www/html/test3.php, contenente il seguente codice:

<?php
mysql_connect("localhost", "root", "supp") or die(mysql_error());
echo "Connesso a MySQL!!";
?>
Schermata del 2016-03-10 10-21-56.png

creato file

Schermata del 2016-03-10 10-32-04.png

Inserito codice

Eseguiamo il file, usando il link

<Ip-Della-vostra-Macchina>/var/www/html/test3.php

Se il sistema funziona e la password è corretta, otterremo una immagine come ad esempio questa
CorsoPhpSql-Fig01.png
In caso contrario, otterremo una immagine come questa:
CorsoPhpSql-Fig02.png

Come si può vedere il sistema funziona correttamente

Schermata del 2016-03-10 10-46-21.png

Collegato al link

SQL - Lavorare con il DB

Obiettivi mysql

  1. Lavorare sui Database
  2. Creare Database
  3. Eliminare Batabase

Azioni

Connettersi come root.
Possiamo vedere l'elenco dei Database presenti sul sistema con il comando:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)

Possiamo creare un nuovo database con il comando:

mysql> create database Nuovo;
Query OK, 1 row affected (0.04 sec)

Esito del precedente comando:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Nuovo              |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)
Schermata del 2016-03-17 10-21-30.png

mostrati database e creato "nuovo"

Importante: osservate il comando condizionale, il cui significato dovrebbe essere auto-espplicativo

mysql> create database IF NOT EXISTS Nuovo;
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> create database IF NOT EXISTS Nuovo2;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Nuovo              |
| Nuovo2             |
| mysql              |
| test               |
+--------------------+
5 rows in set (0.00 sec)

Come si vede, Nuovo già esisteva, quindi NON è stato aggiunto, Nuovo2 invece è stato creato.

Schermata del 2016-03-17 10-25-41.png

creato database "Nuovo2"

Per cancellare, abbiamo il comando drop database, ecco un paio di esempio autoesplicativi:

mysql> drop database Nuovo2;
Query OK, 0 rows affected (0.03 sec)
Schermata del 2016-03-17 10-31-58.png

cancellato database "Nuovo2"

mysql> drop database if exists Nuovo;
Query OK, 0 rows affected (0.00 sec)
Schermata del 2016-03-17 10-33-57.png

cancellato database "Nuovo"

mysql> drop database if exists Nuovo;
Query OK, 0 rows affected, 1 warning (0.00 sec)
Schermata del 2016-03-17 10-34-26.png

provato a cancellare database "Nuovo" se esiste

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| TestDb             |
+--------------------+
3 rows in set (0.00 sec)
Schermata del 2016-03-17 10-34-58.png

database cancellati

Commento finale: - drop database Nuovo2 semplicemente cancella Nuovo2. - drop database if exists Nuovo la prima volta lo cancella, la seconda volta invece non lo trova (notate il warning)

Schermata del 2016-03-17 10-57-52.png

creato database TestDB

Implementate i comandi di questo messaggio sulla vostra mv, spedite l'evidenza, quindi passate al successivo.

PHP - Lavorare con il DB

Dobbiamo implementare, usando il php, le stesse azioni che abbiamo svolto in sezione SQL - Lavorare con il DB usando MySql.

Schermata del 2016-03-17 12-07-37.png

creato Db Personalizzato

Percorso PHP - Lavorare con il DB
Test di connessione e selezione di un DB
<?php #Alessio Vitale 17/03/16 mysql_connect('localhost', 'root', 'supp') or die("Non riesco a connettermi a SQL"); mysql_select_db("DBVitale") or die("Non trovo il DB. Errore ". mysql_error()); mysql_close(); ?>

Inseriamo il codice nel file

/var/www/html/test4.php
Schermata del 2016-03-17 12-10-00.png

file test4.php creato

ed eseguiamolo, esaminando i possibili esiti

Possibile Esito (negativo)

Se NON esiste ancora il database TestDb, otteniamo questa risposta.

Schermata del 2016-03-17 11-11-11.png

In tal caso, da MySql verificate cosa succede con show databases;


Possibile Esito (positivo)

Dopo aver verificato l'esistenza del database TestDB, otteniamo questa risposta.

Schermata del 2016-03-17 11-24-07.png

Database trovato

Conclusione

Ora sappiamo: - verificare la connessione a SQL - ottenere e visualizzare informazioni sulla versione php e mysql che stiamo adoperando - verificare se esiste un certo database (nel nostro caso, TestDb) e connetterci, sia in sql che in php

Implementate i comandi di questo messaggio sulla vostra mv, spedite l'evidenza, quindi passate al successivo.

SQL - Lavorare con le tabelle

Prerequisito: DEVE essere già stato superata l'azione PHP - Lavorare con il DB

Obiettivi mysql

  1. Creare tabelle in un database
  2. Esaminare la struttura di una tabella
  3. Eliminare tabelle in un database

Azioni

Per creare una tabella in un database abbiamo a disposizione il comando create table. Ecco un esempio di come si usa

mysql> use DBVitale;
Database changed

mysql> create table tabellaVit ( colonna varchar (10) not null);
Query OK, 0 rows affected (0.05 sec)

Risultato ottenuto

mysql> show tables;
+------------------+
| Tables_in_TestDb |
+------------------+
| tabella          |
+------------------+
1 row in set (0.00 sec)
Schermata del 2016-03-17 12-14-27.png

creata tabella e mostrata

Spiegazione del comando create table:

  1. il nome della tabella (nel nostro caso, la parola tabella) si scrive immediatamente dopo create table
  2. la tabella può avere una o più colonne, che si scrivono tra parentesi.
  3. nel nostro esempio, c'è UNA sola colonna, che si chiama, appunto, colonna
  4. varchar (10) spiega al sistema che la colonna è un tipo di dato formato da massimo 10 caratteri
  5. not null, opzionale, spiega al sistema che NON accettiamo valori nulli (in altri termini: un valore deve contenere minimo un carattere, altrimenti non sarà inserito.



Importante: il tipo varchar è molto comune, ma è bene sapere che esistono tanti altri tipi di dato, ad esempio numeri, booleani, immagini, suoni, filmati...


Esaminare la struttura di una tabella

mysql> describe tabellaVit;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| colonna | varchar(10) | NO   |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql>
Schermata del 2016-03-17 12-18-41.png

struttura tabella

PHP - Lavorare con le tabelle

Dobbiamo implementare, usando il php, le stesse azioni che abbiamo svolto in sezione SQL - Lavorare con le tabelle.

Modello di codice PHP da creare (ricordatevi di personalizzarlo!!!)

Percorso PHP - Lavorare con le tabelle
<?php #Alessio Vitale 17/03/16 mysql_connect('localhost', 'root', 'supp') or die("Non riesco a connettermi a SQL"); mysql_select_db("TestDb") or die("Non trovo il DB. Errore ". mysql_error()); $stm = "CREATE TABLE IF NOT EXISTS " . "VitaleT(Parola VARCHAR(25), Id INT PRIMARY KEY AUTO_INCREMENT)"; $ok = mysql_query($stm); if (!$ok) { echo mysql_error(); die("Non riesco a eseguire il comando"); } echo "Tabella VitaleT creata con successo"; mysql_close(); ?>
Schermata del 2016-03-31 10-35-18.png

Codice inserito in test5.php

Se il programma continua, vuol dire che non ha trovato errori e quindi visualizza la frase corrispondente.

echo "Tabella VitaleT creata con successo";
Schermata del 2016-03-31 10-32-24.png

Tabella creata con successo

SQL - Inserire record in tabella

Azioni

Per inserire una riga in una tabella di un database abbiamo a disposizione il comando insert. Ecco un esempio auto-esplicativo di come si usa

mysql> INSERT INTO vitale(parola) VALUES('alessio');
Query OK, 1 row affected (0.06 sec)

Per visualizzare l'intero contenuto di una tabella, useremo il seguente comando

mysql> select parola from vitale;
+---------+
| parola  |
+---------+
| alessio |
+-------------+----+
1 row in set (0.00 sec)
Schermata del 2016-03-31 10-52-47.png

inserita riga nella colonna 'Parola'

Per eliminare i record da una tabella, si usa il comando DELETE. Ecco un esempio di uso di DELETE

mysql> delete from vitale;
Query OK, 1 row affected (0.06 sec)
mysql>  select parola from vitale;
Empty set (0.00 sec)

Come si può vedere, delete rimuove TUTTI i record presenti nella tabella.

Schermata del 2016-03-31 10-57-33.png

riga eliminata


E' possibile usare DELETE per eliminare solo ALCUNI record presenti in tabella. Per questo, esaminiamo la sequenza di comandi, abbastanza auto-esplicativa, che poi commenteremo

mysql> INSERT INTO vitale(parola) VALUES('Alessio');
Query OK, 1 row affected (0.06 sec)

mysql> INSERT INTO vitale(parola) VALUES('Paolo');
Query OK, 1 row affected (0.06 sec)

mysql> INSERT INTO vitale(parola) VALUES('Luca');
Query OK, 1 row affected (0.06 sec)

mysql> INSERT INTO vitale(parola) VALUES('Giovanni');
Query OK, 1 row affected (0.07 sec)
Inserite righe nella colonna parola.png

righe inserite

mysql> select parola from vitale;
+---------+
| parola  |
+---------+
| Alessio |
| Paolo   |
| Luca    |
| Giovanni|
+---------+
4 rows in set (0.00 sec)
Schermata del 2016-03-31 11-02-55.png

evidenza righe inserite

mysql> delete from vitale where parola = "Paolo";
Query OK, 1 row affected (0.06 sec)
mysql> select * from vitale;
+---------+
| parola  |
+---------+
| Alessio |
| Luca    |
| Giovanni|
+---------+
3 rows in set (0.00 sec)
Schermata del 2016-03-31 11-07-19.png

eliminata riga 'Paolo'

PHP - Inserire record in tabella

Dobbiamo implementare, usando il php, le stesse azioni che abbiamo svolto in sezione SQL - Lavorare con le tabelle.

Modello di codice PHP da creare (ricordatevi di personalizzarlo!!!) Date al file il nome tab6.php

 Percorso PHP  - Inserire record in tabella

<?php

#Inserire QUI un COMMENTO con il vostro NOME e la DATA 
mysql_connect('localhost', 'root', 'supp') 
   or die("Non riesco a connettermi a SQL");
mysql_select_db("DBVitale") 
   or die("Non trovo il DB. Errore ". mysql_error());
$stm = "CREATE TABLE IF NOT EXISTS " . 
       "vitale6(Parola VARCHAR(25), NumId INT PRIMARY KEY AUTO_INCREMENT)";
$ok = mysql_query($stm);
if ($ok) { echo "Tabella Vitale presente nel DB 
"; } else { echo mysql_error(); die("Non riesco a creare la tabella Vitale"); } mysql_query("INSERT INTO vitale6(Parola) VALUES('Luca')") or die(mysql_error()); mysql_query("INSERT INTO vitale6(Parola) VALUES('Younes')") or die(mysql_error()); echo "Aggiunte con successo 2 righe alla tabella vitale6"; mysql_close(); ?>

Se avete compreso quanto spiegato:

  • create sulla vostra mv il file /var/www/html/test6.php
  • inserite in test6.php il codice spiegato, PERSONALIZZATELO
Schermata del 2016-04-07 10-21-53.png

file creato e codice inserito

  • fate eseguire il codice, anche più di una volta
Schermata del 2016-04-07 10-26-29.png

record inseriti con successo

  • da SQL, usate il comando select * from Vitale6;
Schermata del 2016-04-07 10-41-21.png

tabella vista da mysql

PHP - Visualizzare il contenuto di una tabella

Ora dobbiamo implementare, in php, l'equivalente del comando SQL (ecco il nostro ESEMPIO)

select * from tabella;
+-------------+-------+
| Parola      | NumId |
+-------------+-------+
| Luca        |    33 |
| Younes      |    34 |
+-------------+-------+
4 rows in set (0.00 sec)

Azione php

L'azione php è più complicata rispetto a quella SQL perché, dopo aver estratto i valori dalla tabella, bisogna anche visualizzarli. Per questo occorre scrivere, riga per riga, i valori della tabella.

<?php
echo "Alessio Vitale 07/04/16 
"; mysql_connect('localhost', 'root', 'supp') or die("Non riesco a connettermi a SQL"); mysql_select_db("DBVitale") or die("Non trovo il DB. Errore ". mysql_error()); $stm = "SELECT Parola, NumId from vitale6"; $result = mysql_query($stm) or die(mysql_error()); while ($row = mysql_fetch_assoc($result)) { echo $row['NumId']; echo ": "; echo $row['Parola']; echo "
"; } mysql_close(); ?>

Se avete compreso quanto spiegato:

  • create sulla vostra mv il file /var/www/index/test7.php
  • inserite in php7 il codice spiegato, PERSONALIZZATELO
Schermata del 2016-04-07 11-11-54.png
  • fate eseguire il codice. L'esito atteso dovrebbe essere:
Schermata del 2016-04-07 12-31-49.png
  • Intervenite da terminale SQL e modificate il contenuto della tabella
  • riportate le evidenze del vostro lavoro