- Home
- Categorie
- Coding e Sistemistica
- PHP
- [Tutorial] Area privata
-
Ciao guzbox,
puoi recuperare il valore del campo con il livello di autorizzazione dell'utente o al login e salvarlo in una variabile di sessione, o facendo una query in ogni pagina per recuperare di volta in volta il livello di autorizzazione corrente.
Una volta che hai quel valore, è sufficiente fare un semplice if e controllare i permessi dell'utente.
-
Eh eh calma calma sono ai primi esperimenti con php...
Vediamo se sono sulla strada giusta: nella login.php modifico la query aggiungendo il parametro "livello"
[PHP]
// Controllo se l'utente esiste e se ha livello user
$query = mysql_query("SELECT id FROM utenti WHERE user = '$user' AND pass = '$pass' AND livello = 'user' LIMIT 1");
// Se ha trovato un record
if(mysql_num_rows($query) == 1)
[/PHP]
Pensavo di fare degli elseif partendo dal livello più basso, quindi prima user e a seguire i livelli via via più alti, ad ognuna di queste condizioni se soddisfatta associo una sessione ma qui non ho ben capito come funziona la "grammatica":[PHP]$_SESSION['user'] = $login['id'];[/PHP] per una sessione con livello user e [PHP]$_SESSION['admin'] = $login['id'];[/PHP] per una sessione livello admin hanno senso?
-
dovrebbe funzionare?
[PHP]<?php
// Includo la connessione al database
require('config.php');// Se il modulo viene inviato...
if(isset($_POST['login']))
{// Dati Inviati dal modulo $user = (isset($_POST['user'])) ? trim($_POST['user']) : ''; // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default '' $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : ''; // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default '' // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza if (!get_magic_quotes_gpc()) { $user = addslashes($user); $pass = addslashes($pass); } // Crypto la password e la confronto con quella nel database $pass = md5($pass); // Controllo se l'utente esiste e con che livello $query = mysql_query("SELECT id FROM utenti WHERE user = '$user' AND pass = '$pass' AND livello = 'user' LIMIT 1"); $query1 = mysql_query("SELECT id FROM utenti WHERE user = '$user' AND pass = '$pass' AND livello = 'admin' LIMIT 1"); // Se ha trovato un record if(mysql_num_rows($query) == 1) { // prelevo l'id dal database $login = mysql_fetch_array($query); // Creo una variabile di sessione "user" $_SESSION['user'] = $login['id']; // reindirizzo l'utente header('Location: privata.php'); exit; }elseif(mysql_num_rows($query1) == 1) { // prelevo l'id dal database $login = mysql_fetch_array($query1); // Creo una variabile di sessione "admin" $_SESSION['admin'] = $login['id']; // reindirizzo l'utente header('Location: privata_admin.php'); exit; } // se non esiste da l'errore else die('Nome Utente o Password errati');
}
?>[/PHP]
-
Sarebbe più conveniente cosi:
login.php
[php]
<?php
// Includo la connessione al database
require('config.php');// Se il modulo viene inviato...
if(isset($_POST['login']))
{// Dati Inviati dal modulo $user = (isset($_POST['user'])) ? trim($_POST['user']) : ''; // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default '' $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : ''; // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default '' // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza if (!get_magic_quotes_gpc()) { $user = addslashes($user); $pass = addslashes($pass); } // Crypto la password e la confronto con quella nel database $pass = md5($pass); // Controllo l'utente esiste $query = mysql_query("SELECT id,permessi FROM utenti WHERE user = '$user' AND pass = '$pass' LIMIT 1"); // Se ha trovato un record if(mysql_num_rows($query) == 1) { // prelevo l'id dal database $login = mysql_fetch_array($query); // Creo una variabile di sessione $_SESSION['login'] = $login['id']; $_SESSION['permessi'] = $login['permessi']; // reindirizzo l'utente header('Location: privata.php'); exit; } // se non esiste da l'errore else die('Nome Utente o Password errati');
}
?>
<!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</title>
</head><body>
<form action="" method="post">
<input name="user" type="text" id="user" value="Nome Utente" onfocus="if(this.value=='Nome Utente') this.value='';" /><br />
<input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
<input name="login" type="submit" value="Login" /><br />
</form>
</body>
</html>
[/php]
-
Scusa ma non mi è chiaro, col tuo codice creo 2 variabili di sessione giusto?
Nel mio caso la query diventa > $query = mysql_query("SELECT id,livello FROM utenti WHERE user = '$user' AND pass = '$pass' LIMIT 1");e le variabili > $_SESSION['login'] = $login['id'];
$_SESSION['permessi'] = $login['livello'];
Ma fatto questo come modifico le pagine che devono essere viste solo dal livello "admin"? L'istruzione di verifica > if(!isset($_SESSION['permessi']))
{
header('Location: index.php');
exit;
} non deve leggere anche il livello?Grazie
-
Se devi far accedere solo chi ha come permessi admin:
[php]
if(!isset($_SESSION['permessi']) || $_SESSION['permessi'] != 'admin')
{
header('Location: index.php');
exit;
}
[/php]
-
Grandioso! Grazie 1000.
-
Ciao Dark prima di tutto volevo dirti che sei grandioso.Grazie per averci messo a disposizione questo script che è davvero molto utile.Ti faccio i miei migliori complimenti
Volevo solamente chiederti,ho seguito tutto come fare per aggiungere l'utente admin ma come imposto username e password dell' admin?
E che devo aggiungere nella tabella sql?PS:Si può fare che l'admin in una pagina aggiunge altri admin o li elimina?
-
Ciao seriosman,
grazie per i complimenti.
Puoi semplicemente registrare un nuovo account ed in seguito cambiare manualmente dal database il campo relativo all'utente in questione in modo tale da impostarlo admin, puoi anche automattizarti questa operazione creandoti una pagina apposita con accesso esclusivo agli admin per creare degli account admin direttamente o per permetterti la modifica di un utente già esistente.
-
Scusami TheDarkIta mi puoi dare il codice del database nuovo con il nuovo valore "permessi" o quello che ci vuole?
Un'altra cosa io non ho capito,vorrei fare in modo che quando accede l'account "admin" esce una pagina diversa da quando si logga un utente normale.Come faccio?
-
Il campo puoi aggiungerlo alla tabella del tuo database con phpmyadmin.
Per fare in redirect ad una pagina piuttosto che un altra basta un semplice controllo in fase di login.
-
Si ma il problema è che non so come fare.
-
Ciao Thedarkita, Sei ancora dei nostri? Ci aiuterai ancora? Inutile ringraziarti per il lavoro eccellente, sono riuscito a costruire davvero un'area privata funzionante partendo da zero! Ora però mi restano altri dubbi e altri problemini. Come creo una pagina di modifica del profilo? In qualche post precedente hai già dato qualche dritta, ma non sono ancora riuscito a farla funzionare. Ti posto il codice che ho usato:
pagina di modifica:
[PHP]<?php
// Includo la connessione al database
require('config.php');// Se non è stata definita la variabile manda l'utente alla homepage
if(!isset($_SESSION['login']))
{
header('Location: login.php');
exit;
}// Se il modulo viene inviato...
if(isset($_POST['modifica']))
{// Dati Inviati dal modulo $nome = (isset($_POST['nome'])) ? trim($_POST['nome']) : ''; // Metto nella variabile 'name' il dato inviato dal modulo, se non viene inviato dò di default '' $cognome = (isset($_POST['cognome'])) ? trim($_POST['cognome']) : ''; // Metto nella variabile 'surname' il dato inviato dal modulo, se non viene inviato dò di default '' $user = (isset($_POST['user'])) ? trim($_POST['user']) : ''; // Metto nella variabile 'username' il dato inviato dal modulo, se non viene inviato dò di default '' $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : ''; // Metto nella variabile 'password' il dato inviato dal modulo, se non viene inviato dò di default '' $mail = (isset($_POST['mail'])) ? trim($_POST['mail']) : ''; // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato dò di default '' // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza if (!get_magic_quotes_gpc()) { $nome = addslashes($nome); $cognome = addslashes($cognome); $user = addslashes($user); $pass = addslashes($pass); $mail = addslashes($mail);
}
$setquery = ''; if($attualenome != $nome && $nome != '') $setquery = ((isset($setquery)) ? $setquery.",nome = '$nome'" : "nomeattuale = '$nome'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualeuser != $cognome && $cognome != '') $setquery = ((isset($setquery)) ? $setquery.",cognome = '$cognome'" : "cognomeattuale = '$cognome'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualeuser != $user && $user != '') $setquery = ((isset($setquery)) ? $setquery.",campouser = '$user'" : "campouser = '$user'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualepassword != $password) $setquery = ((isset($setquery)) ? $setquery.",campopassword = '$password'" : "campopassword = '$password'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualemail != $mail) $setquery = ((isset($setquery)) ? $setquery.",campomail = '$mail'" : "campomail = '$mail'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualeazienda != $azienda) $setquery = ((isset($setquery)) ? $setquery.",campoazienda = '$azienda'" : "campoazienda = '$azienda'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualeoccupazione != $occupazione) $setquery = ((isset($setquery)) ? $setquery.",campooccupazione = '$occupazione'" : "campooccupazione = '$occupazione'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualeindirizzo != $indirizzo) $setquery = ((isset($setquery)) ? $setquery.",campoindirizzo = '$indirizzo'" : "campoindirizzo = '$indirizzo'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualecitta != $citta) $setquery = ((isset($setquery)) ? $setquery.",campocitta = '$citta'" : "campocitta = '$citta'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualecomune != $comune) $setquery = ((isset($setquery)) ? $setquery.",campocomune = '$comune'" : "campocomune = '$comune'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualeprovincia != $provincia) $setquery = ((isset($setquery)) ? $setquery.",campoprovincia = '$provincia'" : "campoprovincia = '$provincia'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualecap != $cap) $setquery = ((isset($setquery)) ? $setquery.",campocap = '$cap'" : "campocap = '$cap'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualetelefono != $telefono) $setquery = ((isset($setquery)) ? $setquery.",campotelefono = '$telefono'" : "campotelefono = '$telefono'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualefax != $fax) $setquery = ((isset($setquery)) ? $setquery.",campofax = '$fax'" : "campofax = '$fax'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) mysql_query("UPDATE utenti SET $setquery WHERE id = '$id'");
}
?>[/PHP]form di modifica:
[HTML]<form action="" method="post">
Nome<br />
<input name="nome" type="text" id="nome" value="<?php echo $user['nome'];?>" onFocus="if(this.value=='nome') this.value='nome';" /><br />
<br />
Cognome<br />
<input name="cognome" type="text" id="cognome" value="<?php echo $user['cognome'];?>" onFocus="if(this.value=='cognome') this.value='cognome';" /><br />
<br />
Username<br />
<input name="user" type="text" id="user" value="<?php echo $USER["user"];?>" onfocus="if(this.value=='user') this.value='user';" /><br />
<br />
Password<br />
<input name="pass" type="password" id="pass" value="<?php echo $USER["pass"];?>" onfocus="if(this.value=='Pass') this.value='pass';" /><br />
<br />
Conferma password<br />
<input name="conferma" type="password" id="conferma" value="<?php echo $USER["conferma"];?>" onfocus="if(this.value=='conferma') this.value='conferma';" /><br />
<br />
Indirizzo email<br />
<input name="mail" type="text" id="mail" value="<?php echo $USER["mail"];?>" onfocus="if(this.value=='mail') this.value='mail';" /><br />
<br />
<input name="modifica" type="submit" value="modifica" /><br />
</form>[/HTML]
-
Prova cosi:
[php]<?php
// Includo la connessione al database
require('config.php');// Se non è stata definita la variabile manda l'utente alla homepage
if(!isset($_SESSION['login']))
{
header('Location: login.php');
exit;
}// Se il modulo viene inviato...
if(isset($_POST['modifica']))
{// Dati Inviati dal modulo $nome = (isset($_POST['nome'])) ? trim($_POST['nome']) : ''; // Metto nella variabile 'name' il dato inviato dal modulo, se non viene inviato dò di default '' $cognome = (isset($_POST['cognome'])) ? trim($_POST['cognome']) : ''; // Metto nella variabile 'surname' il dato inviato dal modulo, se non viene inviato dò di default '' $user = (isset($_POST['user'])) ? trim($_POST['user']) : ''; // Metto nella variabile 'username' il dato inviato dal modulo, se non viene inviato dò di default '' $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : ''; // Metto nella variabile 'password' il dato inviato dal modulo, se non viene inviato dò di default '' $mail = (isset($_POST['mail'])) ? trim($_POST['mail']) : ''; // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato dò di default '' // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza if (!get_magic_quotes_gpc()) { $nome = addslashes($nome); $cognome = addslashes($cognome); $user = addslashes($user); $pass = addslashes($pass); $mail = addslashes($mail);
}
if($attualenome != $nome && $nome != '') $setquery = ((isset($setquery)) ? $setquery.",nome = '$nome'" : "nomeattuale = '$nome'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualeuser != $cognome && $cognome != '') $setquery = ((isset($setquery)) ? $setquery.",cognome = '$cognome'" : "cognomeattuale = '$cognome'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualeuser != $user && $user != '') $setquery = ((isset($setquery)) ? $setquery.",campouser = '$user'" : "campouser = '$user'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualepassword != $password) $setquery = ((isset($setquery)) ? $setquery.",campopassword = '$password'" : "campopassword = '$password'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualemail != $mail) $setquery = ((isset($setquery)) ? $setquery.",campomail = '$mail'" : "campomail = '$mail'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualeazienda != $azienda) $setquery = ((isset($setquery)) ? $setquery.",campoazienda = '$azienda'" : "campoazienda = '$azienda'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualeoccupazione != $occupazione) $setquery = ((isset($setquery)) ? $setquery.",campooccupazione = '$occupazione'" : "campooccupazione = '$occupazione'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualeindirizzo != $indirizzo) $setquery = ((isset($setquery)) ? $setquery.",campoindirizzo = '$indirizzo'" : "campoindirizzo = '$indirizzo'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualecitta != $citta) $setquery = ((isset($setquery)) ? $setquery.",campocitta = '$citta'" : "campocitta = '$citta'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualecomune != $comune) $setquery = ((isset($setquery)) ? $setquery.",campocomune = '$comune'" : "campocomune = '$comune'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualeprovincia != $provincia) $setquery = ((isset($setquery)) ? $setquery.",campoprovincia = '$provincia'" : "campoprovincia = '$provincia'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualecap != $cap) $setquery = ((isset($setquery)) ? $setquery.",campocap = '$cap'" : "campocap = '$cap'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualetelefono != $telefono) $setquery = ((isset($setquery)) ? $setquery.",campotelefono = '$telefono'" : "campotelefono = '$telefono'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($attualefax != $fax) $setquery = ((isset($setquery)) ? $setquery.",campofax = '$fax'" : "campofax = '$fax'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE)
if(isset($setquery))
mysql_query("UPDATE utenti SET $setquery WHERE id = '$id'");
}
?>
[/php]
-
Grazie per la dritta, ma ancora non va... non capisco proprio da cosa possa dipendere! Potrebbe dipendere dalla sessione con cui mi loggo? Oppure il form che utilizzo è sbagliato? Scusa se ti stresso! Ma è l'unica pagina che proprio non sono riuscito a far funzionare da solo!
Mega dubbio, ma è normale che dentro i campi del form non mi compaia niente? In teoria per come li ho costruiti dovrebbero vedersi i valori attualmente inseriti nel database, o sbaglio?
P.
-
Aggiungi dopo la query:
[php]
echo "UPDATE utenti SET $setquery WHERE id = '$id'";
[/php]Ed incolla qua cosa mostra.
-
Stampando la query mi vienie fuori:
UPDATE utenti SET WHERE id = ''
Direi che non mi riconosce l'id, quindi come temevo potrebbe essere "un'errore" di login?Se eseguo la query in PHP my admin questo è il risultato.
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql_query("UPDATE utenti SET $setquery WHERE id = '$id' ")' at line 1Scusa ma sono anche io, ovviamente, alle prime armi con il PHP... e non è così semplice!
-
Infatti $id non c'è da nessuna prte nel tuo script, $setquery suppongo sia vuota perchè avevi lasciato i campi vuoti durante la prova, fai questa modifica e dovrebbe funzionare:
Al posto di:
[php]
mysql_query("UPDATE utenti SET $setquery WHERE id = '$id'");
[/php]
Metti:
[php]
mysql_query("UPDATE utenti SET $setquery WHERE id = {$_SESSION['login']}");
[/php]
-
Grazie Thedarkita... ma purtroppo non funziona ancora . Non so davvero più che pesci prendere...
Quale altro potrebbe essere l'errore?? Nel form? Secondo me non invia i dati... però boh?:?
Help please!
-
Ma a $attualenome gli hai assegnato il valore?