area admin a più livelli

searedone

Utente Attivo
11 Giu 2010
508
0
0
Ciao a tutti,
mi servirebbe una piccola mano per questa area admin che sto facendo ....

O meglio mi servirebbe capire come poter dare i livelli agli utenti:

es admin è amministratore e ha delle pagine che può' vedere solo lui

searedone è un utente normale e può' vedere solo le pagine dell'utente ...

vi posto il codice

db

PHP:
CREATE TABLE IF NOT EXISTS `users` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `password` varchar(50) NOT NULL,
  `livello` tinyint(5) NOT NULL,  //  ho pensato un campo tynyint 5 per mettere il livello 
  `nome` varchar(200) NOT NULL,
  `cognome` varchar(200) NOT NULL,
  `telefono` varchar(50) NOT NULL,
  `email` varchar(100) NOT NULL,
  `web_site` varchar(200) NOT NULL,
  `regione` varchar(50) NOT NULL,
  `provincia` varchar(50) NOT NULL,
  `comune` varchar(50) NOT NULL,
  `cap` varchar(50) NOT NULL,
  `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `level` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;


login.php

PHP:
<?php 
//connessione al databese
include 'db_connect.php';

//parte la sessione
session_start ();

//controllo dei dati inviati 
if ((!isset($_POST['username'])) && (!isset($_POST['password']))) 
{ 
$result=$_SESSION['user_id'];

// form per il login
echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\"> 
User: <input type=\"text\" name=\"username\"><br> 
Password: <input type=\"password\" name=\"password\"><br> 
<input type=\"submit\" value=\"Invia\"></form>"; 
}else{ 

// query tabella utenti
$sql = mysql_query("SELECT * FROM users WHERE username='".$_POST['username']."' AND password=('".$_POST['password']."')");
while ($prova = mysql_fetch_array($sql)) {
$num= $prova[0];

if (mysql_num_rows($sql)>0)
{
$_SESSION['username']=$_POST['username']; 
$_SESSION['password']=$_POST['password'];
$_SESSION['user_id']=$prova[0];
//passo la variabile con ID dell'utente 
header("Location: mypage.php?id=$prova[0]");
}
else {echo "Login errato";} 
}
}
?>

mypage.php

PHP:
<?php
//connessione al database
include 'db_connect.php';
$result=$_SESSION['user_id'];

//inizio sessione per l'utente che ha effettuato il login
session_start();
if(isset($_SESSION['username'])&& isset($_SESSION['password']))
{

echo "Benvenuto " . $_SESSION['username']; 

}else{
header("Location: form.php");

}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<head>
<title>prova</title>
<link rel="stylesheet" href="stile.css" type="text/css">
<link rel="shortcut" href="http://localhost/favicon.ico">
</head>
<body>
<div id="contenitore">

<br />
<br />
<br />
  <?php
include 'db_connect.php';

$jokelist = @mysql_query( 

    'SELECT * 
    FROM users  WHERE id='.$_SESSION['user_id'].''); 
if (!$jokelist) { 
  exit('<p>Error performing query: ' . mysql_error() . '</p>'); 
} 

while ($joke = mysql_fetch_array($jokelist)) { 

  $id = $joke['id'];
  $nome = $joke['nome'];
  $cognome = $joke['cognome'];
  $tel = $joke['tel'];
  $address = $joke['address'];
   $country = $joke['country'];
    $website = $joke['website'];
     $fax = $joke['fax'];
      $date = $joke['date'];

   
  // Display dove printo le informazioni
     echo "cod cliente:  $id<br />";
    echo "Nome:  $nome<br />";
      echo "Cognome:  $cognome<br />";
        echo "Email<a href='mailto:$email'>$email</a><br />";
       
        echo "Data registrazione:$ts<br />";
  
}  






?>

<?php echo $_SESSION['user_id'];?>
<?php echo $_SESSION['username'];?>

  <a href="logout.php">Logout </a>


non guardate i campi che sono ovviamente solo di prova..
 
Vedo che nella tua tabella hai già un campo level, quindi cosa ti manca? Non devi far altro che controllare il valore del campo:
PHP:
<?php

// supponendo che i dati dell'utente siano contenuti in $user

if ($user['level'] != 'admin') {
    die('Non sei autorizzato ad accedere a questa pagina.');
}

// ...
Comunque, qualche consiglio/domanda:
  • Perché usi le variabili $joke e $jokelist? Non erano meglio $query e $row?
  • Nel tuo codice molte parti si ripetono, come il caricamento dei dati dell'utente. Crea delle funzioni/classi.
 
Comunque, qualche consiglio/domanda:
Perché usi le variabili $joke e $jokelist? Non erano meglio $query e $row?
Nel tuo codice molte parti si ripetono, come il caricamento dei dati dell'utente. Crea delle funzioni/classi.

Ciao grazie per la risposta ...

ho usato coke e jokelist solo perché per fare prima questa mattina ho utilizzato un precedente script che avevo fatto..

creare delle funzioni classi.. magari non sono ancora così avanti ... :(

tornando al post ho messo un campo livelli perché immaginavo che ci andasse ma non sapevo come farlo funzionare ecco perché il post ...

se non ho capito male questa parte di script che mi hai postato devo metterla prima della pagina che deve vedere solo l'administrator ???
PHP:
<?php 

// supponendo che i dati dell'utente siano contenuti in $user 

if ($user['level'] != 'admin') { 
    die('Non sei autorizzato ad accedere a questa pagina.'); 
}

es admin level 2 // 2 sta per area amministratore
es searedone level 1 // sta per area utente

vedendo il tuo script suppongo che dove c'è level devo mettere il numero corretto ???
 
ho provato così ma non funziona

PHP:
<?php
//connessione al database
include 'db_connect.php';
$result=$_SESSION['user_id'];

//inizio sessione per l'utente che ha effettuato il login
session_start();
if ($user['2'] != 'admin') {  
    die('Non sei autorizzato ad accedere a questa pagina.');  
}

echo "Benvenuto " . $_SESSION['username']; 

}else{
header("Location: form.php");

}

?>
 
Alex ho sistemato query e row ...

solo una curiosità ho cambiato il campo level in un campo enum dove di default il valore è uno e in caso voglia invece dare dei permessi diversi agli amministratori lo trasformo in 2
e fino qui perfetto ....

ma in questo script che ti posto ( pagina mypage.php ) dove vado a finire dopo il login, e fino a qui perfetto ....... ma come faccio dato che ho provato come mi hai suggerito ma non funge a far si che quando mi loggo come admin che ho level 2 a vedere delle altre cose nella pagina ????

es

nella pagina di seraredone vedo i suoi dati ecc ecc

nella pagina di admin posso vedere i miei dati ma posso vedere una serie di funzioni che gli lari che non hanno questo permesso possono vederle .......

PHP:
<?php
//connessione al database
include 'db_connect.php';
$result=$_SESSION['user_id'];

//inizio sessione per l'utente che ha effettuato il login
session_start();
if(isset($_SESSION['username'])&& isset($_SESSION['password']))
{

echo "Benvenuto " . $_SESSION['username']; 

}else{
header("Location: form.php");

}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<head>
<title>prova</title>
<link rel="stylesheet" href="stile.css" type="text/css">
<link rel="shortcut" href="http://localhost/favicon.ico">
</head>
<body>
<div id="contenitore">

<br />
<br />
<br />
  <?php
include 'db_connect.php';

$query = @mysql_query( 

    'SELECT * 
    FROM users  WHERE id='.$_SESSION['user_id'].''); 
if (!$query) { 
  exit('<p>Error performing query: ' . mysql_error() . '</p>'); 
} 

while ($row = mysql_fetch_array($query)) { 

  $id = $row['id'];
  $nome = $row['nome'];
  $cognome = $row['cognome'];
  $telefono = $row['telefono'];
  $email = $row['email'];
  $web_site = $row['web_site'];
     $regione = $row['regione'];
      $provincia = $row['provincia'];
      $comune = $row['comune'];
      $cap = $row['cap'];
      $ts = $row['ts'];

   
  // Display the joke with author information 
     echo "cod cliente:  $id<br />";
    echo "Nome:  $nome<br />";
      echo "Cognome:  $cognome<br />";
       echo "Telefono:  $telefono<br />";
        echo "Email:  <a href='mailto:$email'>$email</a><br />";
         echo "Website:  <a href=http://$web_site>$web_site</a><br />";
          echo "Regione:  $regione<br />";
           echo "Provincia:  $provincia<br />";
            echo "Comune:  $comune<br />";
             echo "Cap:  $cap<br />";
       
        echo "Data di registrazione:$ts<br />";
  
}  






?>

<?php echo $_SESSION['user_id'];?>
<?php echo $_SESSION['username'];?>

  <a href="logout.php">Logout </a>
  

 es // io vorrei che questa parte la veda solo admin e non tutti ???? come devo impostarla la cosa ??? 
   <a href="admin.php">admin </a>

riposto il db corretto con un piccolo dump di prova

PHP:
CREATE TABLE IF NOT EXISTS `users` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `password` varchar(50) NOT NULL,
  `nome` varchar(200) NOT NULL,
  `cognome` varchar(200) NOT NULL,
  `telefono` varchar(50) NOT NULL,
  `email` varchar(100) NOT NULL,
  `web_site` varchar(200) NOT NULL,
  `regione` varchar(50) NOT NULL,
  `provincia` varchar(50) NOT NULL,
  `comune` varchar(50) NOT NULL,
  `cap` varchar(50) NOT NULL,
  `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `level` enum('1','2') NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

