Pagine dinamiche PHP e connessioni a database MySQL

Pagine dinamiche PHP e connessioni a database MySQL
Cominciamo con un esempio
Supponiamo di avere un database MySQL, con una tabella di nome tabella_esempio che contiene i campi (id, nome,
cognome, password).
id
nome
cognome
password
1
pippo
baudo
ccccqqxzcxzczxc
11
paolino
paperino
ccccf
69
Federico
Pasquesi
nonlaso
Ora supponiamo di dover utilizzare questa tabella all'interno di un nostro sito web. Dovrà quindi essere possibile,
sempre via web, accedere al database in modo da
1. visualizzare il contenuto della tabella
2. inserire nuovi dati
3. modificare i dati esistenti o rimuoverli
Presupposti
Ricordiamo che il database è gestito da un apposito server, a cui avremo accesso con appropriati credenziali (username
e password). Dal nostro script PHP dovremo quindi aprire una connessione a questo database specificando al server
MySQL username e password.. Potremo quindi selezionare il database sul quale vogliamo lavorare (specificandone il
nome), per poi eseguire tutti i comandi SQL (SELECT, INSERT etc etc) sul nostro database.
Per connetterci al database usando PHP dovremo creare un nuovo oggetto $conn utilizzando il costruttore mysqli al
quale dovremo passare i seguenti parametri, precedentemente definiti:
$conn = new mysqli($hostname, $username, $password, $database );
nel nostro caso useremo i seguenti parametri:
$username="user2442453";
// nome utente MySQL
$password="pippo123";
// password MySQL
$hostname="localhost";
// ip o nome del server su cui gira MySQL
$database="db2442453-main"; // nome del database
Un po' di SQL
Supponiamo di avere una tabella con le caratteristiche menzionate all'inizio. Vediamo come possiamo, usando il
linguaggio SQL,
•
inserire un nuovo dato:
INSERT INTO tabella_esempio
( nome, cognome) VALUES (“pippo”, “baudo”);
nel caso vengano specificati i valori di tutti i campi della tabella, si possono specificare semplicemente i valori
senza elencare tutti i campi, es:
INSERT INTO tabella_esempio
VALUES (118,“pippo”, “baudo”, “la mia password”);
•
rimuovere uno (o più record) da una tabella:
•
modificare uno(o più) dati esistenti:
DELETE FROM tabella_esempio WHERE nome=”paolino” AND cognome=”paperino”;
UPDATE tabella_esempio SET nome=”topolino”, password=”pluto” WHERE id=”11”;
•
selezionare tutti i dati presenti in una tabella
SELECT * FROM tabella_esempio;
•
selezionare solo alcune colonne di una tabella
SELECT cognome, nome
•
FROM tabella_esempio;
selezionare solo alcuni record (righe) dalla tabella
SELECT cognome, nome
FROM tabella_esempio WHERE cognome=”paperino” OR id < 100;
Visualizzazione di una tabella
Nella nostra pagina PHP, dovremo innanzitutto: aprire la connessione al server MySQL, selezionare il database sul
quale vogliamo lavorare, quindi eseguire la richiesta SQL per selezionare tutti i dati presenti nella tabella, e
rappresentarli tutti formattando una tabella HTML. Ma procediamo con ordine. La parte iniziale corrisponderà a
qualcosa del tipo:
<?php
$username="user2442453";
// nome utente MySQL
$password="pippo123";
// password MySQL
$hostname="localhost";
// ip o nome del server su cui gira MySQL
$conn = new mysqli($hostname, $username, $password, $database );
?>
<html>
<body>
<table border=1>
<?php
//qua inseriremo tutto il codice (sotto riportato) che estrae i dati dal database
?>
</table>
</body>
</html>
Ora dovremo eseguire la prima richiesta al database sfruttando la connessione creata ed ottenendo un nuovo oggetto $ris
$ris = $conn->query("SELECT * FROM tabella_esempio;");
$n = $ris->num_rows ;
Possiamo controllare quanto risultati(quante righe) otteniamo dalla nostra richiesta accedendo ad una variabile
dell'oggetto $ris:
$num = $ris->num_rows ;
e quindi andare a selezionare una riga alla volta usando il metodo fetch_assoc ell'oggetto $ris otteniamo un array
($row) con un valore per ogni campo (colonna) della tabella. Usando il comodissimo ciclo foreach del PHP possiamo
quindi riassumere questa parte nel seguente codice:
for($i=0; $i<$num; $i++){
// da 0 al numero dei risultati
echo "<tr>\n";
$row=$ris->fetch_assoc();
// seleziono la riga successiva del risultato
foreach($row
// per ogni elemento $val dell'array $row
as $campo => $val){
echo "<td> $val</td>\n";
// stampo la cella in formato html
};
echo "</tr>\n";
};
Volendo è possibile anche visualizzare l'intestazione della tabella, elencando i nomi delle colonne. Basterà
semplicemente stampare il nome del campo prima di stampare la prima riga, ovvero aggiungendo prima del ciclo
foreach del codice soprastante le seguenti istruzioni:
if($i==0){
echo "<tr>\n";
foreach($row
as $campo => $val){
echo "<th>$campo</th>\n";
// per ogni elemento $val dell'array $row
// stampo la cella in formato html
};
echo "</tr>\n";
}
Inserimento di un nuovo record
Per inserire un nuovo record sono necessarie 2 pagine: una prima pagina HTML contenente un form con i campi di
input opportuni. È indispensabile che ogni campo di input abbia specificato l'attributo name. È altresì importante che
l'attributo action del tag form rimandi alla seconda pagina.
pagina_uno.html:
<form action="pagina_due.php" method="get">
Inserisci il tuo nome <input type="text" name="nome" value ="">
[...]
</form>
La seconda pagina dovrà invece recuperare i dati del suddetto form e inserirli nel database eseguendo l'opportuna query.
Le variabili del form sono accessibili tramite i vettori $_REQUEST["nome_variabile"]. La stringa che viene passata al
metodo query sarà costruita concatenando con l'operatore “punto” i vari pezzi della stringa SQL con le variabili usate.
L'attributo affected_rows mi permetterà di conoscere il numero di record inseriti (o eventualmente modificati/eliminati).
pagina_due.php:
<?php
[ mi connetto al database come sopra descritto ]
$conn->query("INSERT INTO tabella_esempio (nome) VALUES ('".$_REQUEST["nome"]."')" );
echo "Hai inserito ". $conn->affected_rows . " nuovi record ";
?>
Eliminazione record
Riprendendo la pagina che stampa l'elenco di elementi in tabella possiamo aggiungere una colonna ove viene inserito
un link per eliminare/modificare il record selezionato.
Basterà semplicemente aggiungere una colonna stampando un link ad una pagina che si curerà dell'eliminazione del
record nota la relativa chiave primaria.
Aggiungerò quindi dopo l'istruzione fetch_assoc del primo esempio sopra mostrato una cosa del genere:
echo “<td><a href='cancella.php?id=” . row[“id”] .
“'>Elimina</a></td>”;
A questo punto sarà necessario creare la pagina cancella.php che riceverà il parametro $_REQEUST[“id”]. Dopo aver
aperto la connessione al database si procederà eseguendo l'opportuna query sql :
<?php
[ mi connetto al database come sopra descritto ]
$conn->query("DELETE FROM tabella_esempio WHERE id = '".$_REQUEST["id"]."')" );
echo "Hai eliminato ". $conn->affected_rows . " record ";
?>
Modifica di un record
Si procede come al paragrafo precedente aggiungendo un ulteriore link alla tabella:
echo “<td><a href='modifica.php?id=” . row[“id”] .
“'>Modifica</a></td>”;
La pagina modifica.php conterrà gli stessi elementi di pagina_uno.html. I vari campi di input dovranno però
assumer un valore di default corrispondente a quello del record selezionato. Per far ciò sarà necessario estrarre dal
database il record relativo all'id richiesto eseguendo la query
$ris
$row
echo
echo
= $conn->query("SELECT * FROM tabella_esempio WHERE id = “ . $_REQUEST[“id“]
= $ris->fetch_assoc();
“Id:
<input name ='nome' type=”hidden” value ='” . $row['id'] . “' > “;
“Nome: <input name ='nome' type=”text”
value ='” . $row['nome'] . “' > “;
. “;");
La seconda pagina dovrà non tanto inserire il dato bensì aggiornare il record già presente nel database. Il form di
modifica.php dovrà pertanto puntare a un'altra pagina modifica_due.php contenente la seguente istruzione SQL:
<?php
[ mi connetto al database come sopra descritto ]
$conn->query("UPDATE tabella_esempio (nome) SET nome ='".$_REQUEST["nome"]."'
WHERE id='".$_REQUEST["id"]."';)” );
echo "Hai modificato ". $conn->affected_rows . " nuovi record ";
?>
Compiti
1. Crea una tabella a piacere utilizzando un tuo spazio web oppure accedendo al link
2.
3.
4.
5.
6.
7.
http://www6.subdomain.com/phpMyAdmin/index.php usando l'username user2442453 e la password
pluto123
Allo stesso link potrai inserire anche alcuni dati nella tabella.
Crea quindi una pagina PHP per visualizzare i dati contenuti in questa tabella. La pagina php potrai caricarla e
testarla al link ftp://www6.subdomain.com (username user2442453 e password pluto123) e visualizzarla al
sito http://russell4c.website.org
Crea una pagina HTML con un form per inserire i dati richiesti dalla suddetta tabella
Crea una seconda pagina che ricevi i dati del suddetto form e li inserisca nel database
Alla pagina dell'esercizio 3 aggiungere per ogni riga un pulsante/link che permetta di eliminare il record
selezionato (dovrai creare una nuova pagina per cancellare il singolo dato)
Alla pagina dell'esercizio 3 aggiungere per ogni riga un pulsante/link che permetta di modificare il singolo
record: verrà caricata quindi una pagina come al punto 3, ma con i campi già precompilati, che rimanderà ad
una terza pagina che andrà ad effettuare l'update vero e proprio.