titleExBB: Forum flat-db in italiano

ExBB logo

ExBB (Exclusive Bulletin Board) è un potente script forum scritto in PHP open source. E' altamente configurabile, sono disponibili inoltre molti MOD. Non necessita di nessun tipo di database come MySql o PostgreSQL.


  
title
CSS, JavaScript
Immagini semitrasparenti
Compatibilità:

# For IE we can set: this.filters.alpha.opacity=50
# For Mozilla we set: this.style.MozOpacity=0.5
<img
src="data/thumbs/Art/ponte.jpg.jpg"
width="105" height="140"
alt="solar-radar (7K)"
style="-moz-opacity:0.5; filter:alpha(opacity=50); cursor:hand"
onmouseover="this.style.MozOpacity=1; this.filters.alpha.opacity=100"
onmouseout="this.style.MozOpacity=0.5; this.filters.alpha.opacity=50"
>

Al passaggio del mouse l'immagine si "illumina".

solar-radar (7K)


giovedì, 13 ottobre 2005 -- 16:51
  |  Rating starRating starRating starRating starRating star ( 0 / 0 )


  
CSS Transparency for Internet Explorer (IE), Mozilla and Safari.
<style type="text/css">
<!--
/* This is the background image */

div.prova {
padding:20px;
background: url(albums/Art/elfo.jpg);
border: 2px solid blue;}

/* This is the transparent box 50% */
div.prova0 {
width: 300px;
border: 2px solid blue;

background-color: #fff;
filter:alpha(opacity=50);
opacity: 0.5;
-moz-opacity:0.5;
}

-->
</style>

Ecco un esempio:
<div class="prova">
<div class="prova0">
50% Lorem ipsum dolor sit amet, consectetuer adipiscing etc. etc.
</div>

</div>

Produrrà una cosa di questo tipo:
50% Lorem ipsum dolor sit amet, consectetuer adipiscing etc. etc.
80% Lorem ipsum dolor sit amet, consectetuer adipiscing etc. etc.
Lorem ipsum dolor sit amet, consectetuer adipiscing etc. etc.

Viene però applicato anche al testo:

50% Lorem ipsum dolor sit amet, consectetuer adipiscing etc. etc.
80% Lorem ipsum dolor sit amet, consectetuer adipiscing etc. etc.
Lorem ipsum dolor sit amet, consectetuer adipiscing etc. etc.


ATTENZIONE!: Potrebbero esserci incompatibilità con alcuni browser.
giovedì, 13 ottobre 2005 -- 03:06
  |  Rating starRating starRating starRating starRating star ( 0 / 0 )


  
title
PHP, JavaScript
Risoluzione schermo
Se avremo per qualche motivo bisogno di conoscere la risoluzione schermo dei visitatore, ecco un semplice script che integra PHP a Javascript:

get_resolution.php


Download this script 1:  <?
 2:  
if(isset($HTTP_COOKIE_VARS["users_resolution"]))
 3:      
$screen_res = $HTTP_COOKIE_VARS["users_resolution"];
 4:  else
//means cookie is not found set it using Javascript
 5:  
{
 6:  
?>
 7:  
<script language="javascript">
 8:  <!--
 9:  writeCookie();
10:  
11:  function writeCookie()
12:  {
13:   var today = new Date();
14:   var the_date = new Date("December 31, 2023");
15:   var the_cookie_date = the_date.toGMTString();
16:   var the_cookie = "users_resolution="+ screen.width +"x"+ screen.height;
17:   var the_cookie = the_cookie + ";expires=" + the_cookie_date;
18:   document.cookie=the_cookie
19:      
20:   location = 'get_resolution.php';
21:  }
22:  //-->
23:  </script>
24:  <?
25:  
}
26:  
?>
27:  
</HEAD>
28:  <BODY>
29:  <?php
30:  
echo "Hai una risoluzione di: $screen_res";
31:  
?>

Produrrà: un risultato di questo tipo: esempio
martedì, 11 ottobre 2005 -- 14:01
  |  Rating starRating starRating starRating starRating star ( 0 / 0 )


  

Protezione di pagine con PHP tramite variabili di sessione.


proteggere aree del vostro sito con php non è troppo difficile. Si possono usare a tale scopo le variabili di sessione. L'esempio qui riportato utilizza quattro file:

* login.php
* destroy.php
* check.php
* pasx.txt


più tutte le pagine protette (nel nostro esempio solamente inizia.php). Il principio è piuttosto semplice: verificato il login, viene impostata una variabile di sessione, in particolare autorizzato, che verrà poi testata in ogni pagina da proteggere. Il controllo avviene tramite il minuscolo script, check.php, che deve essere incluso in tutte le pagine riservate, prima del tag <html>.
Tutti i nomi utente e password sono contenuti in un file di testo. Tale file (pasx.txt) in questo esempio, per semplificare, è leggibile in chiaro, ma si può aumentare notevolmente il livello di sicurezza criptando sia il nome utente che la password tramite, ad esempio, la codifica MD5.