--
-- Dump dei dati per la tabella `users`
--

INSERT INTO `users` (`id`, `username`, `password`, `nome`, `cognome`, `telefono`, `email`, `web_site`, `regione`, `provincia`, `comune`, `cap`, `ts`, `level`) VALUES
(1, 'searedone', 'pippalippa', '', '', '', '', '', '', '', '', '', '0000-00-00 00:00:00', '1'),
(2, 'pippo', 'pippo', 'pippo', 'pippo', '', '', '', '', '', '', '', '2011-12-08 09:49:26', '1'),
(4, 'admin', 'admin', 'a', 'a', '774747477', '[email protected]', 'www.admin.it', 'lombardia', 'milano', 'milano', '20100', '2011-12-08 11:42:27', '2');
 
nada de nada ....

pagina bianca :(

PHP:
<?php
//connessione al database
include 'db_connect.php';
$result=$_SESSION['user_id'];

//inizio sessione per l'utente che ha effettuato il login
session_start();
if(isset($_SESSION['username'])&& isset($_SESSION['password']))
{

echo "Benvenuto " . $_SESSION['username']; 

}else{
header("Location: form.php");

}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<head>
<title>prova</title>
<link rel="stylesheet" href="stile.css" type="text/css">
<link rel="shortcut" href="http://localhost/favicon.ico">
</head>
<body>
<div id="contenitore">

<br />
<br />
<br />
  <?php
include 'db_connect.php';

$query = @mysql_query( 

    'SELECT * 
    FROM users  WHERE id='.$_SESSION['user_id'].''); 
if (!$query) { 
  exit('<p>Error performing query: ' . mysql_error() . '</p>'); 
} 

while ($row = mysql_fetch_array($query)) { 

  $id = $row['id'];
  $nome = $row['nome'];
  $cognome = $row['cognome'];
  $telefono = $row['telefono'];
  $email = $row['email'];
  $web_site = $row['web_site'];
     $regione = $row['regione'];
      $provincia = $row['provincia'];
      $comune = $row['comune'];
      $cap = $row['cap'];
      $ts = $row['ts'];

   
  // Display the joke with author information 
     echo "cod cliente:  $id<br />";
    echo "Nome:  $nome<br />";
      echo "Cognome:  $cognome<br />";
       echo "Telefono:  $telefono<br />";
        echo "Email:  <a href='mailto:$email'>$email</a><br />";
         echo "Website:  <a href=http://$web_site>$web_site</a><br />";
          echo "Regione:  $regione<br />";
           echo "Provincia:  $provincia<br />";
            echo "Comune:  $comune<br />";
             echo "Cap:  $cap<br />";
       
        echo "Data di registrazione:$ts<br />";
  
}  






?>

<?php echo $_SESSION['user_id'];?>
<?php echo $_SESSION['username'];?>

  <a href="logout.php">Logout </a>
  
  <?php 
if ($user['level'] == 2) { 
    echo <<<EOF 
<a href="admin.php">admin</a> 
EOF; 
} 
?>

Tra l'altro forse non mi sono spiegato bene, io ho bisogno non solo di vedere quello ma di vedere tante cose in quella pagina che può' vedere solo l'utente di livello 2 :(
 
Guarda che nella variabile $user devi caricare i dati dell'utente che recuperi dal database, altrimenti è ovvio che non funziona. Se hai bisogno di inserire più cose per l'amministratore basta che aggiungi altri controlli, oppure che aggiungi i link a quello esistente.
 
???

Alex abbi pazienza ma io nn ho tutte queste capacita' al momento ;(
Mi piacerebbe ;)

Nn saresti cosi gentile da farmi un esempio o altro ..
 
help .....

login.php

PHP:
<?php 
//connessione al databese
include 'db_connect.php';

//parte la sessione
session_start ();

//controllo dei dati inviati 
if ((!isset($_POST['username'])) && (!isset($_POST['password']))) 
{ 
$result=$_SESSION['user_id'];

// form per il login
echo "<form method=\"post\" action=\"login.php\"> 
Username: <input type=\"text\" name=\"username\" class=\"inputlogin\"><br> 
Password:  <input type=\"password\" name=\"password\" class=\"inputlogin\"><br> 
<input type=\"submit\" value=\"Invia\"></form>"; 
}else{ 

// query tabella utenti
$sql = mysql_query("SELECT * FROM users WHERE username='".$_POST['username']."' AND password=('".$_POST['password']."')");
if (mysql_num_rows($sql)>0)
{
while ($prova = mysql_fetch_array($sql)) {  
    $num= $prova[0];  
    $_SESSION['username']=$_POST['username'];   
    $_SESSION['password']=$_POST['password'];   
    $_SESSION['user_id']=$prova[0];  
    $_SESSION['level'] = intval($prova[15]);  // ho provato sia così che 
    $_SESSION['level'] =$_POST['level']; 
    header("Location: mypage.php?id=$prova[0]");  
}
}else{
echo "Login errato <br /><br /> <a href='login.php' />Ritorna alla pagina login</a><br /><br /><a href='registrati.php'/>Registrati</a>";
} 
}
?>


mypage.php



PHP:
<?php
//connessione al database
include 'db_connect.php';
$result=$_SESSION['user_id'];


//inizio sessione per l'utente che ha effettuato il login
session_start();
if(isset($_SESSION['username'])&& isset($_SESSION['password']))
{
 $_SESSION['username']; 

}else{
header("Location: login.php");

}

?>

 <?php echo "Cod Cliente  "   . $_SESSION['user_id'];?><br />
<?php echo "Cliente  "   . $_SESSION['username'];?><br />

  <a href="logout.php">Logout </a>
 <br /> 
<?php if($_SESSION['level'] == 2): ?>   
   <a href="admin.php">admin </a>    
<?php endif; ?>
 
la cosa incredibile è:


se provo a mettere

PHP:
<?php echo  . $_SESSION['level'];?><br />

Non mi restituisce 2 0 1 ma la data 2011 ?? il campo è enum 1 default nel caso posso mettere a 2

???????
 
Risolto :)

login.php

PHP:
 $_SESSION['level'] = $prova[14];

mypage.php

PHP:
<?php if($_SESSION['level'] == '2'): ?>   
   <a href="admin.php">admin </a>    
<?php endif; ?>
 

Discussioni simili