giorno settimanamesegiorno

Sono passati 88 giorni dall'inizio dell'anno che corrispondono a 13 settimane

Arcobaleno, domani sereno



* Chattina

Aggiorna Storia
  • mar: :resistere:
    Febbraio 15, 2022, 19:44:48
  • mar: Non mi ricordavo di essere un global moderator wauuuu Ok Prof ti lascio restaurare in pace!
    Febbraio 15, 2022, 19:43:56
  • mar: :Cartelli70:
    Febbraio 15, 2022, 19:41:14
  • mar: ad cazzum pure qui?
    Febbraio 15, 2022, 19:41:02
  • mar: ciaoooo sono in perlistrazione
    Febbraio 15, 2022, 19:40:44
  • mar: :okkey:
    Febbraio 15, 2022, 19:40:20
  • Loretta/Nina: ciao a tutti
    Ottobre 04, 2021, 19:23:02
  • Loretta/Nina: :tuffarsi:
    Settembre 21, 2021, 07:08:03
  • Loretta/Nina: Buon autunno a tutti
    Settembre 21, 2021, 07:01:35
  • nuvolotta: avventure testuali
    Luglio 06, 2020, 23:26:08
  • _jan_: ...gli ultimo però....!!
    Gennaio 14, 2019, 14:45:09
  • _jan_: vedi gli ultimi post in fondo.
    Novembre 24, 2018, 19:10:00
  • mar: Trovato :Amm9:
    Novembre 24, 2018, 18:57:51
  • mar: Chi cerca trova non vi trovo! :Cartelli2:
    Novembre 24, 2018, 18:57:05
  • mar: Vado a vedere le cartoline!
    Novembre 24, 2018, 18:52:38
  • mar: :Amore145:
    Novembre 24, 2018, 18:52:21
  • mar: :Amore178:
    Novembre 24, 2018, 18:52:07
  • _jan_: Welcome Visitor.  :Party133:
    Novembre 15, 2018, 10:03:24
  • Loretta/Nina: Benvenuto ligi  :Cartelli37:
    Ottobre 09, 2018, 13:19:25
  • nuvolotta: Cucù...  :Amore20:
    Settembre 16, 2018, 01:16:47
  • Loretta/Nina: :Party133:
    Settembre 01, 2018, 17:05:30
  • _jan_: Ciao ai visitors!!
    Settembre 01, 2018, 17:02:31
  • Loretta/Nina: :fischio: :979:
    Agosto 28, 2018, 16:20:48
  • ketty: ah beh, meno male. ora il tempo e' un po' brutto
    Agosto 26, 2018, 13:27:36
  • _jan_: No, no, soqquà. Ci passo ma....... non c'è mai nessuno. Ammiro Nuvolotta, solitaria e presente.
    Agosto 25, 2018, 10:34:41
  • ketty: ma Jan è andato in vacanza? :Cartelli70:
    Agosto 24, 2018, 20:51:59
  • ketty: ciao a tutti.
    Agosto 24, 2018, 20:50:12
  • nuvolotta: :faccina_fiore: ciao ragazzioli/ole...
    Agosto 19, 2018, 23:03:49
  • Loretta/Nina: :ciao: :Party133:
    Agosto 19, 2018, 20:24:28
  • _jan_: :Felici13:
    Agosto 04, 2018, 15:30:40
  • nuvolotta: Ferie... già fatte....
    Agosto 04, 2018, 09:54:58
  • _jan_: Auguri di buon onomastico a tutti gli Alfonso....
    Agosto 01, 2018, 11:10:21
  • _jan_: chiusp per ferie?
    Luglio 30, 2018, 19:50:58
  • _jan_: Buon onomastico a Donatella Seconda........ e la prima? :Shok145:
    Luglio 30, 2018, 06:59:38
  • _jan_: Buon onomastico a tutte le Marta.  :Amore20:
    Luglio 29, 2018, 07:44:31
  • _jan_: Ci sono altre nuove iscritte viste il 26 luglio 2018..... (mica saranno monache)....  :approva:
    Luglio 26, 2018, 18:39:04
  • _jan_: Oggi, 26 luglio 2018, abbiamo una nuova iscritta "Francesca".....Benvenuta Francesca.  :Party133:
    Luglio 26, 2018, 15:49:24
  • _jan_: Buon onomastico anche a tutte le Anna!!! .....
    Luglio 26, 2018, 10:30:21
  • _jan_: Auguri di Buon Onomastico a TUO..... (ogni giorno, credo)..... :sm269:
    Luglio 26, 2018, 10:28:52
  • ketty: ma.... quando è il tuo?
    Luglio 25, 2018, 19:52:19