Un ulteriore grado di protezione può essere introdotto posizionando il file pasx.txt all'interno di una cartella dedicata, e rendendolo inaccessibile alla lettura via web tramite il pannello di controllo sui piani windows, e tramite il file .htaccess su linux. La soluzione ottimale è naturalmente quella di conservare i dati di accesso in un database.

La struttura di pasx.txt è la seguente:

pasx.txt


prova~:~prova
test~:~test
tentativo~:~tentativo

ogni riga del file contiene una coppia (userid,passwd) separata dai caratteri speciali ~:~

login.php

 1:  <?php
 2:  session_start
();
 3:  
 4:  if (isset(
$_POST["invio"])) {
 5:    
$puntatore fopen("testi/pasx.txt""r");
 6:    
$trovato 0;
 7:    while ((!
feof($puntatore)) && (!$trovato)) {
 8:      
$linea fgets($puntatore);
 9:      
$trovato stristr($linea$_POST["userid"]);
10:      
$puntatore++;
11:    }
12:  
13:    
fclose($puntatore);
14:    list(
$nomeutente$password) = split("~:~"$linea);
15:    
16:  if ((
$trovato)  && ($_POST["passwd"] == trim($password))) {
17:      
session_register('autorizzato');
18:      
$_SESSION["autorizzato"] = 1;
19:      
$destinazione "inizia.php";
20:    } else {
21:      
$destinazione "destroy.php";
22:    }
23:  
24:    echo 
'<script language=javascript>
25:  document.location.href="' 
.$destinazione'"</script>'
26:  } else {
27:  
28:    
// HTML ?>
29:  
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
30:    <html>
31:    <head>
32:    <title>Prova Login php</title>
33:    <meta name="Generator" content="EditPlus">
34:    <meta name="Author" content="">
35:    <meta name="Keywords" content="">
36:    <meta name="Description" content="">
37:    </head>
38:   
39:   <body>
40:    <form method=post action="login.php">
41:      <table width="300" cellpadding="4" cellspacing="1"
42:   border="0">
43:        <tr>
44:          <td colspan="2" align="left">
45:            <u>inserite nome utente e password</u>:
46:          </td>
47:        </tr>
48:        <tr>
49:          <td>
50:            nome utente: 
51:          </td>
52:          <td>
53:            <input type="text" name="userid">
54:          </td>
55:        </tr>
56:        <tr>
57:          <td>
58:            password: 
59:          </td>
60:          <td>
61:            <input type="password" name="passwd">
62:          </td>
63:        </tr>
64:        <tr>
65:          <td colspan="2">
66:            <input type="submit" name="invio" value="invio">
67:              
68:            <input type="reset" name="cancella" 
69:  value="cancella">
70:          </td>
71:        </tr>
72:      </table>
73:      <br>
74:    </form>
75:    </body>
76:    </html>
77:  
78:  <? //fine HTML
79:  
}
80:  
?>  
Lo script login.php si preoccupa di mostrare all'utente il form di immissione dati (userid e passwd) e di verificare che i valori immessi corrispondano ad una delle coppie presenti nel file pasx.txt. Se l'utente viene riconosciuto, lo script, dopo aver inizializzato sia la sessione che la variabile autorizzato, , indirizza il browser verso la prima pagina protetta inizia.php , altrimenti richiama lo script destroy.php che elimina tutto il contenuto della sessione aperta. E' importantissimo, per il funzionamento del sistema, che la pagina login.php riporti la riga di codice:
<? session_start(); ?>
prima del tag <html>.

check.php

1:    <?php
2:  session_start
();
3:  if (!
session_is_registered('autorizzato')) {
4:    echo 
"<h1>Area riservata - accesso negato</h1>";
5:    die;
6:  }
7:  
?>
8:  
  
Una volta attivata la variabile di sessione autorizzato, ogni pagina che includerà lo script check.php verrà visualizzata senza problemi. Se il login non ha avuto successo, invece, viene mostrato un messaggio di errore.

Tutte le pagine protette dovranno contenere, prima del tag <html>, questa riga di codice:
<? include("check.php"); ?>
La sessione viene terminata in due modi, chiudendo il browser, o richiamando lo script destroy.php.

destroy.php

1:    <?php
2:  session_start
();
3:  
session_unset();
4:  
session_destroy();
5:  
?>
6:  
<script language="JavaScript">
7:  document.location.href = "login.php"
8:  </script>  
Gli script mostrati in questo breve esempio non sono completi, e devono essere integrati nelle vostre pagine. Qui di seguito un esempio di pagina protetta dalla variabile di sessione autorizzato:

inizia.php

 1:  
 2:  <? include("check.php"); ?>
 3:  
<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
 4:  <html>
 5:  <head>
 6:  <title> Pagina di test - PHP login </title>
 7:  <meta name="Generator" content="EditPlus">
 8:  <meta name="Author" content="">
 9:  <meta name="Keywords" content="">
10:  <meta name="Description" content="">
11:  </head>
12:  <body>
13:  Esempio: login effettuato con successo
14:  </body>
15:  </html> 

sabato, 08 ottobre 2005 -- 10:32
  |  Rating starRating starRating starRating starRating star ( 0 / 0 )


  
