Newsgroup: it.comp.www.php
Titolo: autenticazione (newbie)

Ciao, scusate per la domanda molto da newbie, ma non trovo una risposta 
in giro, quindi deve essere più stupida di quanto creda......
Ho una pagina web piuttosto complessa in quanto a HTML (tre colonne, 
vari DIV etc.).
Sfruttando $_GET provoco la variazione in un DIV che carica i contenuti 
di tutto il sito:
cioè, a seconda di cosa c'è nell'URL viene ricaricata la stessa pagina 
con quel DIV "variato".
Dunque, la pagina web è un'unica index.php dinamica.
In alto, però, ho un'area riservata e non so come procedere.
E vi spiego un po' meglio:
vorrei che se nomeutente e password fossero errati, la pagina si 
ricaricasse accogliendo accanto al form una scritta di errore.
Se invece i dati sono corretti, il solito DIV con i contenuti per 
l'utente registrato si aggiornasse.
Ma non ho capito come fare: invio i dati via $_POST a uno script.php, 
controllo le credenziali con DB... e poi?
Come si mostra la pagina? Sarebbe il caso di aggiungere altri parametri 
in GET?
Molte grazie a tutti.
TretsLotus

In pratica devi istanziare delle variabili tipo SESSION.
Una volta che hai verificato che l'utente esiste e la password č giusta devi 
creare una variabile session e questa rimarrą attiva finchč l'utente non 
esce dal sito o scade la sessione.
Per info sulle session vai al manuale di 
php.net
. Se hai dei dubbi siamo a 
disposizione. Ciao 

 disposizione. Ciao 
Prima di tutto grazie.
Mi sono chiare le $_SESSION.
I miei dubbi più che altro sono qui:
ho nel sito pagine che ricevono, sfruttano e leggono dati da $_GET.
Adesso è diverso: io mando dei dati via $_POST... come ricarico la 
pagina e ottengo il giusto contenuto per il mio DIV?
Devo "inventarmi" qualcosa per distinguere i due metodi in cima al mio PHP?
Una invenzione come:
if ($_SERVER['REQUEST_METHOD'] == 'POST'){}
è pratica comune o è una mia totale follia?   :-)
Inoltre, il meccanismo che ricarica la pagina può essere di questo tipo?
header("location:index.php/etc") o è sconsigliabile?
Molte grazie per la grande disponibilità.
TretsLotus

 Molte grazie per la grande disponibilità.
Perdonami, avendo letto newbie credevo fosse qualcosa di elementare.
Se non ho capito male si tratta di ricostruire la pagina una volta inviati i 
dati, diciamo a login.php. Il metodo migliore sarebbe quello di creare nel 
form alcuni campi hidden che ti permettano di ricostruire la pagina oppure 
passarli via get così <form action="login.php?div1=pippo&div2=pluto" 
method="POST">...</form>. In questo modo hai la possibilità di inviare 
contemporanemente sia get che post.
Spero d'aver capito bene. ciao 

PS. una volta che login.php ha verificato che i dati sono giusti puoi fare 
header( "Location: 
index.php?div1=questo&div2=quello&div3=errore_non_sei_registrato")
ciao 

 Spero d'aver capito bene. ciao 
Grazie, farò qualche prova.
Ciao, TretsLotus

 spostarla in una pagina web a parte (diversa da index.php)?
No, non penso che sia necessario, ma questo dipende da come hai progettato 
il sito. Anch'io talvolta uso creare un layout unico nella index.php e poi 
caricare le pagine in un div centrale. Quindi con 
index.php?page=nome_della_pagina faccio un include nome_della_pagina.php. 
Solo che io uso un unico div centrale perchè altrimenti si complicano troppo 
le cose, e inutilmente.
Per esempio nel tuo caso anzichè creare un form che punta alla pagina 
login.php, lo farei puntare alla pagina index.php?page=login e tutto viene 
gestito nella parte centrale, compreso il mesaggio d'errore nel caso 
l'utente non sia registrato ecc. In questo caso non ci sarebbe necessità di 
un redirect a cui passare poi i dati per ricostruire la pagina. 

  
Dunque, nel mio caso le cose sono organizzate così:
- l'url della pagina è così composto index.php? + SID + SECTION($_GET) + 
LANGUAGE($_GET);
- LANGUAGE è una sigla, mentre SECTION è un numero: a questo numero 
corrisponde nel db un file nomefile.inc.php (all'interno del quale c'è 
il codice per recuperare una stringa di HTML dal database: il blocco di 
HTML del DIV è interamente inserito in una row apposita).
Facendo un esempio rapido: tramite 
index.php?lungosid&language=de&section=5, controllata la presenza di un 
numero valido in $_GET per section, chiedo al database un nome di 
file.inc.php che ha id=5. Se il path del file che mi viene restituito 
esiste, fileTrovato.inc.php viene incluso nel DIV (ovemai non esistesse, 
viene incluso al suo posto un fileNonTrovato.php, con scopi abbastanza 
ovvi). All'interno del file da includere, si trovano le procedure (quasi 
sempre differenti da file a file) per ottenere il contenuto di una cella 
di db corrispondente ad un contenuto specifico.
Mi scuso per la confusione in cui ti ho cacciato: so di non avere sempre 
il dono della chiarezza   :-)
Però, ciò che cambia sempre è un unico DIV centrale anche nel mio caso 
(tranne il caso in cui il login non andasse a buon fine)......
Ti ringrazio moltissimo per l'attenzione.
TretsLotus

 di db corrispondente ad un contenuto specifico.
Scusa ma così fai sempre connessioni a db solo per ottenere il nome del file 
da caricare? Non bastava inserire direttamente il nome del file in section? 
Una volta ottenuto il nome controlli che non abbia caratteri strani tipo 
punto o slash e poi usi file_exists() per vedere se esiste altrimenti 
fileNonTrovato.php. Anche perchè così non devi ricordare i numeri per fare 
collegamenti tra le pagine.
Per quel che riguarda il messaggio d'errore dell'utente non registrato io lo 
farei comparire nel div centrale semplificando notevomente la vita.
Per il tuo problema iniziale <form 
action="index.php?lungosid&language=de&section=12" method="post">...</form> 
e al numero 12 del db il file login.php che controlla il db e ti da errore 
se lo ritiene giusto. 

 se lo ritiene giusto. 
Grazie infinite,
TretsLotus