Gestione area ADMIN

Gli argomenti di questa pagina

  • I files e le cartelle necessari
  • Configurazione e verifica utente
  • Il form ed il processo al form
  • Pagine riservate
  • Esempio esplificativo

I files e le cartelle necessari

Per realizzare questo progetto occorrono questi files disposti come mostrato nell'elenco sottostante:

  • pagina_1.php
  • pagina_2.php
  • pagina_3.php
  • ............................ (altre pagine simili)
  • start.php
  • start_post.php
  • thanks.php
  • res/ .....................
  • res/config.php
  • res/sub_verify_user.php
  • res/verify_user.php

Iniziamo col passare in rassegna i files principali per la gestione dell'area riservata.

E' da notare che tutte le pagine, eccetto quelle di configurazione e verifica che vengono incluse nelle varie pagine del pacchetto, iniziano con session_start();

Configurazione e verifica utente


config.php

In questo file vengono inseriti la Username e la Password dell'admin e dei suoi collaboratori
Di seguito viene creato un array con indicate le pagine a cui ciascun utente può accedere.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$user 
= array (
    
"admin" => "adminpass",
    
"pinco" => "pallino",
    
"giulio" => "cesare",
    
"livio" => "pluto"
);
$user_pages = array( 
    
"admin" => array('pagina_1.php''pagina_2.php''pagina_3.php''pagina_4.php''pagina_5.php''pagina_6.php''pagina_7.php'), 
    
"pinco" => array('pagina_4.php''pagina_5.php''pagina_6.php'), 
    
"giulio" => array('pagina_1.php''pagina_7.php''pagina_4.php'),
    
"livio" => array('pagina_2.php''pagina_5.php''pagina_7.php')    
);
?>

verify_user.php

Questo file verifica l'identità di chi vi accede. Questa verifica viene effettuata sui valori memorizzati in $_SESSION['sess_username'] e $_SESSION['sess_password'] che vengono confrontati con quelli memorizzati nella matrice $user.
Questo file va incluso in tutte le pagine che vengono aperte dopo il login.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$go 
"start.php";
include(
'res/config.php');
$username $_SESSION['sess_username'];
$password $_SESSION['sess_password'];
$key array_keys($user,$password);
//$all_keys = array_keys($user);
$error "";
if (
$key[0] == $username && $user[$username] == $password) {
    
$messaggio $_SESSION['sess_message'];
} else {
    
$_SESSION['sess_error'] = "Attenzione...non hai i permessi di entrare nel settore";
}
?>

sub_verify_user.php

Questo file esegue una ulteriore verifica sulla pagina aperta da un utente. Questa verifica viene effettuata sui valori memorizzati in $nome_pagina che è la pagina corrente e le pagine registrate nella matrice $user_pages['nome utente].

1
2
3
4
5
6
7
8
9
10
11
<?php
if ($error == "") {
$nome_pagina basename($_SERVER['PHP_SELF']);
if (
in_array($nome_pagina$user_pages[$username])) {
    
$messaggio "Benvenuto " $messaggio;
} else {
    
$error "Attenzione...pagina non disponibile";
    
$_SESSION['sess_error'] = $error;
}
}
?>

Il form ed il processo al form


start.php

Questa del form è la pagina iniziale della gestione della zona riservata. In questa pagina, oltre al disegno del form su cui non c'è nulla da dire, si nota la presenza di un piccolo script PHP ad inizio pagina (il secondo frammento di codice che si nota a fondo pagina serve solo a mostrare le coppie di Username e Password che sono abilitate all'uso di questa gestione, quindi, se si decide di utilizzare questo pacchetto è assolutamente obbligatorio eliminare).
Ebbene il piccolo script PHP di inizio pagina serve a mostrare eventuali errori che si sono verificati durante il processo al form. Per decidere se compiere o meno questa azione abbiamo bisogno di verificare la presenza di una variabile che viene inviata al form, tramite Querystring, solo dopo eventuale fallimento del processo al form.
La cosa funziona in questo modo.
Da una pagina qualsiasi del nostro sito viene chiamata la pagina del form semplicemente con
<a href="gestione_utenti/pop_admin/start.php">Apri form</a> o, come ho fatto in questa pagina, con
<a href="javascript:Centrata('gestione_utenti/pop_admin/start.php')">Form di prova</a> che apre il form in una popup.
Dal processo al form, se dobbiamo tornare al form a causa di errori trovati nei dati inviati o non inviati, torneremo al form con
<a href="gestione_utenti/pop_admin/start.php?form=form">Torna al form</a> o, come di solito si fa in una pagina di processo al form che deve rimanere invisibile con
header('Location: start.php?form=form').
Per questo motivo il frammento di codice mostra il valore contenuto nella $_SESSION['sess_error'] solo se è possibile leggere la variabile della Querystring form.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<?php
session_start
();
?>
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login utente</title>
<link rel="stylesheet" href="css/style.css" type="text/css" />
<link rel="stylesheet" href="css/link_selettori.css" type="text/css" />
<link rel="stylesheet" href="css/code.css" type="text/css" />
</head>
<body>
<div id="wrapper">

    <div id="header"><img src="images/logo.png" alt="logo" /></div>
    <div id="navigation">
    <!--
    <ul>
        <li><a class="active" href="index.php">Home</a></li>
        <li><a href="#">link 1</a></li>
        <li><a href="#">link 2</a></li>
        <li><a href="#">link 3</a></li>
        <li><a href="#">link 4</a></li>    
        <li><a href="#">link 5</a></li>    
    </ul>
    -->
    </div>
