|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2004
Città: Milano
Messaggi: 1310
|
[PHP] Aiuto gestione account per sito
Io e un mio amico abbiamo deciso di creare un sito web dinamico, con la gestione degli account (login, registrazione...), le basi di php le abbiamo però siamo alle prime armi per quanto riguarda la creazione di siti web dinamici.
Abbiamo creato la form di registrazione e di login, entrambe funzionanti. Però c'è un problema perchè la form di login in pratica verifica solamente che i dati inseriti siano effettivamente presenti nel database e siano corretti, e altro non fa... infatti visualizza solamente una scritta login effettuato (oppure di errore in caso di dati errati), però non capiamo come fare a permettergli di visualizzare alcune pagine ed altre no. Cercando in internet, abbiamo letto su alcuni siti che vanno create delle sessioni, per verificare se l'utente è connesso ed è autorizzato a vedere le pagine. Qualcuno potrebbe chiarirmi un po' le idee. Grazie Queste sono i file php della registrazione e del login: REGISTRAZIONE Codice:
<?php //dichiarazione costanti $user = 'root'; $pass = ''; $host = 'localhost'; $dbname = 'db'; // Attiva connessione al DBMS $db = mysql_pconnect($host, $user, $pass); if($db == FALSE) die("Errore nella connessione."); // Seleziono il database mysql_select_db($dbname, $db) or die("Errore nella selezione del database"); // salvo nelle variabili i dati ricevuti dalla form di registrazione $username = $_POST['username']; $email = $_POST['email']; $pass = $_POST['pass']; $nome = $_POST['nome']; $cognome = $_POST['cognome']; $query = "SELECT username FROM utenti WHERE username = '$username'"; $ris = mysql_query($query, $db); $num1 = mysql_num_rows ($ris); $query = "SELECT email FROM utenti WHERE email = '$email'"; $ris = mysql_query($query, $db); $num2 = mysql_num_rows ($ris); if($num1 != '0'){ die("Il nome utente scelto è già in uso"); }else{ if($num2 != '0'){ die("L'email scelta è già in uso"); }else{ // Salvo i dati del nuovo utente nel database mysql_query("INSERT INTO utenti (username, nome, cognome, email, pass) VALUES ('$username', '$nome', '$cognome', '$email', '".md5($pass)."')") or die("Errore inserimento dati"); echo("Registrazione avvenuta con successo!"); } } ?> Codice:
<?php //dichiarazione costanti $user = 'root'; $pass = ''; $host = 'localhost'; $dbname = 'db'; // Attiva connessione al DBMS $db = mysql_pconnect($host, $user, $pass); if($db == FALSE) die("Errore nella connessione."); // Seleziono il database mysql_select_db($dbname, $db) or die("Errore nella selezione del database"); // salvo nelle variabili i dati ricevuti dalla form di registrazione $username = $_POST['username']; $pass = MD5($_POST['pass']); $password = 'pass'; $confirmed = 'confirmed'; // Query che seleziona la password del utente $query = "SELECT pass FROM utenti WHERE username = '$username' LIMIT 1"; $result = mysql_query($query, $db); $row = mysql_fetch_assoc($result); $num = mysql_num_rows ($result); // Quetry che seleziona il campo confirmed del utente $query1 = "SELECT confirmed FROM utenti WHERE username = '$username' LIMIT 1"; $result1 = mysql_query($query1, $db); $row1 = mysql_fetch_assoc($result1); if ($result != '0'){ if($row[$password] == $pass){ if($row1[$confirmed] == 1){ echo("Login effettuato"); }else{ die("Utente non ancora confermato"); } }else{ die("Password errata"); } }else{ die("Il nome utente inserito è inesistente"); } ?> |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 558
|
Prima di tutto conviene che vi studiate cosa sono le sessioni e come vengono utilizzate in PHP (qua sul sito ufficiale). In breve dovete, all'inizio di ogni pagina, come prima istruzione, eseguire
Codice:
session_start(); Codice:
session_start(); /* codice per la verifica del login */ /* --- */ /* se il login è valido allora */ $_SESSION['username'] = $username; /* altrimenti */ $_SESSION['username'] = false; Codice:
session_start(); if(!isset($_SESSION['username']) or $_SESSION['username'] === false) header("Location login.php"); Un paio di cose un po' OT ma che è meglio forse cominciate a fare da subito: potete prendere più valori da una stessa query separando con delle virgole le colonne che vi interessano nella select. Ad esempio per recuperare sia la password che l'email si può fare Codice:
SELECT pass, email FROM utente WHERE username='$username' LIMIT 1 Codice:
SELECT email FROM utente WHERE username='$username' AND pass='$pass' LIMIT 1 |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Aug 2004
Città: Milano
Messaggi: 1310
|
Innanzitutto grazie per la risposta è stata di grande aiuto.
Quindi per la gestione delle sessioni non è necessario creare una tabella nel database? |
![]() |
![]() |
![]() |
#4 | ||
Senior Member
Iscritto dal: Dec 2005
Messaggi: 558
|
Quote:
![]() Quote:
![]() |
||
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
|
un piccolo consiglio, invoca la funzione stripslashes sugli input delle query, altrimenti il sito potrebbe essere vittima di SQL injection
![]() edit: altro piccolo consiglio, mettere le variabili di connessione al db in un file esterno config.inc.php: se cambiate pass del db o nome utente o indirizzo non sarete costretti ad editare tutte le pagine che eseguono query Ultima modifica di Gremo : 21-10-2009 alle 01:39. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Aug 2004
Città: Milano
Messaggi: 1310
|
Già non ci avevo pensato, grazie per le dritte.
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
mi accodo alla domanda per farvene una io:
e se avessi più tipi di utente? ognuno con i suoi diritti? userò qualcosa tipo $_SESSION['diritti'] oppure altro?
__________________
My gaming placement |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 558
|
Quote:
Codice:
session_start(); require_once "User.php" $user = $_SESSION['utente']; $permessi_necessari = array("lettura", "scrittura"); if(!$user->hasPerm($permessi_necessari)) header("Location perm_error.php") |
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Aug 2004
Città: Milano
Messaggi: 1310
|
Quote:
Codice:
require('config.php'); |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
non credo di aver capito...cmq a me serve questa struttura:
user admin che può ffare "tutto", uploadrer che può agiungere solo file, user che può navigare alcune pagine, e superuser che può navigare pagine più approfondite. require_once "User.php" sarebbe l'accesso alla ACL? se si come deve essere strutturato questo file? io avevo pensato semplicemnte di mettere nel db un campo diritti che contenesse un identificativo dei diritti....
__________________
My gaming placement |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Aug 2004
Città: Milano
Messaggi: 1310
|
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Aug 2004
Città: Milano
Messaggi: 1310
|
Ho provato a mettere include e rquire ma con entrambi non va.
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:51.