ARCHIVIO
SCRIPTS
PHP
by Michele Borghi
E-Mick.net - Personal Web Zone - 18/06/2004
1
INDICE
ARRAY
array2url - converte un array associativo in una stringa che passa variabile tramite
un\'URL
clean_array - Elimina gli elementi nulli dell\'array
crea_lista - crea una lista degli elementi di un array
find_vars - Restituisce le variabili presenti in una stringa.
parse_ini_file - Legge il file di configurazione
trim_array - Effettua 'trim' su tutti gli elementi dell'array
DATABASE
cols_names - Restituisce i nomi delle colonne di una tabella del database
find_table_structure - Individua la struttura di una tabella MySQL
get_mysql_info - Estrae informazioni da una query MySQL
insert_into_db - Inserisce i valori contenuti in un array associativo in una tabella
del database
keys - Determina le chiavi di una tabella MySQL
mysql2array - Mette il risultato di una query SQL in un array (di righe della tabella)
mysql2assoc - Crea un array associativo a partire da una query SQL
opzioni - Restituisce un array contenente le opzioni possibili relative a una campo
ENUM o SET di una tabella MySQL
tab - Crea una tabella a partire da un query SQL
tabella - Crea una tabella base a partire da un query SQL
update_db - Aggiorna una tabella MySQL
GRAPHIC
color - Alloca un colore in formato esadecimale
crea_colori - Crea un array di colori in serie
draw - Disegna un punto, una spezzata o un polygono su un'immagine
graph - Crea un grafico data una serie di valori
imagelinethick - Disegna una linea avente uno spessore
make_image - Crea un file da una immagine
resize_image - Ridimensiona e converte un\\\'immagine in un altro file
thumbnail - Crea una immagine piccola avente link all'immagine grande (ideale per
thumbnail di foto)
MATH
dec2fract - Tenta di trasformare un numero decimale nella corrispondente frazione
OUTPUT
button - Crea un bottone che passa variabili GET e/o variabili POST
crea_form - Crea un modulo intabellato
fotopop - Apertura delle immagini in popup delle giuste dimensioni
page_navigator - Barra di navigazione per tabelle che devono essere suddivise su
più pagine
validate - Genera un codice JS evoluto per la validazione di una form
validate_form - Genera il codice JS per la validazione di una form
STRING
array2string - Crea una lista degli elementi di un array
E-Mick.net - Personal Web Zone - 18/06/2004
2
confronta - Confronta una parola con una stringa contenente wild cards
num_in_zeros - Mette gli zeri necessari davanti ad un numero
trim_string - Elimina gli spazi supplementari tra le parole di una frase
SYSTEM
carica_file - Upload di un file e restituzione del nome assegnato
fsize - Determina la dimensione di un file ed eventualmente la restituisce in KByte o
MByte
include_dir - Include tutti i file presenti in una directory
ls - Restituisce un array contenente i file della directory specificata
TIME
calendario - Restituisce un array le cui chiavi sono i giorni numerici del mese e i
valori sono i giorni della settimana relativi
date2time - Trasforma la data dal formato specificato al relativo timestamp
getmicrotime - Restituisce l'attuale timestamp in microsecondi
it_date2date - Trasforma una data in formato 'italiano' un una data formattata
E-Mick.net - Personal Web Zone - 18/06/2004
3
Categoria ARRAY
array2url
DESCRIZIONE
converte un array associativo in una stringa che passa variabile tramite un\'URL
USO
string array2url(array ARRAY)
ARRAY è l'array associativo contente le variabili da passare
Esempio
<?
$array=array("mick"=>"borghi","stefano"=>"zagni");
echo array2url($array);
?>
Restituisce
mick=borghi&stefano=zagni
FUNZIONE
function array2url($array)
{
$new=array();
foreach ($array as $k=>$v) $new[]="$k=".htmlentities(urlencode($v));
$stringa=implode("&", $new);
return $stringa;
}
E-Mick.net - Personal Web Zone - 18/06/2004
4
Categoria ARRAY
clean_array
DESCRIZIONE
Elimina gli elementi nulli dell\'array
USO
array clean_array(array ARRAY)
ARRAY è un array qualsiasi
Restituisce un array uguale a quello passato come argomento privato però degli elementi di
valore nullo.
Mantiene l'associazione con le chiavi.
FUNZIONE
function clean_array($array)
{
$result=array();
foreach ($array as $key=>$value)
if ($value!="") $result[$key]=$value;
return $result;
}
E-Mick.net - Personal Web Zone - 18/06/2004
5
Categoria ARRAY
crea_lista
DESCRIZIONE
crea una lista degli elementi di un array
USO
string crea_lista(array ARRAY [, string VIRGOLA, string APICE, string OPERATORE]);
ARRAY è l'array che contiene i valori da elencare
VIRGOLA la stringa che separa i valori nella lista (il carattere predefinito è la virgola)
APICE la stringa che è prima e dopo ogni valore dell'array (in genere un apice)
OPERATORE la stringa che separa la chiave dal valore di ogni elemento dell'array (quando
l'array è associativo). Se omesso viene considerato solo il valore degli elementi dell'array.
Esempio
<?
$lista=array("mick"=>"M","anna"=>"F","willy"=>"cane");
echo crea_lista($lista,";","'","==");
?>
Restituisce:
'mick==M';'anna==F';'willy==cane'
FUNZIONE
function crea_lista($array,$virgola=",",$apice="",$operatore="")
{
$new=array();
foreach ($array as $k=>$v)
{
if ($operatore) $mick="$k=$v";
else $mick=$v;
$new[]=$apice.$mick.$apice;
}
$stringa=implode($virgola,$new);
return $stringa;
}
E-Mick.net - Personal Web Zone - 18/06/2004
6
Categoria ARRAY
find_vars
DESCRIZIONE
Restituisce le variabili presenti in una stringa.
USO
Con una stringa chiarisco tutto:
<?
$arr=find_vars("ciao [nome] [cognome]");
foreach ($arr as $k=>$v) echo"$k->$v<br>";
?>
restituisce:
[nome] -> nome
[cognome] -> cognome
FUNZIONE
function find_vars($stringa,$first="[",$second="]")
{
$var=array();
while (!$exit)
{
$one=strpos($stringa,$first);
$resto=substr($stringa,$one+1);
$two=strpos($resto,$second);
if ((!(($one)or($one===0)))or(!(($two)or($two===0)))) $exit=1;
if (!$exit)
{
$variabile=substr($stringa,$one+1,$two);
$stringa=substr($resto,$two+1);
$var[$first.$variabile.$second]=$variabile;
}
}
return $var;
}
E-Mick.net - Personal Web Zone - 18/06/2004
7
Categoria ARRAY
parse_ini_file
DESCRIZIONE
Legge il file di configurazione
USO
E' l'equivalente della funzione parse_ini_file necessaria per le versioni precedenti alla numero 4
del PHP.
Tratta da http://www.php.net/
FUNZIONE
if (!function_exists("parse_ini_file"))
{
function parse_ini_file($filename, $process_sections = false)
{
$ini_array = array();
$sec_name = "";
$lines = file($filename);
foreach($lines as $line)
{
$line = trim($line);
if($line == "") continue;
if($line[0] == "[" && $line[strlen($line) - 1] == "]") $sec_name = substr($line, 1,
strlen($line) - 2);
else
{
$pos = strpos($line, "=");
$property = substr($line, 0, $pos);
$value = substr($line, $pos + 1);
if($process_sections) $ini_array[$sec_name][$property] = $value;
else $ini_array[$property] = $value;
}
}
return $ini_array;
}
}
E-Mick.net - Personal Web Zone - 18/06/2004
8
Categoria ARRAY
trim_array
DESCRIZIONE
Effettua 'trim' su tutti gli elementi dell'array
USO
Toglie gli spazi vuoti prima e dopo ogni elemento dell'array.
Utile quando l'array è il risultato della funzione "file".
FUNZIONE
function trim_array($array)
{
$res=array();
foreach($array as $v) $res[]=trim($v);
return $res;
}
E-Mick.net - Personal Web Zone - 18/06/2004
9
Categoria DATABASE
cols_names
DESCRIZIONE
Restituisce i nomi delle colonne di una tabella del database
USO
Restituisce un array contenente i nomi delle colonne della tabella $tab.
FUNZIONE
function cols_names($tab)
{
global $connessione;
//La variabile globale $connessione viene utilizzata in sostituzione delle
seguenti due righe:
//$connessione = @mysql_connect($server,$utente,$password) or die("Il server è
troppo affollato momentaneamente! Riprova più tardi...<br>".mysql_error());
//$db = @mysql_select_db($database,$connessione) or die ("non riesco a selezionare
il database $database");
$sql="select * from $tab";
$query=mysql_query($sql,$connessione) or die("ERRORE: $sql<br>".mysql_error());
$tot=mysql_num_fields($query);
$array=array();
for ($i=0;$i<$tot;$i++) $array[]=mysql_field_name($query,$i);
return $array;
}
E-Mick.net - Personal Web Zone - 18/06/2004
10
Categoria DATABASE
find_table_structure
DESCRIZIONE
Individua la struttura di una tabella MySQL
USO
array find_table_structure(string TAB, connection CONNECTION)
TAB è il nome della tabella
CONNECTION è l'identificativo della connessione
restituisce un array associativo così strutturato
RES[#campo#]["type"] il tipo del campo #campo# come restituito da MySQL
RES[#campo#]["null"] NULL se il campo può avere valori NULL
RES[#campo#]["key"] PRI, UNI, ecc se il campo è una chiave
RES[#campo#]["default"] il valore che il campo assume di default
RES[#campo#]["extra"] eventuali altre specifiche (per es. autoincerment)
RES[#campo#]["type_base"] il tipo senza eventuali sepcifiche tra parentesi
RES[#campo#]["type_specification"] le eventuali specifiche tra parentesi (se ci sono)
RES[#campo#]["type_options"] le eventuali opzioni se tra parentesi ci sono elementi separati
da virgola
RES[#campo#]["number"] il numero d'ordine del campo nella tabella (a partire da zero)
FUNZIONE
function find_table_structure($tab,$connection)
{
$fields=array();
$sql = "show fields from $tab";
$query = mysql_query($sql,$connection) or die("ERRORE: $sql<br>".mysql_error());
$counter = 0;
while (list($f,$t,$n,$k,$d,$e) = mysql_fetch_array($query))
{
$t1 = $t2 = "";
$o = array();
$fields[] = $f;
$type[$f] = $t;
$null[$f] = $n;
$key[$f] = $k;
$default[$f] = $d;
$extra[$f] = $e;
//controllo se il tipo contiene specifiche particolari
if ($pos=strpos($t,"("))
{
$t1 = substr($t,0,$pos);
$t2 = substr($t,$pos+1,strpos($t,")")-$pos-1);
}
else $t1 = $t;
//individuo eventuali opzioni
if (($t1=="enum")or($t1=="set"))
{
$o = explode(",",$t2);
foreach ($o as $i=>$x) $o[$i]=substr($x,1,strlen($x)-2);
$options[$f] = $o;
E-Mick.net - Personal Web Zone - 18/06/2004
11
}
//risultati standard
$structure[$f]["type"] = $t;
$structure[$f]["null"] = $n;
$structure[$f]["key"] = $k;
$structure[$f]["default"] = $d;
$structure[$f]["extra"] = $e;
//risultati ricavati
$structure[$f]["type_base"] = $t1;
$structure[$f]["type_specification"] = $t2;
$structure[$f]["type_options"] = $o;
//altri risultati
$structure[$f]["number"] = $counter;
//incremento il contatore
$counter++;
}
return $structure;
}
E-Mick.net - Personal Web Zone - 18/06/2004
12
Categoria DATABASE
get_mysql_info
DESCRIZIONE
Estrae informazioni da una query MySQL
USO
array get_mysql_info([resource ID_CONNESSIONE])
Restituisce un array associativo contenenti le informazioni estratte dalla query mediante la
funzione mysql_info():
ID_CONNESSIONE è l'identificativo della connessione, se assente restituisce le informazioni
relative all'ultima query effettuata.
Questa funzione è tratta da http://www.PHP.net.
FUNZIONE
function get_mysql_info($linkid = null){
$linkid? $strInfo = mysql_info($linkid) : $strInfo = mysql_info();
$return = array();
ereg("Records: ([0-9]*)", $strInfo, $records);
ereg("Duplicates: ([0-9]*)", $strInfo, $dupes);
ereg("Warnings: ([0-9]*)", $strInfo, $warnings);
ereg("Deleted: ([0-9]*)", $strInfo, $deleted);
ereg("Skipped: ([0-9]*)", $strInfo, $skipped);
ereg("Rows matched: ([0-9]*)", $strInfo, $rows_matched);
ereg("Changed: ([0-9]*)", $strInfo, $changed);
$return['records'] = $records[1];
$return['duplicates'] = $dupes[1];
$return['warnings'] = $warnings[1];
$return['deleted'] = $deleted[1];
$return['skipped'] = $skipped[1];
$return['rows_matched'] = $rows_matched[1];
$return['changed'] = $changed[1];
return $return;
}
E-Mick.net - Personal Web Zone - 18/06/2004
13
Categoria DATABASE
insert_into_db
DESCRIZIONE
Inserisce i valori contenuti in un array associativo in una tabella del database
USO
string insert_into_db(string TABLE, array ARRAY)
TABLE è la tabella del DB nel quale bisogna inserire i dati
ARRAY è l'array associativo che ha come chiave una colonna della tabella e come valore il
dato da inserire nel database.
In caso la chiave non corrisponda con le colonne della tabella il dato viene semplicemente
ignorato.
E' molto comoda per semplici inserimenti nel database mediante una form. In genere come
array associativo si passa la variabile globale $_POST (o $HTTP_POST_VARS) o $_GET (o
$HTTP_GET_VARS)
FUNZIONE
function insert_into_db($table,$array)
{
global $connessione;
//La variabile globale $connessione viene utilizzata in sostituzione delle seguenti
due righe:
//$connessione = @mysql_connect($server,$utente,$password) or die("Il server è
troppo affollato momentaneamente! Riprova più tardi...<br>".mysql_error());
//$db = @mysql_select_db($database,$connessione) or die ("non riesco a selezionare
il database $database");
$sql="show fields from $table";
$query=mysql_query($sql,$connessione) or die("ERRORE GRAVE!");
$campi_validi=$campi_obbligatori=array();
while ($rigo=mysql_fetch_array($query))
{
$campi_validi[]=$rigo[0];
if ((!$rigo[2])and($rigo[5]!="auto_increment")and(!$array[$rigo[0]]))
{
$err="Campo obbligatorio mancante: ".$rigo[0];
break;
}
}
if (!$err)
{
$campi=$valori=array();
foreach ($array as $k=>$v)
if (in_array($k,$campi_validi))
{
$campi[]=$k;
$valori[]="\"$v\"";
}
$sql="INSERT INTO $table (".implode(",",$campi).") values
(".implode(",",$valori).")";
$query=mysql_query($sql,$connessione);
$err=mysql_error();
}
return $err;
E-Mick.net - Personal Web Zone - 18/06/2004
14
}
E-Mick.net - Personal Web Zone - 18/06/2004
15
Categoria DATABASE
keys
DESCRIZIONE
Determina le chiavi di una tabella MySQL
USO
array keys (string TAB [, string TYPE] [, connection CONNESSIONE]])
TAB il nome della tabella
TYPE il tipo di chiave "PRI","UNI", ecc..
CONNESSIONE l'identificativo della connessione MySQL
Restituisce un array avente come valori i campi "chiave" della tabella MySQL specificata come
input
FUNZIONE
function keys($tab,$type="PRI",$connessione="")
{
if (!$connessione) global $connessione;
$sql="show fields from $tab";
$query=mysql_query($sql,$connessione) or die("ERRORE: $sql<br>".mysql_error());
$keys=array();
while ($rigo=mysql_fetch_array($query))
{
$campo=$rigo[0];
$chiave=$rigo[3];
if ($chiave==$type) $keys[]=$campo;
}
return $keys;
}
E-Mick.net - Personal Web Zone - 18/06/2004
16
Categoria DATABASE
mysql2array
DESCRIZIONE
Mette il risultato di una query SQL in un array (di righe della tabella)
USO
Restituisce un array contenente le righe risultato della query sottoforma di array associativo.
Esempio:
<?
$sql="select id,nome,cognome from utenti";
$query=mysql_query($sql,$connessione);
$array=mysql2array($query);
echo $array[2]["nome"];
?>
restituisce il nome del secondo utente
FUNZIONE
function mysql2array($query)
{
$array=array();
while ($rigo=mysql_fetch_assoc($query)) $array[]=$rigo;
return $array;
}
E-Mick.net - Personal Web Zone - 18/06/2004
17
Categoria DATABASE
mysql2assoc
DESCRIZIONE
Crea un array associativo a partire da una query SQL
USO
Analizza il risultato della query $query e restituisce un array avente come chiave la colonna
$key e come valore la colonna $val della selezione SQL.
TABELLA 'gente':
nome | cognome | eta
MICH BORGHI 25
ANNA MARENGO 18
<?
$sql="select * from gente";
$query=mysql_query($sql,$connessione);
$array=mysql2assoc($query,"nome","eta");
foreach ($array as $k=>$v) echo"$k=>$v<br>";
?>
restituirà:
MICH=>25
ANNA=>18
N.B. Se $key="" viene restituito un array con chiave numerica che contiene i valori specificati
nella colonna $val, mentre se $key è un array avente come valori le colonne del risultato della
query SQL e la chiave dell'array risultante sarà una stringa unione deli valori delle colonne
specificate avente come separatore "|".
FUNZIONE
function mysql2assoc($query,$key="",$val)
{
$result=array();
while ($rigo=mysql_fetch_array($query))
{
if
(!$key) $result[]=$rigo[$val];
elseif (is_string($key)) $result[$rigo[$key]]=$rigo[$val];
elseif (is_array($key))
{
$chiave="";
foreach ($key as $k) $chiave[]=$rigo[$k];
$result[implode("|",$chiave)]=$rigo[$val];
}
else $result=FALSE;
}
return $result;
}
E-Mick.net - Personal Web Zone - 18/06/2004
18
Categoria DATABASE
opzioni
DESCRIZIONE
Restituisce un array contenente le opzioni possibili relative a una campo ENUM o SET di una
tabella MySQL
USO
$tabella: nome della tabella MySQL
$campo: nome del campo ENUM o SET della tabella $tabella
Molto comodo per fare delle form con scelta delle opzioni a tendina.
Esempio:
Se il campo CATEGORIA della tabella AUTO è definito con
ENUM("utilitaria","fuoristrada","berlina","coupé")
$array=opzioni("AUTO","CATEGORIA")
La variabile $array contiene tutte le 4 categorie di automobili!
FUNZIONE
function opzioni($tabella,$campo)
{
global $connessione;
//La variabile globale $connessione viene utilizzata in sostituzione delle seguenti
due righe:
//$connessione = @mysql_connect($server,$utente,$password) or die("Il server è
troppo affollato momentaneamente! Riprova più tardi...<br>".mysql_error());
//$db = @mysql_select_db($database,$connessione) or die ("non riesco a selezionare
il database $database");
$sql="show fields from $tabella";
$query=mysql_query($sql,$connessione) or die("ERRORE");
while ($rigo=mysql_fetch_array($query))
{
$nome=$rigo[0];
$tipo=$rigo[1];
if ($nome==$campo) break;
}
$pos=strpos($tipo,"(");
$dentro=substr($tipo,$pos+1,(strlen($tipo)-$pos-2));
$opz=explode(",",$dentro);
foreach ($opz as $i=>$o) $opz[$i]=substr($o,1,(strlen($o)-2));
return $opz;
}
E-Mick.net - Personal Web Zone - 18/06/2004
19
Categoria DATABASE
tab
DESCRIZIONE
Crea una tabella a partire da un query SQL
USO
Questa funzione utilizza le funzioni tabella e page_navigator per realizzare una tabella più
completa a partire da una query SQL. Le prime 6 variabili da passare (di cui solo la prima è
obbligatoria) sono le medesime della funzione table, mentre l'array $costants definisce la
struttura della tabella e del page_navigator.
- $costants["max_rows"]: righe per pagina
- $costants["start_page"]: numero della prima pagina (predefinito 1)
- $costants["max_view_page"]: numero massimo di pagine visualizzate nel navigatore
sottostante la tabella (N.B. viene utilizzata la funzione page_navigator)
La tabella che viene realizzata è navigabile per pagina e ordinabile per colonna (se lo stile è
"classic").
Presto introdurrò maggiori personalizzazione in particolare riguardo il page_navigator (posizione,
formattazione), le variabili da passare per l'ordinamento e la pagina (attualmente sono fissate a
"page" e "order") e l'imposizione dell'utilizzo di un url predefinita (attualmente calcola da solo in
quale pagina viene usato lo script).
FUNZIONE
function
tab($sql,$style="classic",$config=array(),$shade="",$classes=array(),$admin=array(),$
costants=array())
{
global $connessione,$pixel;
//La variabile globale $connessione viene utilizzata in sostituzione delle seguenti
due righe:
//$connessione = @mysql_connect($server,$utente,$password) or die("Il server è
troppo affollato momentaneamente! Riprova più tardi...<br>".mysql_error());
//$db = @mysql_select_db($database,$connessione) or die ("non riesco a selezionare
il database $database");
//La variabile $pixel dovrebbe individuare l'immagine corrispondente ad un pixel
(serve per una buona visualizzazione della tabella, ma non è fondamentale)
global $_GET;
//variabili che definiscono la tabella
if (!$costants["max_rows"])
$costants["max_rows"]=10;
//numero di righe
visualizzate per pagina
if (!$costants["start_page"])
$costants["start_page"]=1;
//numero della
prima pagina
if (!$costants["max_view_page"]) $costants["max_view_page"]=20; //massimo numero di
pagine visualizzate nel navigator
//preparo una stringa di variabile get da passare ai link delle colonne e a il link
del page_navigator
$get="";
foreach ($_GET as $var=>$value)
{
$get.="&$var=$value";
$$var=$value;
}
$get=substr($get,1);
E-Mick.net - Personal Web Zone - 18/06/2004
20
if (!$page) $page=1;
$lower_limit=($page-1)*$costants["max_rows"]; //il limite inferiore da passare alla
query
$query=mysql_query($sql,$connessione) or die("ERRORE: $sql<br>".mysql_error());
$tot=mysql_num_rows($query); //il totale di istanze della query
$tot_page=ceil($tot/$costants["max_rows"]); //il totale delle pagine
$page_name=basename($PHP_SELF); //il nome della pagina
if ($order) $sql.=" order by $order"; //se è stato definito un ordine lo passo alla
query
$sql.=" limit $lower_limit,".$costants["max_rows"].""; //limito la visualizzazione
secondo i parametri definiti
if (strstr($page_name,"?")) $sym="&"; else $sym="?";
$query=mysql_query($sql,$connessione) or die ("ERRORE: $sql<br>".mysql_error());
for ($i=0;$i<mysql_num_fields($query);$i++)
{
$col=trim(mysql_field_name($query,$i));
$col_url=$page_name.$sym."$get&order=".($i+1);
if ($config[$col]["title"]) $col_name=$config[$col]["title"];
else $col_name="".strtoupper($col)."";
//echo"$col - $col_url - $col_name<br>";
//print_r($config);
$config[$col]["title"]="<a href=\"$col_url\">".$col_name."</a>";
}
$query=mysql_query($sql,$connessione) or die("ERRORE:
$sql<br>".mysql_error());
tabella($query,$style,$config,$shade,$classes,$admin);
if (function_exists("page_navigator"))
{
echo"<table>";
echo"<tr class=\"".$classes["navigator"]."\"><td>";
page_navigator($page,$order,$costants["start_page"],$tot_page,$costants["max_view_pag
e"],"<< "," >>","[#]",$page_name.$sym.$get,"page","order");
echo"</td></tr></table>";
}
}
E-Mick.net - Personal Web Zone - 18/06/2004
21
Categoria DATABASE
tabella
DESCRIZIONE
Crea una tabella base a partire da un query SQL
USO
tabella(resource QUERY [, string STYLE, array CONFIG, array SHADE, array CLASSES, array
ADMIN])
QUERY è la variabile contenente il risultato della query (sostanzialmente il risultato della
funzione 'mysql_query')
STYLE stringa che definisce lo stile della tabella; può essere "classic" (default) oppure "forum"
array CONFIG["cols"] l'array delle colonne da visualizzare
string CONFIG[string COLONNA]["title"] il titolo della colonna
string CONFIG[string COLONNA]["format"] il formato in cui viene visualizzato l'elemento della
colonna COLONNA (le variabili sono tra #)
string CONFIG[string COLONNA]["url"] l'url a cui punta l'elemento della colonna (variabili tra #)
string SHADE["even"] colore dello sfondo delle righe pari (es. #FF0000)
string SHADE["odd"] colore dello sfondo delle righe dispari
string SHADE["highlight"] colore dell'highlight (solo style "classic"), può essere "off" se non lo si
vuole (l'highlight funziona solo con IE)
array SHADE["row"][] array di tre valori (string A, string B, string COLOR), cioè "se A==B allora
il colore di sfondo della riga è COLOR
int SHADE se uguale a 1 si avrà una configurazione standard (righe alternate bianco/grigie con
highlight giallo) se lo si lascia vuoto invece le righe non verranno alterate
string CLASSES["table"] la classe del tag <table> (predefinito "table": <table class="table">)
string CLASSES["headers"] la classe del tag <tr> relativo alle intestazioni di colonna (solo
STYLE="classic") (predefinito "headers")
string CLASSES["left"] la classe della parte sinistra della tabella (STYLE="forum")
string CLASSES["right"] la classe della parte destra della tabella (STYLE="forum")
string CLASSES["separator"] classe del tag <hr> STYLE="forum")
string CLASSES["navigator"] classe del tag <tr> dove sta il navigatore
string CLASSES["error"] classe del tag <td> per la segnalazione che la tabella è vuota
string CLASSES["col_COLONNA"] classe del tag <td> della colonna COLONNA
array CLASSES["row"][] array di tre valori (string A, string B, string CLASSE), cioè "se A==B
allora la classe della riga è CLASSE
ADMIN l'array dei "format" degli elementi di amministrazione, per es. modifica e eliminazione di
un record (le variabili devono essere rappresentate tra #: per esempio #id# si riferisce a $id)
FUNZIONE
function
tabella($query,$style="classic",$config=array(),$shade="",$classes=array(),$admin=arr
ay())
{
global $pixel;
E-Mick.net - Personal Web Zone - 18/06/2004
22
//La variabile $pixel dovrebbe individuare l'immagine corrispondente ad un pixel
(serve per una buona visualizzazione della tabella, ma non è fondamentale)
global $_GET;
if (($shade)and(!is_array($shade)))
$shade=array("even"=>"#EAEAEA","odd"=>"#FFFFFF","highlight"=>"#FFFF00");
elseif ($shade)
{
if (!$shade["odd"]) $shade["odd"]="#FFFFFF";
if (!$shade["even"]) $shade["even"]="#FFFFFF";
}
//Individuo il browser
$browser=$_SERVER["HTTP_USER_AGENT"];
if (strstr($browser,"Netscape")) $browser="Netscape";
elseif (strstr($browser,"Opera")) $browser="Opera";
else
$browser="IE";
if ($browser!="IE") $shade["highlight"]="off";
//la funzione JavaScript per l'highlight
if (($shade["highlight"]!="off")and($shade))
{
?>
<script LANGUAGE="JavaScript">
function setPointer(theRow, theAction, theDefaultColor, thePointerColor,
theMarkColor)
{
var theCells = null;
// 1. Pointer and mark feature are disabled or the browser can't get the
//
row -> exits
if ((thePointerColor == '' && theMarkColor == '')|| typeof(theRow.style) ==
'undefined') {return false;}
// 2. Gets the current row and exits if the browser can't get it
if (typeof(document.getElementsByTagName) != 'undefined') {theCells =
theRow.getElementsByTagName('td');}
else if (typeof(theRow.cells) != 'undefined') {theCells = theRow.cells;}
else {return false;}
// 3. Gets the current color...
var rowCellsCnt = theCells.length;
var domDetect
= null;
var currentColor = null;
var newColor
= null;
// 3.1 ... with DOM compatible browsers except Opera that does not return
//
valid values with "getAttribute"
if (typeof(window.opera) == 'undefined'&& typeof(theCells[0].getAttribute) !=
'undefined')
{
currentColor = theCells[0].getAttribute('bgcolor');
domDetect
= true;
}
// 3.2 ... with other browsers
else
{
currentColor = theCells[0].style.backgroundColor;
domDetect
= false;
} // end 3
// 4. Defines the new color
// 4.1 Current color is the default one
if (currentColor == '' || currentColor.toLowerCase() ==
theDefaultColor.toLowerCase())
{
if (theAction == 'over' && thePointerColor != '') {newColor =
thePointerColor;}
else if (theAction == 'click' && theMarkColor != '') {newColor =
theMarkColor;}
E-Mick.net - Personal Web Zone - 18/06/2004
23
}
// 4.1.2 Current color is the pointer one
else if (currentColor.toLowerCase() == thePointerColor.toLowerCase())
{
if (theAction == 'out') {newColor = theDefaultColor;}
else if (theAction == 'click' && theMarkColor != '') {newColor =
theMarkColor;}
}
// 4.1.3 Current color is the marker one
else if (currentColor.toLowerCase() == theMarkColor.toLowerCase())
{
if (theAction == 'click')
{
newColor = (thePointerColor != '')
? thePointerColor
: theDefaultColor;
}
} // end 4
// 5. Sets the new color...
if (newColor)
{
var c = null;
// 5.1 ... with DOM compatible browsers except Opera
if (domDetect)
{
for (c = 0; c < rowCellsCnt; c++) {theCells[c].setAttribute('bgcolor',
newColor, 0);} // end for
}
// 5.2 ... with other browsers
else
{
for (c = 0; c < rowCellsCnt; c++) {theCells[c].style.backgroundColor =
newColor;}
}
} // end 5
return true;
} // end of the 'setPointer()' function
</script>
<?
}
if (!$classes["table"])
if (!$classes["headers"])
colonne (style=0))
if (!$classes["left"])
sx dello style 1
if (!$classes["right"])
dx dello style 1
if (!$classes["separator"])
dell'elemento <hr>
if (!$classes["navigator"])
navigatore
$classes["table"]="table";
$classes["headers"]="headers";
//classe della tabella
//classe delle
$classes["left"]="left";
//classe della parte
$classes["right"]="right";
//classe della parte
$classes["separator"]="separator"; //classe
$classes["navigator"]="navigator"; //classe del
if (!$style) $style="classic";
if (!$config) $config=array();
if (!$admin) $admin=array();
$tot=mysql_num_rows($query);
//determino le colonne e le assegno il titolo
$all_cols=$col_title=array();
for ($i=0;$i<mysql_num_fields($query);$i++)
{
$all_cols[$i]=trim(mysql_field_name($query,$i));
$col_title[$all_cols[$i]]=$config[$all_cols[$i]]["title"];
}
if ($config["cols"]) $cols=$config["cols"];
else $cols=$all_cols;
E-Mick.net - Personal Web Zone - 18/06/2004
24
if ($style=="classic")
{
echo"<table cellspacing=0 class=\"".$classes["table"]."\">\n";
echo"<tr class=\"".$classes["headers"]."\">\n";
foreach ($cols as $i=>$c)
{
if ($col_title[$c]) $col_name=$col_title[$c];
else $col_name="".strtoupper($c)."";
echo"<td>".$col_name."</td>\n";
}
foreach ($admin as $a) echo"<td>$pixel</td>\n";
echo"</tr>\n";
$j=0;
while ($rigo=mysql_fetch_array($query))
{
$j++;
if ($shade)
{
if (($j%2)==1) $bcol=$shade["odd"];
else $bcol=$shade["even"];
if ($shade["highlight"]!="off") $onmouseover = "onmouseover=\"setPointer(this,
'over', '$bcol', '".$shade["highlight"]."', '".$shade["highlight"]."')\"
onmouseout=\"setPointer(this, 'out', '$bcol', '".$shade ["highlight"]."',
'".$shade["highlight"]."')\" onmousedown=\"setPointer(this, 'click', '$bcol',
'".$shade["highlight"]."', '".$shade["highlight"]."')\"";
$add="style='background-color:$bcol' $onmouseover";
}
else $add="";
if ($shade["row"])
{
foreach ($shade["row"] as $shade_row)
{
$first=$shade_row[0];
$second=$shade_row[1];
foreach ($all_cols as $a=>$b) $first=str_replace("#$b#",$rigo[$b],$first);
foreach ($all_cols as $a=>$b) $second=str_replace("#$b#",$rigo[$b],$second);
if ($first == $second)
{
$bcol=$shade_row[2];
if ($shade["highlight"]!="off") $onmouseover = "onmouseover=\"setPointer(this,
'over', '$bcol', '".$shade["highlight"]."', '".$shade["highlight"]."')\"
onmouseout=\"setPointer(this, 'out', '$bcol', '".$shade ["highlight"]."',
'".$shade["highlight"]."')\" onmousedown=\"setPointer(this, 'click', '$bcol',
'".$shade["highlight"]."', '".$shade["highlight"]."')\"";
$add="style='background-color:$bcol' $onmouseover";
}
}
}
$add_class="";
if ($classes["row"])
{
foreach ($classes["row"] as $class_row)
{
$first=$class_row[0];
$second=$class_row[1];
foreach ($all_cols as $a=>$b) $first=str_replace("#$b#",$rigo[$b],$first);
foreach ($all_cols as $a=>$b) $second=str_replace("#$b#",$rigo[$b],$second);
if ($first == $second) $add_class=" class='".$class_row[2]."'";
}
}
echo"<tr $add $add_class>\n";
foreach ($cols as $i=>$c)
{
if ($format=$config[$c]["format"])
{
foreach ($all_cols as $a=>$b) $format=str_replace("#$b#",$rigo[$b],$format);
echo"<td class=\"".$classes["col_$c"]."\">$pixel".$format."</td>\n";
}
E-Mick.net - Personal Web Zone - 18/06/2004
25
elseif ($link=$config[$c]["url"])
{
foreach ($all_cols as $a=>$b) $link=str_replace("#$b#",$rigo[$b],$link);
echo"<td class=\"".$classes["col_$c"]."\"><a
href=\"$link\">$pixel".$rigo[$c]."</td>\n";
}
else echo"<td class=\"".$classes["col_$c"]."\">$pixel".$rigo[$c]."</td>\n";
}
foreach ($admin as $format)
{
foreach ($all_cols as $a=>$b) $format=str_replace("#$b#",$rigo[$b],$format);
echo"<td class=\"".$classes["admin"]."\">".$format."</td>\n";
}
echo"</tr>\n";
}
}
elseif ($style=="forum")
{
echo"<table cellspacing=0 class=\"".$classes["table"]."\">\n";
$j=0;
while ($rigo=mysql_fetch_array(($query)))
{
$j++;
if ($shade)
{
if (($j%2)==1) $bcol=$shade["odd"];
else $bcol=$shade["even"];
$add="style='background-color:$bcol'";
}
else $add="";
foreach ($cols as $i=>$c)
{
if ($col_title[$c]) $col_name=$col_title[$c];
else $col_name="".strtoupper($c)."";
if ($format=$null=$config[$c]["format"])
{
foreach ($all_cols as $a=>$b) $format=str_replace("#$b#",$rigo[$b],$format);
echo"<tr $add><td class=\"".$classes["left"]."\">".$col_name."</td><td
class=\"".$classes["right"]."\">$pixel".$format."</td></tr>\n";
}
elseif ($link=$config[$c]["url"])
{
foreach ($all_cols as $a=>$b) $link=str_replace("#$b#",$rigo[$b],$link);
echo"<tr $add><td class=\"".$classes["left"]."\">".$col_name."</td><td
class=\"".$classes["right"]."\"><a href=\"$link\">$pixel".$rigo[$c]."</td></tr>\n";
}
elseif ($rigo[$c]) echo"<tr $add><td
class=\"".$classes["left"]."\">".$col_name."</td><td
class=\"".$classes["right"]."\">$pixel".$rigo[$c]."</td></tr>\n";
}
echo"<tr $add>";
foreach ($admin as $format)
{
echo"<td class=\"".$classes["admin"]."\" >\n";
foreach ($all_cols as $a=>$b) $format=str_replace("#$b#",$rigo[$b],$format);
echo $format;
echo"</td>\n";
}
echo"</tr>\n";
if ($tot>1)echo"<tr $add><td colspan=2><hr
class=\"".$classes["separator"]."\"></td></tr>\n";
}
}
if ($style=="classic") $colspan=count($cols);
elseif ($style=="forum") $colspan=2;
if ($tot==0) echo"<tr><td colspan=\"$colspan\"
class\"".$classes["error"]."\">[EMPTY]</td></tr>\n";
echo"</table>\n";
E-Mick.net - Personal Web Zone - 18/06/2004
26
}
E-Mick.net - Personal Web Zone - 18/06/2004
27
Categoria DATABASE
update_db
DESCRIZIONE
Aggiorna una tabella MySQL
USO
string update_db(string TABLE, array NEW, array OLD)
TABLE è il nome della tabella da aggiornare
NEW è l'array associativo le cui chiavi sono i campi della tabella e i valori i valori che tali campi
dovranno assumere
OLD è l'array associativo che determina quali campi dovranno essere sostituiti
Restituisce FALSE se l'operazione va a buon fine altrimente la stringa contente l'errore MySQL
generato
FUNZIONE
function update_db($table,$new,$old)
{
global $connessione;
$set=$where="";
foreach ($new as $k=>$v) $set.=",$k=\"$v\"";
foreach ($old as $k=>$v) $where.="and $k=\"$v\"";
$set=substr($set,1);
$where=substr($where,4);
$sql="update $table set $set where $where";
$query=mysql_query($sql,$connessione);
$err=mysql_error();
return $err;
}
E-Mick.net - Personal Web Zone - 18/06/2004
28
Categoria GRAPHIC
color
DESCRIZIONE
Alloca un colore in formato esadecimale
USO
int color(resource IM, string HEX)
IM l'immagine
HEX il numero esadecimale (per es. "EAEAEA")
Funziona come la funzione ImageColorAllocate solo che prende in input il colore in formato
esadecimale. Molto pratico.
FUNZIONE
function color($im,$hex)
{
return imagecolorallocate($im,hexdec(substr($hex,0,2)),hexdec(substr($hex, 2,
2)),hexdec(substr($hex, 4, 2)));
}
E-Mick.net - Personal Web Zone - 18/06/2004
29
Categoria GRAPHIC
crea_colori
DESCRIZIONE
Crea un array di colori in serie
USO
array crea_colori(int TOT [, string EXCEPT])
TOT il totale di colori da generare
EXCEPT il colore da evitare (in genere il colore di sfondo)
L'output è un array di stringhe del tipo "FF00FF"
FUNZIONE
function crea_colori($tot,$except=array("FFFFFF","000000"))
{
if ($tot>214)
{
echo"ERRORE: non possono essere generati più di 214 colori";
exit;
}
$color=array();
$ordine_colori=array("00","FF","99","66","CC","33");
$count=0;
$array_colori=array("00");
$i=0;
while ($count<$tot)
{
//echo"<pre>".print_r($array_colori,true)."</pre>";
foreach ($array_colori as $red)
foreach ($array_colori as $green)
foreach ($array_colori as $blue)
{
$col=$red.$green.$blue;
//echo"$col<br>";
if ((!in_array($col,$except))and(!in_array($col,$color)))
{
$color[]=$col;
$count++;
if ($count>=$tot)
{
return $color;
exit;
}
}
}
$i++;
$array_colori[]=$ordine_colori[$i];
}
}
E-Mick.net - Personal Web Zone - 18/06/2004
30
Categoria GRAPHIC
draw
DESCRIZIONE
Disegna un punto, una spezzata o un polygono su un'immagine
USO
void draw(resource IM, string TYPE, string DATA, string COLOR, int THICK, boolean LABEL)
IM è l'identificativo della risorsa immagine
TYPE può assumere i valori "POINT", "PATH", "POLYGON" a seconda dell'eleemnto da
disegnare
DATA una stringa del tipo "X0,Y0,X1,Y1.....,Xn,Yn"
COLOR è il colore in formato esadecimale (per es: EAEAEA)
THICK la dimensione della linea (solo per i tipi POINT e PATH)
LABEL se true viene posto un'etichetta in alto a destra di ogni punto*
FUNZIONE
function draw($im, $type, $data, $color = "000000", $thick = 1, $label = false)
{
$type = trim(strtoupper($type));
//definisco il colore
$col = imagecolorallocate($im,hexdec(substr($color,0,2)),hexdec(substr($color, 2,
2)),hexdec(substr($color, 4, 2)));
$data = explode(",",$data);
$k = 0;
for ($i=0;$i<count($data);$i++)
{
$x[$k] = trim($data[$i]);
$i++;
$y[$k] = trim($data[$i]);
$k++;
}
switch ($type)
{
case "POINT":
if ($thick == 1) imagesetpixel($im,$x[0],$y[0],$col);
else imagefilledellipse($im,$x[0],$y[0],$thick,$thick,$col);
if ($label) imagestring($im,0,$x[0]+$thick,$y[0]$thick,"(".$x[0].",".$y[0].")",$col);
break;
case "PATH":
if ($label) imagestring($im,0,$x[0]+$thick,$y[0]$thick,"(".$x[0].",".$y[0].")",$col);
for ($i=1;$i<count($x);$i++)
{
imagelinethick($im,$x[$i-1],$y[$i-1],$x[$i],$y[$i],$col,$thick);
if ($label) imagestring($im,0,$x[$i]+$thick,$y[$i]$thick,"(".$x[$i].",".$y[$i].")",$col);
}
break;
case "POLYGON":
imagefilledpolygon($im,$data,count($data)/2,$col);
if ($label)for ($i=0;$i<count($x);$i++) imagestring($im,0,$x[$i]+$thick,$y[$i]$thick,"(".$x[$i].",".$y[$i].")",$col);
break;
}
E-Mick.net - Personal Web Zone - 18/06/2004
31
}
E-Mick.net - Personal Web Zone - 18/06/2004
32
Categoria GRAPHIC
graph
DESCRIZIONE
Crea un grafico data una serie di valori
USO
graph (int WIDTH, int HEIGHT, array COLOR, array ASSE, array DATA, array RANGE [, int
STYLE, array CONFIG, string FILE])
WIDTH larghezza immagine
HEIGHT altezza immagine
string COLOR["background"] colore di sfondo in formato esadecimale (es. FF0000)
string COLOR["foreground"] colore principale
string COLOR["grid"] colore della griglia
string COLOR[string SERIE] colore della serie di dati SERIE
int ASSE["x"], int ASSE["y"] origine degli assi
array DATA[string SERIE]: array del tipo x1=>y1, x2=>y2, ecc..
int RANGE["x_min"], int RANGE["x_max"], int RANGE["x_scale"] valori minimi e massimi
dell'asse x e scala dello stesso
int RANGE["y_min"], int RANGE["y_max"], int RANGE["y_scale"] valori minimi e massimi
dell'asse y e scala dello stesso
array RANGE["x_serie"] array associativo che associa ad ogni valore dell'asse x un'etichetta
array RANGE["y_serie"] array associativo che associa ad ogni valore dell'asse y un'etichetta
string CONFIG["title"] titolo grafico
string CONFIG["x_name"],$conf["y_name"]: nomi degli assi x e y
int CONFIG["thick"] spessore grafico (linee o barre)
int CONFIG["char"] tipo di carattere (valori da 0 a 5)
int CONFIG["legenda"] se impostato a 1 visualizza una legenda a destra del grafico
int CONFIG["bottom_label"] se impostato le etichette dell'asse x vengono visualizzate in
verticale alla distanza definita dall'asse
int CONFIG["left_label"] definisce la distanza delle etichette dell'asse y dall'asse (se non
impostato è pari a 30px)
STYLE se uguale a 1:grafico a linee, 2:grafico a barre verticali affiancate (se presenti più
serie), 3:grafico a barre verticali incolonnate
FILE se impostato l'output viene generato in un file PNG il cui percorso relativo è FILE
altrimenti questa funzione deve essere chiamata come procedura all'interno di una pagina che
abbia solo essa come output e nella quale non siano stati inviati ancora nessun header.
FUNZIONE
if (!function_exists("color"))
{
E-Mick.net - Personal Web Zone - 18/06/2004
33
function color($im,$hex)
{
return imagecolorallocate($im,hexdec(substr($hex,0,2)),hexdec(substr($hex, 2,
2)),hexdec(substr($hex, 4, 2)));
}
}
function assi($im,$x,$y,$w,$h,$color,$range,$config)
{
$sW=$config["tratto"]; //il trattino
$sX=$range["x_scale"]*$w/($range["x_max"]-$range["x_min"]);
$sY=$range["y_scale"]*$h/($range["y_max"]-$range["y_min"]);
if ($color["grid"])
{
for ($i=0;$i<=$w;$i+=$sX) imageline($im,$x+$i,$y,$x+$i,$y$h,color($im,$color["grid"]));
for ($i=0;$i<=$h;$i+=$sY) imageline($im,$x,$y-$i,$x+$w,$y$i,color($im,$color["grid"]));
}
imageline($im,$x,$y,$x+$w,$y,color($im,$color["foreground"])); //asse x
imageline($im,$x,$y,$x,$y-$h,color($im,$color["foreground"])); //asse y
for ($i=0;$i<=$w;$i+=$sX)
{
imageline($im,$x+$i,$y-$sW,$x+$i,$y+$sW,color($im,$color["foreground"])); //tratti
sull'asse x
$number=(string) ($range["x_min"]+$i*($range["x_max"]-$range["x_min"])/$w);
if ($range["x_serie"]) $s=$range["x_serie"][$number];
else $s=$number;
if ($config["bottom_label"])
imagestringup($im,$config["char"],$i+$x,$y+$config["bottom_label"],$s,color($im,$colo
r["foreground"])); //l'etichetta
else imagestring($im,$config["char"],$i+$x,$y+5,$s,color($im,$color["foreground"]));
//l'etichetta
}
for ($i=0;$i<=$h;$i+=$sY)
{
imageline($im,$x-$sW,$y-$i,$x+$sW,$y-$i,color($im,$color["foreground"])); //tratti
sull'asse y
if ($range["y_serie"]) $s=$range["y_serie"][$range["y_min"]+$i*($range["y_max"]$range["y_min"])/$h];
else $s=$range["y_min"]+$i*($range["y_max"]-$range["y_min"])/$h;
if (!$config["left_label"]) $config["left_label"]=30;
imagestring($im,$config["char"],$x-$config["left_label"],$y-$i-5,$s,color($im,$col));
}
}
if (!function_exists("imagelinethick"))
{
//funzione tratta da PHP.net
//http://it2.php.net/manual/it/function.imageline.php
function imagelinethick($image, $x1, $y1, $x2, $y2, $color, $thick = 1)
{
if ($thick == 1) {
return imageline($image, $x1, $y1, $x2, $y2, $color);
}
$t = $thick / 2 - 0.5;
if ($x1 == $x2 || $y1 == $y2) {
return imagefilledrectangle($image, round(min($x1, $x2) - $t), round(min($y1,
$y2) - $t), round(max($x1, $x2) + $t), round(max($y1, $y2) + $t), $color);
}
$k = ($y2 - $y1) / ($x2 - $x1); //y = kx + q
$a = $t / sqrt(1 + pow($k, 2));
$points = array(
round($x1 - (1+$k)*$a), round($y1 + (1-$k)*$a),
round($x1 - (1-$k)*$a), round($y1 - (1+$k)*$a),
round($x2 + (1+$k)*$a), round($y2 - (1-$k)*$a),
round($x2 + (1-$k)*$a), round($y2 + (1+$k)*$a),
);
imagefilledpolygon($image, $points, 4, $color);
E-Mick.net - Personal Web Zone - 18/06/2004
34
return imagepolygon($image, $points, 4, $color);
}
}
function
graph($width,$height,$color,$asse=array(),$data,$range,$style=0,$config=array(),$file
="")
{
$x0=$asse["x"];
$y0=$height-$asse["y"];
$w=$width-2*$x0;
$h=$height-2*$asse["y"];
$im = imageCreate($width,$height);
//sfondo
$background=color($im,$color["background"]);
//colore
$col=color($im,$color["foreground"]);
if ($config["legenda"])
{
$w-=200;
$lev=$asse["y"];
foreach ($data as $serie=>$points)
{
if ($color[$serie]) $col_serie=color($im,$color[$serie]);
else $col_serie=$col;
imagefilledrectangle($im,$x0+$w+50,$lev,$x0+$w+50+10,$lev+10,$col_serie);
imagestring($im,$config["char"],$x0+$w+50+10+10,$lev,$serie,$col);
$lev+=20;
}
}
if ($config["bottom_label"])
{
$y0-=$config["bottom_label"];
$h-=$config["bottom_label"];
}
//il titolo
if ($config["title"])
imagestring($im,$config["char"],$w/2,$asse["y"]/2,$config["title"],$col);
//il nome dell'asse x
if ($config["x_name"]) imagestring($im,$config["char"],$w/2,$height$asse["y"]/2,$config["x_name"],$col);
//il nome dell'asse y
if ($config["y_name"])
imagestringup($im,$config["char"],0,$height/2,$config["y_name"],$col);
//gli assi
$config["tratto"]=$asse["tratto"];
assi($im,$x0,$y0,$w,$h,$color,$range,$config);
//$range["x_serie"]=$r;
//visualizzazione dei dati
$c=0;
foreach ($data as $serie=>$points)
{
$c++;
$flag=0;
if ($color[$serie]) $col_serie=color($im,$color[$serie]);
else $col_serie=$col;
foreach ($points as $x=>$y)
{
$xp=$x;
$yp=$y;
//grafico a linee
E-Mick.net - Personal Web Zone - 18/06/2004
35
if ($style==0)
{
$x=intval(($x-$range["x_min"])*$w/($range["x_max"]-$range["x_min"]));
$y=intval(($y-$range["y_min"])*$h/($range["y_max"]-$range["y_min"]));
if (!$config["thick"]) $config["thick"]=1;
if ($flag) imagelinethick($im,$x0+$x_old,$y0-$y_old,$x0+$x,$y0$y,$col_serie,$config["thick"]);
$x_old=$x;
$y_old=$y;
$flag=1;
}
//grafico a barre
elseif ($style==1)
{
$x=intval(($x-$range["x_min"])*$w/($range["x_max"]-$range["x_min"]));
$y=intval(($y-$range["y_min"])*$h/($range["y_max"]-$range["y_min"]));
$num_serie=count($data);
if (!$config["thick"]) $config["thick"]=4+intval($range["x_scale"]*$w/($range["x_max"]-$range["x_min"]));
$l=intval($config["thick"]/$num_serie);
imagefilledrectangle($im,$x0+$x-$config["thick"]/2+($c-1)*$l,$y0-$y,$x0+$x$config["thick"]/2+$c*$l,$y0-1,$col_serie);
//imagestring($im,1,$x0+$x-$config["thick"]/2,$y0-$y-10,$range["x_serie"][$xp],$col);
}
elseif ($style==2)
{
$x=intval(($x-$range["x_min"])*$w/($range["x_max"]-$range["x_min"]));
$y=(($y-$range["y_min"])*$h/($range["y_max"]-$range["y_min"]));
$old_level[$x]=$level[$x];
$level[$x]+=$y;
if (!$config["thick"]) $config["thick"]=4+intval($range["x_scale"]*$w/($range["x_max"]-$range["x_min"]));
imagefilledrectangle($im,$x0+$x-$config["thick"]/2,$y0$level[$x],$x0+$x+$config["thick"]/2,$y0-1-$old_level[$x],$col_serie);
}
}
}
if (!$file)
{
header('Content-type: image/png');
imagePNG($im);
imageDestroy($im);
}
else
{
ob_start();
imagepng($im);
$image_data = ob_get_contents();
$fp=fopen($file,"w");
fwrite($fp,$image_data,strlen($image_data));
fclose($fp);
ob_end_clean();
return $file;
}
}
E-Mick.net - Personal Web Zone - 18/06/2004
36
Categoria GRAPHIC
imagelinethick
DESCRIZIONE
Disegna una linea avente uno spessore
USO
imagelinethick(resource IMAGE, int X1, int Y1, int X2, int Y2, int COLOR, int THICK)
FUNZIONE
function imagelinethick($image, $x1, $y1, $x2, $y2, $color, $thick = 1)
{
if ($thick == 1) {
return imageline($image, $x1, $y1, $x2, $y2, $color);
}
$t = $thick / 2 - 0.5;
if ($x1 == $x2 || $y1 == $y2) {
return imagefilledrectangle($image, round(min($x1, $x2) - $t), round(min($y1, $y2) $t), round(max($x1, $x2) + $t), round(max($y1, $y2) + $t), $color);
}
$k = ($y2 - $y1) / ($x2 - $x1); //y = kx + q
$a = $t / sqrt(1 + pow($k, 2));
$points = array(
round($x1 - (1+$k)*$a), round($y1 + (1-$k)*$a),
round($x1 - (1-$k)*$a), round($y1 - (1+$k)*$a),
round($x2 + (1+$k)*$a), round($y2 - (1-$k)*$a),
round($x2 + (1-$k)*$a), round($y2 + (1+$k)*$a),
);
imagefilledpolygon($image, $points, 4, $color);
return imagepolygon($image, $points, 4, $color);
}
E-Mick.net - Personal Web Zone - 18/06/2004
37
Categoria GRAPHIC
make_image
DESCRIZIONE
Crea un file da una immagine
USO
make image (IM , string FILE_NAME)
IM è l'identificativo dell'immagine
FILE_NAME è il nome del file
N.B. Può creare solamente immagini if formato JPG, GIF, BMP. Tale scelta dipende
dall'esensione di FILE_NAME
FUNZIONE
function make_image($im,$file_name)
{
ob_start();
//a seconda dell'estensione creo un file diverso
$pathinfo = pathinfo($file_name);
$ext = strtolower($pathinfo["extension"]);
//due casi particolari
switch ($ext)
{
case "jpg": $ext = "jpeg"; break;
case "bmp": $ext = "wbmp"; break;
}
//converto l'immagine nel formato specificato
$function = "image".$ext;
$function($im);
$image_data = ob_get_contents();
$fp = fopen($file_name,"w");
fwrite($fp,$image_data,strlen($image_data));
fclose($fp);
ob_end_clean();
}
E-Mick.net - Personal Web Zone - 18/06/2004
38
Categoria GRAPHIC
resize_image
DESCRIZIONE
Ridimensiona e converte un\\\'immagine in un altro file
USO
resize_image (string SOURCE, string DEST [, int W [,int H [,int QUALITY]]])
SOURCE il nome del file sorgente
DEST il nome del file da creare
W la larghezza della nuova immagine *
H l'altezza della nuova immagine *
QUALITY la qualità della nuova immagine (solo se il file di destinazione è in formato JPEG),
deve essere un valore compreso tra 0 e 100 (di default 75)
* W e H non sono valori veramente opzionali: almeno uno dei due deve essere specificato
altrimenti l'immagine avrà dimensioni 0X0, se ne viene specificato uno solo l'altro verrà calcolato
mantenendo il medesimo rapporto di forma.
FUNZIONE
function resize_image($source,$dest,$w=0,$h=0,$quality=0)
{
//individuo le estensioni
$ext_source = substr($source,strrpos($source,".")+1);
$ext_dest = substr($dest,strrpos($dest,".")+1);
if (strtoupper($ext_source)=="JPG") $ext_source="JPEG";
if (strtoupper($ext_dest)=="JPG") $ext_dest="JPEG";
//estraggo le dimensioni dell'immagine sorgente
$imagedata = getimagesize($source);
$w1 = $imagedata[0];
$h1 = $imagedata[1];
//definisco le nuove dimensioni
if (!$w) $w = round($h*($w1/$h1),0);
if (!$h) $h = round($w*($h1/$w1),0);
//creo l'immagine
if (function_exists("imagecreatetruecolor")) $imagecreate = "imagecreatetruecolor";
else $imagecreate = "imagecreate";
$thumb = $imagecreate ($w, $h);
//carico, copio e creo l'immagine a seconda del tipo di estensione e delle specifiche
$imagecreatefromEXT="imagecreatefrom".$ext_source;
$image = $imagecreatefromEXT($source);
imagecopyresized ($thumb, $image, 0, 0, 0, 0, $w, $h, $w1, $h1);
$imageEXT="image".$ext_dest;
if (($quality)and(strtoupper($ext_dest)=="JPEG")) imagejpeg($thumb,$dest,$quality);
else $imageEXT($thumb, $dest);
}
E-Mick.net - Personal Web Zone - 18/06/2004
39
Categoria GRAPHIC
thumbnail
DESCRIZIONE
Crea una immagine piccola avente link all'immagine grande (ideale per thumbnail di foto)
USO
string thumbnail(string FILE, string DIR, string SUFFIX [,int W [,int H [,boolean FOTOPOP [,int
QUALITY]]]])
FILE il nome del file
DIR la directory in cui deve essere messa l'immagine piccola
SUFFIX il suffisso che va al nome del file piccolo (se il file grande è mick.jpg il file piccolo sarà
mickSUFFIX.jpg)
FOTOPOP se impostato su TRUE apre il file grande in una finestra delle giuste dimensioni
(utilizza la funzione FOTOPOP)
QUALITY imposta la qualità in percentuale dell'immagine (solo per i file in formato JPEG)
N.B. Utilizza anche la funzione "resize_image"!
FUNZIONE
function thumbnail($file,$dir,$suffix,$w=0,$h=0,$fotopop=false,$quality=80)
{
if ((!function_exists("fotopop"))and($fotopop)) die("Manca la funzione \"fotopop\"");
if (!function_exists("resize_image")) die("Manca la funzione \"resize_image\"");
if (!file_exists($file)) die("Il file non esiste");
$pathinfo = pathinfo($file);
if (!$dir) $dir = $pathinfo["dirname"];
$ext = $pathinfo["extension"];
$name = basename($file,".$ext");
$file = $pathinfo["dirname"]."/".$name.".".$ext;
$small_file = $dir."/".$name.$suffix.".".$ext;
if (!file_exists($small_file)) resize_image($file,$small_file,$w,$h,$quality);
$dim_big = getimagesize($file);
if (!$w) $w = round($h*($dim_big[0]/$dim_big[1]),0);
if (!$h) $h = round($w*($dim_big[1]/$dim_big[0]),0);
$dim_small = getimagesize($small_file);
if (($dim_small[0]!=$w)or($dim_small[1]!=$h))
resize_image($file,$small_file,$w,$h,$quality);
if (!$fotopop) return "<a href=\"$file\" target=\"_blank\"><img src=\"$small_file\"
border=0></a>";
else return fotopop($file,"<img src=\"$small_file\" border=0>");
}
E-Mick.net - Personal Web Zone - 18/06/2004
40
Categoria MATH
dec2fract
DESCRIZIONE
Tenta di trasformare un numero decimale nella corrispondente frazione
USO
Restituisce una stringa che rappresenta la frazione equivalente al numero decimale passato
come variabile
Esempio:
<?
echo dec2fract(1.4)
?>
restituisce: "7/5"
FUNZIONE
function dec2fract($dec)
{
//Se le per le seguenti due costanti vengono scelti numeri troppo elevati la
funzione risulta lenta
$max_num=10; //Il numeratore più alto con cui tentare
$max_den=100; //Il denominaztore più alto con cui tentare
if (strstr($dec,"."))
{
for ($n=0;$n<10;$n++)
{
for ($d=1;$d<100;$d++)
{
if (round($n/$d,14)===round($dec,14))
{
$fract="$n/$d";
$d=100;
$n=10;
}
}
}
}
if (!$fract) $fract=$dec;
return $fract;
}
E-Mick.net - Personal Web Zone - 18/06/2004
41
Categoria OUTPUT
button
DESCRIZIONE
Crea un bottone che passa variabili GET e/o variabili POST
USO
$name: definisce la scritta che compare sul pulsante
$page: è la pagina a cui punta la form
$get: array associativo che contiene le variabili da passare come GET
$post: array associativo che contiene le variabili da passare come POST
$class: la classe del tag <input> del bottone
La classe associata al tag <input> è "button".
FUNZIONE
function button($name,$page="",$get=array(),$post=array(),$class="button")
{
$i=0;
foreach ($get as $k=>$g)
{
if ($i==0) $page.="?";
else $page.="&";
$page.="$k=$g";
$i++;
}
$out="<FORM action=\"$page\" method='POST' style='padding:0;margin:0'>";
foreach ($post as $k=>$p) $out.="<INPUT TYPE='HIDDEN' name=\"$k\" value=\"$p\">";
$out.="<INPUT TYPE='SUBMIT' name='button' value='$name' class='$class'>";
$out.="</FORM>";
return $out;
}
E-Mick.net - Personal Web Zone - 18/06/2004
42
Categoria OUTPUT
crea_form
DESCRIZIONE
Crea un modulo intabellato
USO
crea_form(array FIELDS [, string FORM_STRING, array $ATTRIBS, array VALUE, array
LABEL, array CLASSES, array SELECTED_OPTION])
FIELDS è un array che associa il nome del campo al tipo di campo (input/textarea/select)
FORM_STRING è la stringa che completa il tag <form> della tabella (es. "method='POST'
action='mick.php'")
array ATTRIBS[string CAMPO] è un array che specifica gli attributi del campo di nome CAMPO
(es. ATTRIBS["mick"]["type"]="text" aggiunge al tag <input name='mick'> l'assegnazione
"type='text'"; es. ATTRIBS["mick"]["disabled"]="" aggiunge al tag l'attributo "disabled")
string VALUE[string CAMPO] associa al campo denominato CAMPO un valore predefinito nel
caso di tag <input> o <textarea>
array VALUE[string CAMPO] se CAMPO è di tipo <select> VALUE deve contenere un array
che associa ad un nome di opzione un valore (N.B. se il nome dell'opzione è un numero intero
il valore dell'opzione diventa il nome della stessa).
Esempio:
VALUE["mick"]=array("ciccio"=>"123","anna"=>456,12=>"789")
corrisponde a qualcosa del tipo
<select name='mick'>
<option value="123" selected>ciccio</option>
<option value="345">anna</option>
<option value="789">789</option>
</select>
LABEL array che associa il nome del campo all'etichetta che viene visualizzata nella parte
sinistra della tabella relativamente a quel campo
CLASSES array che definisce le classi della tabella
string CLASSES["table"] è la classe del tag <table>
string CLASSES["left"] classe del tag <td> della parte sinistra della tabella
string CLASSES["right"] classe del tag <td> della parte destra della tabella
string CLASSES["input"] classe del tag <input>
string CLASSES["textarea"] classe del tag <textarea>
string CLASSES["select"] classe del tag <select>
string CLASSES["campo_CAMPO"] classe del tag <tr> relativo al campo denominato CAMPO
string SELECTED_OPTION[string CAMPO] definisce quale delle opzioni del campo <select>
denominato CAMPO deve essere già selezionato
Questa funzione si rivela molto utile se utilizzata con molti <select> in quanto è abbastanza
difficile da configurare e non ne vale la pena per form molto semplici.
Deve essere chiamata come una procedura: non restituisce alcunché.
E-Mick.net - Personal Web Zone - 18/06/2004
43
FUNZIONE
function
crea_form($fields,$form_string="",$attribs=array(),$value="",$label="",$classes=array
(),$selected_option=array())
{
echo"<form $form_string>\n";
echo"<table class='".$classes["table"]."'>\n";
foreach ($fields as $c=>$t)
{
if (!isset($label[$c])) $label[$c]=strtoupper($c);
echo"\t<tr class='".$classes["campo_$c"]."'>\n";
echo"\t\t<td class='".$classes["left"]."'>".$label[$c]."</td>\n";
$add="";
if ($attribs[$c])
{
foreach ($attribs[$c] as $k=>$v)
{
if ($v) $add.=" $k=\"$v\"";
else $add.=" $k";
}
}
echo"\t\t<td class='".$classes["right"]."'>";
switch ($t)
{
case "input":
if (!$attribs[$c]["type"]) $add.=" type=\"text\"";
echo"<input name='$c' value=\"".$value[$c]."\" class='".$classes["input"]."' $add>";
break;
case "textarea":
echo"<textarea name='$c' class='".$classes["textarea"]."'
$add>".$value[$c]."</textarea>";
break;
case "select":
echo"\n\t\t\t<select name='$c' class='".$classes["select"]."' $add>\n";
foreach ($value[$c] as $l=>$v)
{
if (($selected_option[$c]==$v)) $add_selected="selected"; else $add_selected="";
if (is_integer($l)) $l=$v;
echo"\t\t\t\t<option value=\"$v\" $add_selected>$l</option>\n";
}
echo"\t\t\t</select>\n";
break;
}
echo"\t\t</td>\n";
echo"\t</tr>\n";
}
echo"</table>\n";
echo"</form>\n";
}
E-Mick.net - Personal Web Zone - 18/06/2004
44
Categoria OUTPUT
fotopop
DESCRIZIONE
Apertura delle immagini in popup delle giuste dimensioni
USO
string fotopop(string FOTO, string OGGETTO)
Nella variabile FOTO deve essere messo il percorso del file corrispondente alla foto, nella
variabile OGGETTO va invece messo l'elemento HTML al quale viene associato il link per
aprire la POPUP.
Molto bello è l'effetto se come oggetto si mette una versione rimpicciolita della stessa foto
(come nella sezione friends di E-Mick.net).
Esempio:
<?
echo fotopop($fotobig,"<img border=\"0\" src=\"$fotosmall\" width=\"50\">");
?>
N.B.
Il file "foto.php" dovrà essere qualcosa del genere:
<html>
<head>
<title>PHOTO</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body border="0" topmargin="0" leftmargin="0" onblur="window.close();">
<img src="<?=$img?>">
</body>
</html>
FUNZIONE
function fotopop($foto,$oggetto)
{
//determino le dimensioni della foto
$size
= @GetImageSize ("$foto");
$l = $size[0]; //larghezza
$h = $size[1]; //altezza
$out="<a href=\"javascript:;\" onClick=\"window.open('foto.php?img=$foto',
'FOTO',
'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=n
o,width=$l,height=$h,left=300,top=100');\">$oggetto</A>";
return $out;
}
E-Mick.net - Personal Web Zone - 18/06/2004
45
Categoria OUTPUT
page_navigator
DESCRIZIONE
Barra di navigazione per tabelle che devono essere suddivise su più pagine
USO
Permette di creare una barra di navigazione completamente personalizzabile in modo
estremamente semplice. Le variabili da passare (*opzionali):
$page: la pagina attuale
$order: l'ordine attuale
$start_page: la pagina di inizio (di solito o 1 o zero)
$num_page: il numero totale di pagine
$max_view_pages: il massimo numero di pagine visualizzabili
$left: il simbolo o l'immagine della freccia di sx (per es: "<<")
$right: freccia di destra
$format: formato dei numeri dove # individua il numero stesso, per esempio la stringa "[#]" crea
un menu fatto [1][2][3] ...
$url: l'indirizzo url della pagina comprensivo di eventuali variabili get
$page_var: la stringa che individua la variabile che contiene il numero di pagina
$order_var: la stringa che individua la variabile che contiene l'ordine
FUNZIONE
function page_navigator($page, $order, $start_page="1", $num_page,
$max_view_pages="10", $left="left ", $right=" right", $format="[#]",
$url="",$page_var="page", $order_var="order")
{
if ($num_page>$start_page)
{
if (strstr($url,"?")) $symbol="&"; else $symbol="?";
if ($page>$start_page) echo"<a href=\"$url".$symbol."$page_var=".($page1)."&$order_var=".$order."\">$left</a> ";
else echo"$left ";
if ($num_page>$max_view_pages)
{
$start = $page-floor($max_view_pages/2);
$end
= $page+floor($max_view_pages/2);
if ($start<$start_page)
{
$end=$end-$start;
$start=$start_page;
}
if ($end>$num_page)
{
$start=$start-($end-$num_page);
$end=$num_page;
}
}
else
{
$start=$start_page;
$end=$num_page;
}
for($i=$start; $i<=$end; $i++)
{
if ($i!=$page) echo "<a
href=\"$url".$symbol."$page_var=".$i."&$order_var=".$order."\">".str_replace("#",$i,$
format)."</a> ";
else echo"".str_replace("#",$i,$format)." ";
}
E-Mick.net - Personal Web Zone - 18/06/2004
46
if ($page<$num_page) echo" <a
href=\"$url".$symbol."$page_var=".($page+1)."&$order_var=".$order."\">$right</a>";
else echo" $right";
}
}
E-Mick.net - Personal Web Zone - 18/06/2004
47
Categoria OUTPUT
validate
DESCRIZIONE
Genera un codice JS evoluto per la validazione di una form
USO
validate (string FORM, array TEST [,array ALERT])
Si usa più o meno come validate_form...
Quando ho più tempo completo la descrizione!
FUNZIONE
function validate($form,$test,$alert=array())
{
echo"<script LANGUAGE=\"JavaScript\">\n";
echo"function validate($form)\n{\n";
foreach ($test as $field=>$tests)
{
foreach ($tests as $i=>$check)
{
if (!$alert[$field][$i]) $alert[$field][$i]="ERROR: ".strtoupper($field)." should be
".strtoupper($check);
if (strtoupper($check=="NOT NULL"))
echo"if ($form.$field.value == '')
{alert(\"".$alert[$field][$i]."\");$form.$field.focus();return false;}\n";
elseif (strtoupper($check=="NUMBER"))
echo"if ($form.$field.value != '') {if (window.RegExp){re=new
RegExp(\"^[0123456789]+$\");if
(!re.test($form.$field.value)){alert(\"".$alert[$field][$i]."\");$form.$field.focus()
;return false;}}}\n";
else
{
$blank
= strpos($check," ");
$metodo
= substr($check,0,$blank);
$rest
= substr($check,$blank+1);
echo"if ($form.$field.value != '') {if (!($form.$field.value.$metodo $rest))
{alert(\"".$alert[$field][$i]."\");$form.$field.focus();return false;}}\n";
}
}
}
echo"return true;\n}\n";
echo"</script>\n";
}
E-Mick.net - Personal Web Zone - 18/06/2004
48
Categoria OUTPUT
validate_form
DESCRIZIONE
Genera il codice JS per la validazione di una form
USO
Deve essere chiamata prima di una form che deve avere un nome $form_name e l'attributo
"onsumbit='return validate_form(this)'".
L'array $check_array contiene come chiavi i test da effettuare nella form dove le variabili sono
all'interno dei cancelletti (es. #mick#). Gli operatori di confronto sono quelli Javascript:
"&&","||","==","!=". I valori dell'array sono invece i rispettivi alert che vengono visualizzati se la
condizione è rispettata.
Esempio:
<?
$test["#nome# == ''"]="Campo NOME mancante";
validate_form("annina",$test);
?>
<form method='post' onsubmit='return validate_form(this)' name='annina'>
NOME:<input type='text' name='nome'><br>
<input type='submit' name='button' value='AVANTI'>
</form>
Se si spinge il bottone senza aver inserito alcun nome viene visualizzato l'errore in una popup.
FUNZIONE
function validate_form($form_name,$check_array)
{
echo"<script LANGUAGE=\"JavaScript\">\n";
echo"function validate_form($form_name)\n{\n";
foreach ($check_array as $format=>$alert)
{
$vars=find_vars($format,"#","#");
foreach ($vars as $k=>$v) $format=str_replace($k,"$form_name.$v.value",$format);
echo"\t\tif ($format)\n\t\t{\n";
echo"\t\t\talert(\"".$alert."\");\n";
echo"\t\t\t$form_name.$v.focus();\n";
echo"\t\t\treturn false;\n\t\t}\n";
}
echo"\t\treturn true;\n}\n";
echo"</script>\n";
}
E-Mick.net - Personal Web Zone - 18/06/2004
49
Categoria STRING
array2string
DESCRIZIONE
Crea una lista degli elementi di un array
USO
Dato un $array restituisce una stringa contenente gli elementi dell'array separati da $virgola e
all'inetrno di due $apice
Esempio:
echo array2string(array("mick","alf","anna")," - ","|");
restituisce:
|mick| - |alf| - |anna|
FUNZIONE
function array2string($array,$virgola=",",$apice="'")
{
$new=array();
foreach ($array as $a) $new[]=$apice.$a.$apice;
$stringa=implode($virgola,$new);
return $stringa;
}
E-Mick.net - Personal Web Zone - 18/06/2004
50
Categoria STRING
confronta
DESCRIZIONE
Confronta una parola con una stringa contenente wild cards
USO
Confronta la variabile $parola con la variabile $stringa contenente wild card (* e ?).
Funziona solo se $stringa contiente al più un asterisco.
Esempio:
<?
echo confronta("michele","?ich*");
?>
restituisce TRUE
Molto utile per ricerche su file di testo od altro.
FUNZIONE
function confronta($parola,$stringa)
{
//la variabile $stringa deve contenere i caratteri speciali "*" e "?"
//Sono accettati solo stringhe con al massimo UN ASTERISCO!!!!
$len=$len_parola=strlen($parola);
$len_stringa=strlen($stringa);
$len_asterisco=$len_parola-$len_stringa+1;
$sostituto="";
for ($i=0;$i<$len_asterisco;$i++) $sostituto.="?";
$stringa=str_replace("*",$sostituto,$stringa);
if (strlen($stringa)==$len)
{
$out=TRUE;
for ($i=0;$i<$len;$i++)
{
$flag=0;
$lettera=substr($parola,$i,1);
$char=substr($stringa,$i,1);
if (($char=="?")or($char==$lettera)) $flag=1;
if ($flag==0) $out=FALSE;
}
}
else $out=FALSE;
return $out;
}
E-Mick.net - Personal Web Zone - 18/06/2004
51
Categoria STRING
num_in_zeros
DESCRIZIONE
Mette gli zeri necessari davanti ad un numero
USO
Esempio:
<?
echo num_in_zeros(12,4);
?>
restituisce: "0012"
FUNZIONE
function num_in_zeros($num,$len)
{
$len_num=strlen($num);
$zeri="";
for ($i=0;$i<$len;$i++) $zeri.="0";
$out=substr_replace($zeri,$num,$len-$len_num,$len_num);
return $out;
}
E-Mick.net - Personal Web Zone - 18/06/2004
52
Categoria STRING
trim_string
DESCRIZIONE
Elimina gli spazi supplementari tra le parole di una frase
USO
Esempio:
<?
echo trim_string("Ciao mamma, a presto.");
?>
restituisce "Ciao mamma, a presto."
FUNZIONE
function trim_string($stringa)
{
$array=explode(" ",$stringa);
$out=array();
foreach ($array as $s)
{
if ($s!=" ") $out[]=$s;
}
$stringa=implode(" ",$out);
return $stringa;
}
E-Mick.net - Personal Web Zone - 18/06/2004
53
Categoria SYSTEM
carica_file
DESCRIZIONE
Upload di un file e restituzione del nome assegnato
USO
string carica_file(string FILE, string FILE_NAME, string DIRECTORY)
FILE il file appena uploadato
FILE_NAME il nome del file
DIRECTORY la directory in cui lo si vuole mettere
Restituisce il nome del file con il percorso.
Viene utilizzato dopo che un file è stato postato da una form. $file è la variabile che contiene il
file postato e $file_name è la variabile (generata assieme a $file) che contiene il nome del file.
//script_form.php
<form action='post' method='multipart/form-data' action='carica_file.php'>
FOTO: <input type='file' name='foto'>
<input type='submit' value='INVIA'>
</form>
//script carica_file.php
<?
$nome=carica_file($foto,$foto_name,"./dir_foto");
?>
<a href='dir_foto/$nome'>VEDI FOTO</a>
N.B. la funzione esegue un controllo sull'esistenza del file che viene uploadato, se esiste
aggiunge un numero alla prima parte del nome del file: per esempio mick.jpg diventa
mick_1.jpg poi mick_2.jpg.
FUNZIONE
function carica_file($file,$file_name,$directory)
{
if (is_uploaded_file($file))
{
$file_name=str_replace("'"," ",$file_name);
$file_name=str_replace("\\","",$file_name);
$ct=0;
$pos=strrpos($file_name,".");
$nome_file=substr($file_name,0,$pos);
$ext=substr($file_name,$pos,4);
while (file_exists("$directory/$file_name"))
{
$ct++;
$file_name=$nome_file."_".$ct.$ext;
}
move_uploaded_file ($file, "$directory/$file_name");
return "$directory/$file_name";
}
else return false;
}
E-Mick.net - Personal Web Zone - 18/06/2004
54
E-Mick.net - Personal Web Zone - 18/06/2004
55
Categoria SYSTEM
fsize
DESCRIZIONE
Determina la dimensione di un file ed eventualmente la restituisce in KByte o MByte
USO
La variabile $file è una stringa che contiene il percorso (assoluto o relativo) al file.
Restituisce una stringa!! Non un numero.
FUNZIONE
function fsize($file)
{
$size=filesize($file);
if ($size>1024*1024) $out=round($size/(1024*1024),2)."M";
elseif ($size>1024) $out=round($size/1024,0)."K";
else $out=number_format($size);
return $out;
}
E-Mick.net - Personal Web Zone - 18/06/2004
56
Categoria SYSTEM
include_dir
DESCRIZIONE
Include tutti i file presenti in una directory
USO
Include nello script tutti i file appartenenti ad una determinata directory. Molto comodo per chi
per esempio usa mettere tutte le funzioni in diversi file all'interno di una specifica directory
($dir).
FUNZIONE
function include_dir($dir)
{
$d = dir("$dir");
while ($elem = $d->read())
if (is_file("$dir/$elem")) include_once("$dir/$elem");
$d->close();
}
E-Mick.net - Personal Web Zone - 18/06/2004
57
Categoria SYSTEM
ls
DESCRIZIONE
Restituisce un array contenente i file della directory specificata
USO
La variabile $dir può essere un percorso assoluto o relativo. Se omessa viene considerato il
percorso corrente dello script.
Restituisce un array.
FUNZIONE
function ls($dir=".")
{
$d = dir("$dir");
$lista=array();
while ($elem = $d->read()) $lista[]=$elem;
$d->close();
return $lista;
}
E-Mick.net - Personal Web Zone - 18/06/2004
58
Categoria TIME
calendario
DESCRIZIONE
Restituisce un array le cui chiavi sono i giorni numerici del mese e i valori sono i giorni della
settimana relativi
USO
array calendario(int MESE, int ANNO[, array CONFIG])
MESE mese in formato numerico (da 1..12)
ANNO anno in due o quattro cifre
CONFIG array opzionale che associa a i giorni della settimana in tre lettere in inglese una
qualsiasi parola (per esempio CONFIG["Mon"]="Lunedì")
FUNZIONE
function calendario($mese,$anno,$config=array())
{
$primo = mktime (0,0,0,$mese,1,$anno);
$ultimo = mktime (0,0,0,$mese+1,1,$anno)-24*60*60;
$totale_giorni = date("d",$ultimo);
$array=array();
for ($i=1;$i<=$totale_giorni;$i++)
{
$giorno = mktime (0,0,0,$mese,$i,$anno);
$giorno = date("D",$giorno);
if (!$config[$giorno]) $config[$giorno]=$giorno;
$array[$i] = $config[$giorno];
}
return $array;
}
E-Mick.net - Personal Web Zone - 18/06/2004
59
Categoria TIME
date2time
DESCRIZIONE
Trasforma la data dal formato specificato al relativo timestamp
USO
int date2time(string FORMAT,string DATE)
FORMAT è una stringa che definisce il formato della data, accetta come valori
- Y: anno in 4 cifre
- y: anno in 2 cifre
- d: giorno in due cifre (da 01 a 31)
- m: mese in due cifre (da 01 a 12)
- H: ora in due cifre nelle 24 ore (da 01 a 24)
- i: minuti in due cifre (da 01 a 60)
- s: secondi in due cifre (da 01 a 60)
DATE è la data che deve essere trasformata, deve corriposndere al formato specificato
Esempio:
date("d/m/y",date2time("Y-m-d H:i:s","2004-02-04 17:18:30"));
Restituisce 04/02/04
FUNZIONE
function date2time($format,$date)
{
$pos=0;
for ($i=0;$i<strlen($format);$i++)
{
$char=substr($format,$i,1);
switch ($char)
{
case "d":
$day=substr($date,$pos,2);
$pos+=2;
break;
case "m":
$month=substr($date,$pos,2);
$pos+=2;
break;
case "y":
$year=substr($date,$pos,2);
$pos+=2;
break;
case "Y":
$year=substr($date,$pos,4);
$pos+=4;
break;
case "H":
$hour=substr($date,$pos,2);
$pos+=2;
break;
case "i":
$min=substr($date,$pos,2);
$pos+=2;
E-Mick.net - Personal Web Zone - 18/06/2004
60
break;
case "s":
$sec=substr($date,$pos,2);
$pos+=2;
break;
default:
$pos++;
break;
}
}
return mktime($hour,$min,$sec,$month,$day,$year);
}
E-Mick.net - Personal Web Zone - 18/06/2004
61
Categoria TIME
getmicrotime
DESCRIZIONE
Restituisce l'attuale timestamp in microsecondi
USO
FUNZIONE
function getmicrotime()
{
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
E-Mick.net - Personal Web Zone - 18/06/2004
62
Categoria TIME
it_date2date
DESCRIZIONE
Trasforma una data in formato 'italiano' un una data formattata
USO
$string deve contenere la data in italiano tipo gg/mm/aaaa. si può anche specificare il separatore
($separator) e il formato della data in uscita (come per la funzione PHP "date"
FUNZIONE
function it_date2date($string,$format="Y-m-d",$separator="/")
{
$d=explode($separator,$string);
$time=mktime(0,0,0,(int)$d[1],(int)$d[0],(int)$d[2]);
return $date=date($format,$time);
}
E-Mick.net - Personal Web Zone - 18/06/2004
63