<div id="content">
<?php
if (isset($_REQUEST['form']) && $_REQUEST['form'] == "form") {
    if (
$_SESSION['sess_error']) {
        foreach ( 
$_SESSION['sess_error'] as $valore) {
            echo 
$valore "<br />\n";
        }
    }
}
?>
<div align="center">
<form name="login" action="start_post.php" method="post">
<table border="1" cellpadding="0" cellspacing="0" style="border-color:#CCC">
<tr>
<td>Username (*):</td>
<td>
<input type="text" name="username" size="40" value="" />
</td>
</tr>
<tr>
<td>Password (*):</td>
<td>
<input type="password" name="password" size="40" value="" />
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<input type="submit" name="invia" value="Invia" />
</td>
</tr> 
</table>
</form>
</div>
<?php
//    Questo frammento di codice non serve, 
//    anzi è da eliminare per motivi di sicurezza
include('res/config.php');
echo 
"<div align=\"center\">\n";
echo 
"<table>\n";
echo 
"<tr>\n";
echo 
"<th colspan=\"2\">Possibili login</th>\n";
echo 
"</tr>\n";
echo 
"<tr>\n";
echo 
"<th>Username</th>\n";
echo 
"<th>Password</th>\n";
echo 
"</tr>\n";
foreach (
$user as $key => $value) {
    echo 
"<tr>\n";
    echo 
"<td>" $key "</td>\n";
    echo 
"<td>" $value "</td>\n";
    echo 
"</tr>\n";
}
echo 
"</table>\n";
echo 
"</div>\n";
?>
<p>Attenzione:<br />
  ciascun utente identificato tramite Username e Password può accedere ad una serie di pagine.<br />
In questo esempio:</p>
<p>L'<strong>Admin</strong> accede a tutte le pagine riservate:
<?php
echo implode(", "$user_pages['admin']) . "</p>\n";
?>
<p><strong>pinco pallino</strong> alle pagine:
<?php
echo implode(", "$user_pages['pinco']) . "</p>\n";
?>
<p><strong>giulio cesare</strong> alle pagine:
<?php
echo implode(", "$user_pages['giulio']) . "</p>\n";
?>
<p><strong>livio pluto</strong> alle pagine:
<?php
echo implode(", "$user_pages['livio']) . "</p>\n";
?>
<p>Tutti gli utenti accedono ad una pagina di partenza dove ciascuno troverà i link loro dedicati.. <br />
Se si tenta di aprire una qualsiasi altra pagina viene visualizzato il solo link per tornare al login.</p>

</div>
    
<div id="footer">
<p>Footer</p>
<p>alias per footer</p>
<p>&nbsp;</p>
</div>
    
</div>
</body>
</html>

start_post.php

Da questa pagina dipende il corretto funzionamento dell'intero pacchetto.
All'apertura della pagina viene definita la pagina a cui bisogna andare dopo il processo al form e come default viene indicata la pagina del form e memorizzata nella variabile $go.
Quindi vengono eliminate le eventuali session precedentemente usate. Non viene usato il più generico e distruttivo unset($_SESSION) e session_destroy() perchè alcune $_SESSION potrebbero essere impegnate in altri settori del sito.
Quindi vengono esaminati i due campi username e password inviati dal form.
Prima viene controllato se uno dei due campi è vuoto, poi, aiutati dalla matrice $user definita nel file config.php, se la combinazione dei due campi è esatta.
Se i controlli risultano positivi si cambia la variabile $go indicando la pagina a cui bisogna andare con $go = "thanks.php".
Alla fine viene usata l'istruzione header('Location: ' . $go) per andare alla giusta pagina: ritorno al form o visualizzazione della pagina da cui si iniziano i lavori.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
session_start
();
include(
'res/config.php');
$go "start.php?form=form";
unset (
$_SESSION['sess_error']);
unset (
$_SESSION['sess_username']);
unset (
$_SESSION['sess_password']);
unset (
$_SESSION['sess_message']);
$username $_REQUEST['username'];
$password $_REQUEST['password'];
$errors = array();
if(
$username == "") {
    
$errors[] = "<font color='RED'>Username obbligatorio</font>";
}
if(
$password == "") {
    
$errors[] = "<font color='RED'>Password obbligatorio</font>";
}
if (!
count($errors)) {
    
$key array_keys($user,$password);
    if (
$key[0] == $username && $user[$username] == $password) {        
        
$message "Benvenuto " $username;
        
$_SESSION['sess_username'] = $username;
        
$_SESSION['sess_password'] = $password;
        
$_SESSION['sess_message'] = $message;
        
$go "thanks.php";
    } else {
        
$errors[] = "<font color='RED'>nome o password errati</font>";        
    }
}
if (
count($errors)) {
    
$_SESSION['sess_error'] = $errors;
}
header('Location: ' $go);
//    questo frammento di codice serve solo per il debugger durante la programmazione della pagina
echo "<pre>\n";
var_dump ($errors);
echo 
"</pre>\n";
echo 
$message "<br />\n";
echo 
"<a href=\"".$go."\">torna indietro</a><br />\n";
?>

