Creazione di una tabella
Per questa operazione uso due files:
* crea_tables.php
* crea_tables_crea.php
Questo il codice del file crea_tables.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Creazione di una tabella</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<link href="css/stile.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="container">
<div id="header">
<h1> </h1>
</div>
<div id="navigation"> </div>
<div id="content">
<h1>Creazione di una nuova tabella</h1>
<h2>creazione di una nuova tabella</h2>
<p>Da questa pagina è possibile creare una tabella se questa non esiste</p>
<?php
include ("res/config_db.php");
include ("res/functions.php");
$Query = "SHOW TABLES FROM $DBName";
$all_tables = show_tables($Query);
if (in_array($table, $all_tables)) {
echo "La tabella " . $table . " esiste<br />\n";
echo "Non necessaria la sua creazione<br />\n";
} else {
echo "La tabella " . $table . " non esiste<br />\n";
echo "<a href=\"crea_tables_crea.php?tabella=".$table."\">Per creare la tabella " . $table . "</a><br />\n";
}
?>
</div>
<div id="footer">
<?php
include ("res/link.php");
?>
</div>
</div>
</body>
</html>
In questo file non si nota nulla di particolare, ma diamo lo stesso alcune note:
La funzione PHP include ()
Si parte con l'inclusione di due files che contengono alcune variabili comuni a tutto il settore (il primo file incluso) ed alcune funzioni a cui faremo spesso riferimento (il secondo file incluso):
include ("res/config_db.php");
include ("res/functions.php");
La funzione personale show_tables()
Subito dopo notiamo la prima Query con la quale adremo ad interrogare la nostra funzione personale, show_tables().
$Query = "SHOW TABLES FROM $DBName";
$all_tables = show_tables($Query);
Questa la funzione creata per leggere le tabelle nel nostro DB:
<?php
function show_tables($Query, $pref="") {
global $Host;
global $User;
global $Password;
global $DBName;
if (!$link = mysql_connect($Host, $User, $Password)) {
return FALSE;
}
if (!mysql_select_db($DBName, $link)) {
return FALSE;
}
$result = mysql_query($Query, $link);
if (!$result) {
return FALSE;
} else {
$tab = array();
while ($row = mysql_fetch_row($result)) {
$tab[] = $row[0];
}
}
mysql_close ($Link);
return $tab;
}
?>
La query SHOW TABLES FROM $DBName fa leggere tutte le tabelle presenti nel Data Base attivo
Nella funzione show_tables() le tabelle, se trovate, vengono poste in una matrice e restituite alla pagina richiedente.
L'esistenza della tabella viene accertata usando la funzione PHP in_array() usando l'istruzione condizionale:
if (in_array($table, $all_tables)) {
................
} else {
................
}
Se la tabella esiste viene visualizzato il messaggio "La tabella esiste", altrimenti viene mostrato un link che porterà alla seconda pagina che provvederà alla sua creazione.
Questo il codice del file crea_tables_crea.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Creazione di una tabella</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<link href="css/stile.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="container">
<div id="header">
<h1> </h1>
</div>
<div id="navigation"> </div>
<div id="content">
<h1>Creazione di una nuova tabella</h1>
<h2>creazione di una nuova tabella</h2>
<p>In questo proveremo a creare una tabella se questa non esiste</p>
<?php
include ("res/config_db.php");
include ("res/functions.php");
$tabella = $_REQUEST['tabella'];
$Query = "SHOW TABLES FROM $DBName";
$all_tables = show_tables($Query);
if (in_array($table, $all_tables)) {
echo "La tabella " . $table . " esiste<br />\n";
echo "Non necessaria la sua creazione<br />\n";
} else {
echo "La tabella " . $table . " non esiste<br />\n";
echo "Creazione della tabella " . $tabella . "<br />\n";
// $Query .= " (id mediumint unsigned NOT NULL auto_increment, ";
$Query = "CREATE TABLE " . $tabella;
$Query .= " (id INT(10) NOT NULL AUTO_INCREMENT, ";
$Query .= implode(", ", $tipi_campi);
$Query .= ", PRIMARY KEY (id)) ENGINE = MyISAM";
echo "La query<br />\n" . $Query . "<br /><br />\n";
if (execute_query($Query)) {
echo "La tabella è stata creata con successo<br />\n";
} else {
echo "Si sono verificati dei problemi nella procedura<br />\n";
}
}
?>
</div>
<div id="footer">
<?php
include ("res/link.php");
?>
</div>
</div>
</body>
</html>
Anche qui pochissime note in quanto il codice non è eccessivamente complesso.
La funzione PHP include ()
Si parte con la solita inclusione dei files comuni
include ("res/config_db.php");
include ("res/functions.php");
La funzione personaòe show_tables()
Quindi si controlla se la tabella esiste tramite la mia funzione show_tables().
<?php
function show_tables($Query, $pref="") {
global $Host;
global $User;
global $Password;
global $DBName;
if (!$link = mysql_connect($Host, $User, $Password)) {
return FALSE;
}
if (!mysql_select_db($DBName, $link)) {
return FALSE;
}
$result = mysql_query($Query, $link);
if (!$result) {
return FALSE;
} else {
$tab = array();
while ($row = mysql_fetch_row($result)) {
$tab[] = $row[0];
}
}
mysql_close ($Link);
return $tab;
}
?>
Se tutto procede come previsto il restante codice viene scritto nella else della if.
Questo controllo si rende necessario in questa fase solo per evitare il tentativo di creare nuovamente la tabella che causerebbe un errore se si fa refresh sulla pagina.
$Query = "SHOW TABLES FROM $DBName";
$all_tables = show_tables($Query);
if (in_array($table, $all_tables)) {
...................
} else {
...............
}
Creazione della Query per creare la tabella
Per le Query io uso scriverle partendo dalle matrici.
Per questo nel file config_db.php ho messo questa matrice:
<?php
$tipi_campi = array (
"cognome varchar(100)",
"nome varchar(100)",
"nato DATE NOT NULL DEFAULT '0000-00-00'",
"indirizzo varchar(100)",
"cap varchar(10)",
"citta varchar(100)",
"prov varchar(10)",
"tel1 varchar(20)",
"tel2 varchar(20)",
"tel3 varchar(100)"
);
/*
ASSEGNAZIONE DEI TIPI DI DATI AI VARI CAMPI:
in questo caso abbiamo assegnato a tutti i campi
il tipo varchar(xxx) di lunghezza variabile a seconda
del tipo di dati che che ci aspettiamo
solo il campo "nato" ha un tipo DATE
nel formato '0000-00-00'
*/
?>
Nella pagina dove mi serve agisco in questo modo:
creo la prima e la seconda parte della Query concatenando nella variabile $Query i primi due segmenti di quella che deve essere la stringa finale:
$Query = "CREATE TABLE " . $tabella;
$Query .= " (id INT(10) NOT NULL AUTO_INCREMENT, ";
sempre nella stessa variabile, $Query, concateno il terzo segmento della stringa usando la funzione PHP implode() sulla matrice $tipi_campi usando la virgola ed uno spazio come caratteri separatori:
$Query .= implode(", ", $tipi_campi);
termino concatenando nella variabile $Query l'ultimo segmento di stringa:
$Query .= ", PRIMARY KEY (id)) ENGINE = MyISAM";
Alla fine ottengo la Query desiderata:
CREATE TABLE rubrica (id INT(10) NOT NULL AUTO_INCREMENT, cognome varchar(100), nome varchar(100), nato DATE NOT NULL DEFAULT '0000-00-00', indirizzo varchar(100), cap varchar(10), citta varchar(100), prov varchar(10), tel1 varchar(20), tel2 varchar(20), tel3 varchar(100), PRIMARY KEY (id)) ENGINE = MyISAM
Funzione personale execute_query()
Ottenuta la Query finale possiamo far lavorare il DB. Chiamo in causa la mia funzione personale che non ritorna alcun valore.
if (execute_query($Query)) {
..................
} else {
..............
}
Questa la funzione chiamata:
<?php
function execute_query($query) {
global $Host;
global $User;
global $Password;
global $DBName;
if (!$link = mysql_connect($Host, $User, $Password)) {
return FALSE;
}
if (!mysql_select_db($DBName, $link)) {
return FALSE;
}
$result = mysql_query($query, $link);
if (!$result) {
return FALSE;
}
mysql_close ($link);
return TRUE;
}
?>
Queste le due pagine che servono per creare una tabella.
La prossima volta vedremo la procedura, altrettanto semplice per eliminare una tabella
Ciao e buon lavoro.