Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Moto G77: display AMOLED e buona autonomia per il midrange economico
Recensione Moto G77: display AMOLED e buona autonomia per il midrange economico
Motorola propone in fascia media il nuovo Moto G77 5G, uno smartphone che punta sul display AMOLED da 1.5K a 120Hz, e sulla fotocamera da 108 MP con stabilizzazione ottica per affrontare la fascia media. Il tutto insieme a una batteria da 5200mAh in soli 7,3 millimetri di spessore, con una scocca certificata con standard militari
DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla
DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla
DJI ha appena ufficializzato la serie Lito, la sua nuova gamma di droni entry-level destinata a chi si avvicina per la prima volta alla fotografia aerea. Al centro dell'annuncio ci sono due modelli ben distinti per fascia di prezzo e specifiche tecniche: DJI Lito 1 e DJI Lito X1. Entrambi si collocano sotto la soglia regolamentare dei 249 grammi, che permette di volare con requisiti burocratici più semplici rispetto ai droni più pesanti.
Sony World Photography Awards 2026: i premiati, anche italiani, il punto sulla fotografia di oggi
Sony World Photography Awards 2026: i premiati, anche italiani, il punto sulla fotografia di oggi
Siamo stati a Londra per la premiazione dei Sony World Photography Awards 2026, l'evento a tema fotografia più prestigioso. Fra sorprese e novità, ne approfittiamo per fare il punto sulla fotografia contemporanea, in cui la didascalia è sempre più necessaria a cogliere il senso della quasi totalità degli scatti.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-10-2009, 16:30   #1
Fede 88
Senior Member
 
L'Avatar di Fede 88
 
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!"); 
             }
      }

?>
LOGIN
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");   
        }
?>
Fede 88 è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2009, 18:19   #2
Torav
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();
questo permette di utilizzare l'array globale $_SESSION che il webserver pensa a rendere persistente tra le pagina. In pratica ciò che conviene fare è salvare ad esempio l'username nella sessione dopo che si è fatto il login:

Codice:
session_start();
/* codice per la verifica del login */
/* --- */

/* se il login è valido allora */
$_SESSION['username'] = $username;
/* altrimenti */
$_SESSION['username'] = false;
all'inizio di ogni pagina che vuoi sia accessibile solo da utenti registrati piazzi una roba tipo

Codice:
session_start();
if(!isset($_SESSION['username']) or $_SESSION['username'] === false) header("Location login.php");
questo pezzo di codice fa un redirect alla pagina login.php se non è presente la variabile 'username' nella sessione oppure se quella variabile è settata a false.

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
In ogni caso ciò che conviene fare, per evitare di fare inutili controlli lato software, è qualcosa del tipo

Codice:
SELECT email FROM utente WHERE username='$username' AND pass='$pass' LIMIT 1
Torav è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2009, 19:44   #3
Fede 88
Senior Member
 
L'Avatar di Fede 88
 
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?
Fede 88 è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2009, 21:56   #4
Torav
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 558
Quote:
Originariamente inviato da Fede 88 Guarda i messaggi
Innanzitutto grazie per la risposta è stata di grande aiuto.
figurati! Abbiamo tutti cominciato con dubbi del genere

Quote:
Quindi per la gestione delle sessioni non è necessario creare una tabella nel database?
no! Il webserver pensa a tutta la magia, tu devi solamente utilizzare la funzione session_start() all'inizio di ogni pagina in cui vuoi utilizzare la sessione. Poi per applicazioni più avanzate potrebbe avere un senso utilizzare una tabella di db che utilizzi come chiave l'id della sessione corrente per fare cose un po' avanzate come salvare un carrello di un utente non registrato o roba del genere, ma non penso sia ancora il tuo caso
Torav è offline   Rispondi citando il messaggio o parte di esso
Old 21-10-2009, 01:37   #5
Gremo
Senior Member
 
L'Avatar di Gremo
 
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.
Gremo è offline   Rispondi citando il messaggio o parte di esso
Old 21-10-2009, 07:51   #6
Fede 88
Senior Member
 
L'Avatar di Fede 88
 