Questa sequenza assicura che le sottopagine non verranno caricate al di fuori del frameset.
Se un visitatore inserisce l'URL di una sottopagina - la nostra sequenza farà sì che il frameset venga caricato con la sottopagina in uno dei frame.
Sarà necessario inserire una breve sequenza nella sezione <head> sia sulla pagina del frameset sia su ognuna delle sottopagine.

Quello che succede realmente è questo:
Se una sottopagina viene caricata al di fuori del frameset, la sequenza sulla sottopagina lo rileverà, e caricherà invece il frameset.
Quando il frameset viene caricato, la sequenza sul frameset caricherà la relativa sottopagina nel frame window corretto.

IL CODICE PER LE SOTTOPAGINE

La sequenza da copiare e incollare sulle sottopagine é questa:
<HEAD>

<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">

<!--
var correct_frame = 0 + (parent.nav ? 1 : 0);
if (self == top &#124;&#124; !correct_frame)
top.location.href = 'framespage.htm?subpage.htm';
//-->

</SCRIPT>
</HEAD>

Personalizza questa riga per adattarla alle tue pagine:
top.location.href = 'framespage.htm?subpage.htm';

framespage.htm è il nome della tua pagina dei frame.
subpage.htm è la pagina dove incollerai il codice.

Se la sottopagina si chiamasse mypage.htm e la pagina dei frames si chiamasse index.htm, il link sarebbe:
top.location.href = 'index.html?mypage.htm';

COME FUNZIONA


Questa riga rileva se la pagina è caricata o meno in un frameset:
if (self == top &#124;&#124; !correct_frame)

Se la pagina non è caricata in un frameset, verrà eseguito il comando su questa riga:
top.location.href = 'framespage.htm?subpage.htm';

Questo fa aprire la pagina frameset come se tu avessi inserito http://www.yourdomain.com/framespage.htm?subpage
nella casella url del tuo browser.

Il trucco dell'intera sequenza è che la sequenza nella framespage può accedere a ciò che viene inserito subito dopo il simbolo ? attraverso l'oggetto window.location.search, incorporato in javascript.

Questo è il modo in cui vengono passate le informazioni per indicare alla pagina del frameset quale sottopagina caricare.

IL CODICE PER LA PAGINA FRAMESET


Questa è la sequenza da copiare e incollare sulla pagina dei frame:
<HTML>
<HEAD>
<TITLE>MyFramesPage</TITLE>
</HEAD>

<SCRIPT LANGUAGE="JavaScript">
<!--
var correct_frame = true;
document.write('<FRAMESET COLS="50%,50%">');
document.write('<FRAME SRC="navpage.htm" NAME="nav">');
document.write('<FRAME SRC="',(location.search ?
location.search.substring(1):"defaultsub.htm"),'"" NAME="display">');
document.write('<\/FRAMESET>');
//-->
</SCRIPT>

</HTML>

Personalizza i valori del frameset per adattarli alla tua pagina.

Ricordati di includere tutte le dichiarazioni relative al frameset in enunciati del tipo document.write - nella stessa maniera in cui il frame "nav" viene definito nell'esempio qui sopra.

Il frame window che caricherà le sottopagine dovrà essere così:
document.write('<FRAME SRC="',(location.search ? location.search.substring(1):"defaultsub.htm"),'"" NAME="display">');

Valori della riga qui sopra che possono essere cambiati secondo le proprie esigenze:

* defaultsub.htm è la pagina di default che viene aperta se il frameset viene aperto normalmente (Cioè: Se il frameset non viene caricato dalla sequenza in una sottopagina).
* display è il nome del frame. Puoi scegliere qualsiasi nome per il frame.

COME FUNZIONA


Questa funzione è in grado di stabilire se un valore è stato passato alla pagina frameset che segue un simbolo ? nell'url:
location.search ? location.search.substring(1) : "defaultsub.htm")

Se un valore viene inserito dopo il simbolo ? nell'url, la funzione rimanda allora il valore. Altrimenti rimanda defaultsub.htm - il nome della pagina di default da caricare.

Per sempllificare, sostituiamo l'output di questa funzione con il nome FunctionGeneratedPage.htm (per questo esempio, non ha importanza se è una pagina default o una sottopagina).

Possiamo quindi sostituire la dichiarazione originale del frame:
<FRAME SRC="',location.search ? location.search.substring(1) : "defaultsub.htm"),'"" NAME="display">

con questa semplice dichiarazione, che mostra come la riga apparirà nel browser dopo che la funzione è stata decifrata:
<FRAME SRC="',FunctionGeneratedPage.htm,'"" NAME="display">

In questo modo, ciò che succede si vede in maniera più ovvia ed immediata.
La sequenza raccoglie il valore passato da una sottopagina, oppure il nome della sottopagina di default.
E infine aggiunge al frame l'attributo relativo al nome "display".
domenica, 02 ottobre 2005 -- 12:14
  |  Rating starRating starRating starRating starRating star ( 0 / 0 )



Indietro Altre notizie