Pagine riservate


thanks.php

Andato a buon fine il processo al form si giunge a questa pagina che è comune a tutti, Admin e collaboratori. Tuttavia ognuno avrà dei link differenziati che potrà cliccare.
Ovviamente la pagina inizia con due direttive: la session_start() e l'inclusione del file verify_user.php
Il file verify_user.php che la coppia username e password sia quella registrata nella matrice $user del file config.php.
Il file restituisce un messaggio di conferma o un errore.
Se viene restituito un errore verrà mostrato un link per tornare al login
altrimenti verrà visualizzato tutto quanto verrà scritto nella ELSE.
Tutto quel che viene scritto fuori dalla IF sarà visualizzato da chiunque.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
session_start
();
include (
'res/verify_user.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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Pagina utente</title>
<link rel="stylesheet" href="css/style.css" type="text/css" />
<link rel="stylesheet" href="css/link_selettori.css" type="text/css" />
<link rel="stylesheet" href="css/code.css" type="text/css" />
</head>
<body>
<div id="wrapper">

<div id="header"><img src="images/logo.png" alt="logo" /></div>
<div id="navigation">
<ul>
<?php
if ($error != "") {
    echo 
"<li><a href=\"start.php\">" $error "</a></li>\n";
} else {
    foreach(
$user_pages[$username] as $value){
        echo 
"<li><a href=\"" $value "\">" $value "</a></li>\n";
    }
}
?>
</ul>
</div>
<div id="content">
<?php
if ($error != "") {
    echo 
"<a href=\"start.php\">" $error "</a><br />\n";
} else {
    echo 
"<h1>Pagina benvenuto</h1>\n";
    echo 
$_SESSION['sess_message'] . "<br />\n";
    echo 
"Puoi andare nelle tue pagine:<br />\n";
    echo 
"<br /><br />\n";
    echo 
"<h2>Pagina di partenza per tutti gli utenti accreditati dall'admin</h2>\n";
    echo 
"<p>&nbsp;</p>\n";
}
?>
<a href="start.php">torna al login</a>
</div>
    
    <div id="footer">
    <p>Footer</p>
    <p>alias per footer</p>
    <p>&nbsp;</p>
    </div>
    
</div>
</body>
</html>

pagina_1.php ed altre pagine simili

Questa ed altre pagine simili a questa, oltre alla solita session_start() debbono subire un doppio controllo:
quello eseguito da verify_user.php, già visto prima
quello eseguito da sub_verify_user.php
Il primo verifica che l'utente abbia eseguito il giusto login, il secondo che l'utente sia nella giusta pagina.
La verifica sulla pagina viene fatta leggendo la matrice $user_pages ed anche questa verifica restituisce un messaggio di conferma o un errore.
In caso di nessun errore la zona operativa da usare sarà quella della ELSE.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
session_start
();
include (
'res/verify_user.php');
include (
'res/sub_verify_user.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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Pagina 1</title>
<link rel="stylesheet" href="css/style.css" type="text/css" />
<link rel="stylesheet" href="css/link_selettori.css" type="text/css" />
<link rel="stylesheet" href="css/code.css" type="text/css" />
</head>

<body>
<div id="wrapper">

    <div id="header"><img src="images/logo.png" alt="logo" /></div>
    <div id="navigation">
    <ul>
<?php
if ($error != "") {
    echo 
"<li><a href=\"".$go."\">" $error "</a></li>\n";
} else {
    foreach(
$user_pages[$username] as $value){
        echo 
"<li><a href=\"" $value "\">" $value "</a></li>\n";
    }
}
?>    
    </ul>
    </div>
<div id="content">
<?php
if ($error != "") {
    echo 
"<a href=\"".$go."\">" $error "</a><br />\n";
} else {
    echo 
"<h1>Pagina 1</h1>\n";
    echo 
$_SESSION['sess_message'] . "<br />\n";
    echo 
"<h2>Pagina riservata a admin e giulio</h2>\n";
    echo 
"<p>&nbsp;</p>\n";
}
?>
<p>&nbsp;</p>
<a href="start.php">torna al login</a>
</div>
    
    <div id="footer">
    <p>Footer</p>
    <p>alias per footer</p>
    <p>&nbsp;</p>
    </div>
    
</div>
</body>
</html>

Esempio esplificativo

Questo esempio viene eseguito in popup, ma potrebbe anche essere inserito in una qualsiasi pagina WEB.

 

 



settore tecnico il sito di lorettabweb il Forum di sostegno
il forum il forum il forum