Iscritto dal: Aug 2004
Città: Milano
Messaggi: 1310
Quote:
Originariamente inviato da Gremo Guarda i messaggi
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
Già non ci avevo pensato, grazie per le dritte.
Fede 88 è offline   Rispondi citando il messaggio o parte di esso
Old 21-10-2009, 08:16   #7
franksisca
Senior Member
 
L'Avatar di franksisca
 
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
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 21-10-2009, 09:39   #8
Torav
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 558
Quote:
Originariamente inviato da franksisca Guarda i messaggi
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?
fossi in te mi creerei una classe che gestisce la lista contenente i diritti di accesso (una ACL, ad esempio ci sta Zend_Acl che puoi utilizzare in maniera slegata dallo Zend Framework e che permette una grande flessibilità). Altrimenti puoi crearti una classe utente contenente tutti i privileggi associati all'utente (oltre a username, email e quello che ti pare) e al login ne crei un'istanza e la metti in sessione. A questo punto in ogni pagina controlli che l'utente abbia i privilegi necessari. Ad esempio un codice simile:

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")
che puoi copiare/incollare in ogni pagina cambiando solamente l'array $permessi_necessari. Ovviamente si dovrebbe tentare di evitare il copia/incolla di codici identici in pagine diverse ma senza utilizzare cose più raffinate diventa difficile.
Torav è offline   Rispondi citando il messaggio o parte di esso
Old 21-10-2009, 09:47   #9
Fede 88
Senior Member
 
L'Avatar di Fede 88
 
Iscritto dal: Aug 2004
Città: Milano
Messaggi: 1310
Quote:
Originariamente inviato da Gremo Guarda i messaggi
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
Ho creato il file config.php con la dichiarazione delle variabili per l'accesso al db, per richiamarlo all'interno della registrazione ho fatto in questo modo:

Codice:
require('config.php');
Però mi da errore
Fede 88 è offline   Rispondi citando il messaggio o parte di esso
Old 21-10-2009, 09:52   #10
franksisca
Senior Member
 
L'Avatar di franksisca
 
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
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 21-10-2009, 12:26   #11
Fede 88
Senior Member
 
L'Avatar di Fede 88
 
Iscritto dal: Aug 2004
Città: Milano
Messaggi: 1310
Quote:
Originariamente inviato da franksisca Guarda i messaggi
non credo di aver capito...
Io ho creato il file php con dentro le variabili, però non capisco come richiamarlo dagli altri file php... Ora come ora mi dice che non ho dichiarato le variabili...
Fede 88 è offline   Rispondi citando il messaggio o parte di esso
Old 22-10-2009, 11:54   #12
Fede 88
Senior Member
 
L'Avatar di Fede 88
 
Iscritto dal: Aug 2004
Città: Milano
Messaggi: 1310
Ho provato a mettere include e rquire ma con entrambi non va.
Fede 88 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Moto G77: display AMOLED e buona autonomia per il midrange economico Recensione Moto G77: display AMOLED e buona auto...
DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla DJI Lito 1 e Lito X1 recensione: i nuovi droni p...
Sony World Photography Awards 2026: i premiati, anche italiani, il punto sulla fotografia di oggi Sony World Photography Awards 2026: i premiati, ...
Una settimana con Hyundai Ioniq 5 N-Line: diverte e convince Una settimana con Hyundai Ioniq 5 N-Line: divert...
Recensione OPPO Find X9 Ultra: è lui il cameraphone definitivo Recensione OPPO Find X9 Ultra: è lui il c...
Truffe online sui social in crescita: in...
Il Pass Giornata di DAZN cambia: ora &eg...
Facci sapere quali sono le migliori tecn...
Assassin's Creed Codename Hexe perde cir...
OnePlus tornerà nella fascia bass...
Valve, ecco il nuovo Steam Controller: d...
Panasonic presenta il nuovo obiettivo Lu...
Panasonic Lumix S9 Black Titanium Editio...
Thales Alenia Space risponde alle critic...
Intel aggiorna i driver Arc Pro: fino al...
La Cina blocca l'acquisizione di Manus d...
Le batterie al sodio di CATL raggiungono...
Samsung rischia 36 giorni di stop totale...
Huawei annuncia l'arrivo della serie Wat...
L'auto elettrica più veloce del m...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 07:45.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v