* Emoticon aggiuntive e link al portale


Autore Topic: PHP e MYSQL  (Letto 3026 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline micdas

  • Administrator
  • Hero Member
  • *****
  • Post: 848
  • Sesso: Maschio
    • sito su Excel ed il suo vba
PHP e MYSQL
« il: Giugno 05, 2010, 22:08:23 »
In questi giorni ho un po' di tempo da dedicare ai miei studi ed ho pensato di condividerli con quanti possano avere un qualche interesse per questo argomento.

Per questo piccolo tutorial sui db, oltre ai files indicati volta per volta, vengono usati due files PHP ed uno JS, questi:
Citazione
config_db.php (che è il file da includere)
functions.php
js.js
Mentre per il file JS mi limito a dire che viene usato in tutte le pagine in cui c'è un Form con campi obbligatori per controllare e validare questi campi, mostrerò ora i files che verranno richiamati in tutte le pagine del tutorial. Questi files verranno inclusi in quasi tutte le pagine che trattano i dati del DB.

config_db.php
Questo file viene usato per rendere disponibili alcune variabili e matrici usate nelle varie pagine del tutorial.
I dati di accesso al DB. Questi dati sono reperibili o creabili nell'hosting (Spazio Web) che usate.
Citazione
In Altervista, per esempio, è possibile accedere a questi dati da Pannello di controllo andando in:
AlterSito -> Risorse & Upgrade -> DataBase
Nella pagina che si apre scendere alla voce "Come accedere" per trovare:
Hostname/server: localhost
Username: .............
Password: facoltativa (puoi lasciare il campo vuoto)
Database: ............
Ecco il file "config_db.php" con le variabili e le matrici che verranno usate nel corso di questo piccolo tutorial.
  • Le variabili sono quelle per la connessione al DB
  • La matrice $campi_rubrica() potrebbe servire per creare una nuova tabella
  • La matrice $nomi_campi() viene usata per scrivere le didascalie a fianco ai controlli che serviranno per scrivere i dati da inserire nel DB o modificare quelli già esistenti.
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
$Host 
"localhost";
$User "username";
$Password "password";
$DBName "nome_db";
$table "rubrica";
$campi_rubrica = array (
 
"id",
 
"cognome",
 
"nome",
 
"nato",
 
"indirizzo",
 
"cap",
 
"citta",
 
"prov",
 
"tel1",
 
"tel2",
 
"tel3"
);
$nomi_campi = array (
 
"id" => "non inserire",
 
"cognome" => "Cognome",
 
"nome" => "Nome",
 
"nato" => "Data di nascita (formato: gg/mm/aaaa)",
 
"indirizzo" => "Indirizzo",
 
"cap" => "CAP",
 
"citta" => "Citt&agrave;",
 
"prov" => "Prov",
 
"tel1" => "Telefono di casa",
 
"tel2" => "Cellulare",
 
"tel3" => "Fax"
);
?>

La seconda matrice, $nomi_campi = array (), che è una matrice associativa, é particolarmente comoda usata in un ciclo di questo genere:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
echo "<table>";
for(
$b=0$b<count ($campi_rubrica); $b++) {
 echo 
"<tr><td>".$b."</td>\n";
 echo 
"<td>".$campi_rubrica[$b]."</td>\n";
 echo 
"<td>".$nomi_campi[$campi_rubrica[$b]]."</td>\n";
 echo 
"</tr>\n";
}
echo 
"</table>";
?>

oppure con quest'altro:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
echo "<table>";
$nr 0;
foreach (
$nomi_campi as $chiave => $valore) {
 echo 
"<tr><td>".$nr."</td>\n";
 echo 
"<td>".$chiave."</td>\n";
 echo 
"<td>".$valore."</td>\n";
 
$nr ++;
}
echo 
"</table>";
?>

che restituiscono questo risultato:
#$campi_rubrica()$nomi_campi()
0idnon inserire
1cognomeCognome
2nomeNome
3natoData di nascita (formato: gg/mm/aaaa)
4indirizzoIndirizzo
5capCAP
6cittaCittà
7provProv
8tel1Telefono di casa
9tel2Cellulare
10tel3Fax

functions.php
In questo file ci sono alcune funzioni che di volta in volta verranno evocate nei vari script.
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
function mostra_campi($tabella) {
 global 
$Host;
 global 
$User;
 global 
$Password;
 global 
$DBName;
 
$Link mysql_connect ($Host$User$Password);
 
$fields mysql_list_fields($DBName$tabella$Link);
 
$columns mysql_num_fields($fields);
 for (
$i 0$i $columns$i++) {
 
$field[] = mysql_field_name($fields$i);
 }
 
mysql_close ($Link);
 return 
$field;
}
// ==============================
function time_serial_da_db($data_letta) {
 
$data_1 str_replace("/""-"$data_letta);
 
$sub explode("-"$data_1);
 
$a $sub[0];
 
$m $sub[1];
 
$g $sub[2];
 
$timestamp_rec mktime(0,0,0,$m,$g,$a);
 return 
$timestamp_rec;
}
// ==============================
function time_serial($data_letta) {
 
$data_1 str_replace("/""-"$data_letta);
 
$sub explode("-"$data_1);
 
$g $sub[0];
 
$m $sub[1];
 
$a $sub[2];
 
$timestamp_rec mktime(0,0,0,$m,$g,$a);
 return 
$timestamp_rec;
}
// ==============================
function verify_record($table$nome$cognome$data) {
 global 
$Host;
 global 
$User;
 global 
$Password;
 global 
$DBName;
 
$Query "SELECT * FROM ".$table." WHERE nome = '".$nome."' AND cognome = '".$cognome."' AND nato = '".$data."';";
 if (!
$link mysql_connect($Host$User$Password)) {
 die (
'errore nella connessione');
 }
 if (!
mysql_select_db($DBName$link)) {
 die(
'DataBase non trovato');
 }
 
$result mysql_query($Query$link);
 if (!
$result) {
 die (
"errore nella Query");
 }
 
$num_rec mysql_num_rows($result);
 
mysql_close ($link);
 if (
$num_rec != 0) {
 return 
$num_rec;
 } else {
 return 
FALSE;
 }
}
// ==============================
function conta_record($tabella) {
 global 
$Host;
 global 
$User;
 global 
$Password;
 global 
$DBName;
 
$Link mysql_connect ($Host$User$Password);
 
$Query "SELECT * FROM ".$tabella;
 if (
mysql_db_query ($DBName$Query$Link)) {
 
$Result mysql_db_query ($DBName$Query$Link);
 
$num_rec mysql_num_rows($Result);
 }
 
mysql_close($Link);
 return 
$num_rec;
}
// ==============================
function connect_db($tabella$where false) {
 global 
$Host;
 global 
$User;
 global 
$Password;
 global 
$DBName;
 
$campi mostra_campi($tabella);
 
$Query "SELECT * FROM ".$tabella;
 if (
$where) {
 
$Query .= $where;
 }
 
$Query .= ";";
 if (!
$link mysql_connect($Host$User$Password)) {
 die (
'errore nella connessione');
 }
 if (!
mysql_select_db($DBName$link)) {
 die(
'DataBase non trovato');
 }
 
$result mysql_query($Query$link);
 if (!
$result) {
 die (
"errore nella query<br />".mysql_error());
 }
 
$num_rec mysql_num_rows($result);
 if (
$num_rec == 0) {
 echo 
"nessun record nella tabella";
 } else {
 echo 
$num_rec " record trovati in archivio<br />\n";
 echo 
"<table>\n";
 echo 
"<tr>\n";
 echo 
"<th>Nome</th>\n";
 echo 
"<th>nato</th>\n";
 echo 
"<th>indirizzo</th>\n";
 echo 
"<th>citt&agrave;</th>\n";
 echo 
"<th>Telefoni</th>\n";
 echo 
"</tr>\n";
 while (
$row mysql_fetch_array($result)) {
 echo 
"<tr>\n";
 echo 
"<td>" $row['cognome'] . " ";
 echo 
$row['nome'] . "</td>\n";
 
$data $row['nato'];
 
$timestamp time_serial_da_db($data);
 
$nuova_data date ("d-m-Y",$timestamp);
 echo 
"<td>" $nuova_data "</td>\n";
 echo 
"<td>" $row['indirizzo'] . "</td>\n";
 echo 
"<td>" $row['cap'] . " ";
 echo 
$row['citta'] . " ";
 echo 
$row['prov'] . "</td>\n";
 echo 
"<td>";
 
$tel = array();
 if (
$row['tel1'] != "") {
 
$tel[] = $row['tel1'];
 }
 if (
$row['tel2'] != "") {
 
$tel[] = $row['tel2'];
 }
 if (
$row['tel3'] != "") {
 
$tel[] = $row['tel3'];
 }
 if (
is_array($tel)) {
 
$telefono implode("<br />"$tel);
 }
 echo 
$telefono;
 echo 
"</td>\n";
 echo 
"</tr>\n";
 }
 
mysql_close ($link);
 echo 
"</table>\n";
 }
}
?>


Prima di concludere passerei in rassegna ciascuna funzione.
function mostra_campi($tabella)
Questa funzione legge i nomi dei campi della tabella rappresentata dalla variabile $tabella e li restituisce in una matrice.
La funzione usata per questa operazione è "mysql_list_fields()" mentre con la funzione "mysql_num_fields()" ne restituisce il numero.

function time_serial_da_db($data_letta)
Con questa funzione leggiamo la data dal DB che è in formato AAAA MM GG e restituiamo il timestamp nel formato GG MM AAAA.

Il timestamp restituisce, in ambiente Unix, restituisce il tempo misurato in secondi a partire dal 1 gennaio 1970, quindi un numero intero. Viene usata la funzione PHP mktime con questi argomenti: mktime (hour, minute, second, month, day, year) e la sintassi è la seguente:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
mktime (date("H"), date("i"), date("s"), date("m"), date("d"), date("Y"))
o, più semplicemente:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
mktime(date("H, i, s, m, d, Y"))
Questo potrebbe essere un possibile valore per la data 5/6/10: 1275767480

function time_serial($data_letta)
Questa funzione è l'opposto di quella appena vista e serve per trasformare una nomale data in formato GG MM AAAA in quella da memorizzare nel DB in formato AAAA MM GG

function verify_record($table, $nome, $cognome, $data)
Uso questa funzione per verificare se nella tabella in uso c'è un record che abbia il nome, il cognome e la data che le sono passati come argomenti.
Se il record viene trovato viene restituito il numero di record, altrimenti viene restituito FALSE.

function conta_record($tabella)
Questa funzione è simile alla precedente ma in ogni caso restituisce il numero di record trovati. Se nessun record viene trovato restituisce 0 (zero).
Per la connessione al DB viene usata una sintassi differente da quella usata nelle altre funzioni e che è da ritenersi obsoleta. Questo fatto è ininfluente ma l'ho usata semplicemente a titolo informativo per avere a disposizione entrambe le sintassi.

function connect_db($tabella, $where = false)
Questa funzione è, tra quelle presentate la più lunga e più complessa.
Non restituisce alcun valore ma viene usata per stampare una tabella dei dati trovati.
Ho optato per questa soluzione per snellire lo script in alcune pagine alleggerendo la mole di codice in esse scritto.
La diversità dalle altre funzioni presentate inizia già nell'enunciato stesso in cui, tra gli argomenti ce n'è uno facoltativo, il $where che per default assume il valore "false".
Questo fa sì che possa essere chiamata sia con
connect_db($table);
che con
connect_db($table, $where);
dopo aver valorizzato la variabile $where con un qualcosa del genere:

Codice: Non sei autorizzato a vedere i links. Registrati o Login
$where = " WHERE cognome LIKE '%".$lemma."%' OR nome LIKE '%".$lemma."%' OR indirizzo LIKE '%".$lemma."%' OR citta LIKE '%".$lemma."%' order by ".$campo;
Questa stringa va ad aggiungersi alla stringa della Query SELECT nel caso l'argomento $where non sia FALSE.
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$Query = "SELECT * FROM ".$tabella;
if ($where) {
$Query .= $where;
}
$Query .= ";";

Altra caratteristica di questa funzione è che al suo interno vengono chiamate altre funzioni:
  • mostra_campi($tabella)
  • time_serial_da_db($data)

Bene ...... questo è per iniziare. Dalla prossima volta continueremo con le vere pagine di esempio.


 :coffe:
« Ultima modifica: Giugno 05, 2010, 22:10:48 da micdas »
E' stupido pensare di non aver bisogno degli altri

Offline Lone Star

  • Global Moderator
  • Sottocapo di 1° classe scelto (S.P.E.)
  • *
  • Post: 1852
  • Sesso: Maschio
Re:PHP e MYSQL
« Risposta #1 il: Giugno 07, 2010, 10:59:11 »
    :tanks: Micdas ..... penso si tratti di quanto mi hai spiegato via skype ..... o no ? :Cartelli2:
    In ogni caso penso che avrò bisogno di una bella lezione privata  :n031:..... oltre a tanti  :coffe: :coffe: :coffe: !
    Certo che non sei proprio il tipo che sta con le mani in mano .... mancando la compagnia serale .... trovi sempre il sistema per divertirti aculturandoti e sperimentando !  :okkey: :bravo:

    Una piccola curiosità ..... come si fanno quegli inserimenti con la barra di scorrimento ?
    Per esser più chiaro, per esempio, questo:
Citazione
  • La matrice $nomi_campi() viene usata per scrivere le didascalie a fianco ai controlli che serviranno per scrivere i dati da inserire nel DB o modificare quelli già esistenti.
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
$Host 
"localhost";
$User "username";
$Password "password";
$DBName "nome_db";
$table "rubrica";
$campi_rubrica = array (
 
"id",
 
"cognome",
 
"nome",
 
"nato",
 
"indirizzo",
 
"cap",
 
"citta",
 
"prov",
 
"tel1",
 
"tel2",
 
"tel3"
);
$nomi_campi = array (
 
"id" => "non inserire",
 
"cognome" => "Cognome",
 
"nome" => "Nome",
 
"nato" => "Data di nascita (formato: gg/mm/aaaa)",
 
"indirizzo" => "Indirizzo",
 
"cap" => "CAP",
 
"citta" => "Citt&agrave;",
 
"prov" => "Prov",
 
"tel1" => "Telefono di casa",
 
"tel2" => "Cellulare",
 
"tel3" => "Fax"
);
?>

....forse potrebbe tornare utile quando un post diventa Kilometrico ( per testo o sequenza di immagini ecc. ) e non si vuole occupare troppo spazio visivo di una pagina ?  :Cartelli2:
 :tanks: ....... e buon  :coffe: !

Offline bloum

  • Amici del NEL-web forum
  • Sottocapo di 1° classe scelto (S.P.E.)
  • *
  • Post: 1620
  • Sesso: Femmina
    • 4 + 1 gatti per un maremmano
  • Onomastico: 19 Ottobre
Re:PHP e MYSQL
« Risposta #2 il: Giugno 08, 2010, 08:48:55 »
 :bye:
l'nserimento di cui parli si ottiene con i tag [ code][ /code], ovviamente senza spazi, ovvero cliccando il pulsantino con il simbolo # che si trova prima della citazione.
Il suo uso reale, viene usato appunto per inserire del codice, parti di programmazione che devono essere scritte esattamente in quel modo.
 :baci1:
Non c'è niente di più forte della gentilezza e niente di più gentile della vera forza.