Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
Header e commenti
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet
Precedente :: Successivo  
Autore Messaggio
HelpMe!!!
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 16/12/11 21:03
Messaggi: 87

MessaggioInviato: 17 Feb 2012 22:35    Oggetto: Header e commenti Rispondi citando

Allora ragazzi, avrei 2 problemi che si sono aggiunti: il primo riguarda questo codice:
Codice:
<?php
$login= 'header("Refresh: 2; URL=../index.php")';
$logout= 'header("Refresh: 2; URL=../index.php")';
?>
, è un header inserito all'izio della pagina, prima di tutti (altrimenti non funzionava, non h capito il perche), e come potete vedere sono associati ad una funzione per poterlo richiamare dove serve realmente, altrimenti mi dava sempre un errore. Facendo così l'errore non compare più, ma il vero problema è che non avviene un refresh della pagina nè al login nè al logout effettuati. Se qualcuno conosce il funzionamento della funzione header sarei ben lieto di leggere il suo commento. Smile
Il secondo problema riguarda sempre una funzione inerente al login. Inserendo una condizione if nel codice sono riuscito a visualizzare un'area commenti per i non loggati, dove viene chiesta una mail e un username per commentare, ma nella stessa area ho implementato un'altra visualizzazione per i loggati, con il messagio "Ciao Username, lascia un commento". Il valore username lo recupero così quando la sessione è attiva:
Codice:
<span class='utente'>".$_SESSION['username']."</span></strong>
, ma il problema è che non riesco a passar ei valori nella form per fali memorizzare nel database, la mia idea era di fare così:
Codice:
<name="email" id="email" value="($email)" />
, dove $email contenteneva la variabile presa dal database, e specificata ovviamente prima in amniera simile all'username. Il vero problema è che i valori scritti in value rimangono scritti così... value="$email" =$email, non alla stampa del valore di $email. Conoscete un modo per riuscire a stampare il valore di quella variabile? Grazie mille in anticipo.
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11566
Residenza: Tokelau

MessaggioInviato: 20 Feb 2012 10:45    Oggetto: Rispondi citando

'header' aggiunge una voce all'intestazione della pagina, dove per intestazione si intende la parte che viene inviata dal server al browser PRIMA che inizi la pagina stessa, per questo motivo l'istruzione non può essere usata dopo che la pagina ha già iniziato ad essere composta...

cosa tenti di fare con questa 'header'? se cerchi di causare una redirezione del browser (ovvero che il server dica al browser 'molla sta pagina e vai su quest'altra') usa

Codice:
header('Location: http://www.example.com/');
Top
Profilo Invia messaggio privato HomePage
HelpMe!!!
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 16/12/11 21:03
Messaggi: 87

MessaggioInviato: 20 Feb 2012 11:45    Oggetto: Rispondi citando

Ciao, grazie per la risposta. Se metto il valore così:
"header('Refresh: 10; http://www.sito.it');" funziona, il problema è che comincia a contare nell'attimo in cui apro il login, poi la conta viene riazzerata quando premi login e ti tocca aspettare altri 10 secondi per avere il redirect sulla home page. L'effetto che vorrei è che cominciasse a contare solo ad azione avvenuta, ovvero quando la pagina da ".../sito.php/login.php?azione=login" diventa ".../sito.php/login.php?azione=login#".
Se setto come hai scritto, il redirect forzato è istantaneo, non si ha il tempo di mettere username e password. Ma non sò come si faccia.
Top
Profilo Invia messaggio privato
HelpMe!!!
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 16/12/11 21:03
Messaggi: 87

MessaggioInviato: 20 Feb 2012 12:03    Oggetto: Rispondi citando

Forse ho capito l'errore:
Codice:
<?php
$login = header("Refresh: 2; www.prova.it");
?>

Così funziona, il problema è che non aspetta che richiami la variabile, ma esegue il refresh già dalla pagina di login. Ma io ho una funzione che lo richiama solo nel caso in cui il login abbia successo, ma lui vede :
"$login = header("Refresh: 2; www.prova.it");" esattamente uguale a:
"header("Refresh: 2; www.prova.it");", da qui capisco che la variabile $login lui forse non la riconosce. Mi è venuto il dubbio che una cosa del genere non si possa fare sull'header: ma allora come faccio a richiamarla senza quell'uguaglianza visto che la funzione header non viene accettata in nessuna altra parte della pagina?
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11566
Residenza: Tokelau

MessaggioInviato: 20 Feb 2012 14:13    Oggetto: Rispondi citando

non capisco cosa tenti di fare... Confused

forse fare una redirect dopo che il login è avvenuto? allora devi fare una cosa tipo
Codice:
if (il login è stato effettuato)
  header('Location: altrapagina.php');

ma comunque non ne vedo il senso, se hai una pagina che riceve i dati del tuo form per il login al massimo devi redirigere sulla pagina di login se il login fallisce... Rolling Eyes
Top
Profilo Invia messaggio privato HomePage
HelpMe!!!
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 16/12/11 21:03
Messaggi: 87

MessaggioInviato: 21 Feb 2012 10:02    Oggetto: Rispondi citando

Grazie SverX per la risposta.
La condizione mi serve per fare in modo che l'utente non rimanga bloccato in una pagina inutile come quella con la scritta "Login effettuato". Più che per un fallimento di login mi serviva per la sua riuscita, però adesso che mi ci fai pensare non ho creato la condizione per il fallimento, quinid se l'utente sbaglia rimane bloccato, quindi immagino che debba ricreare una condizione, con successivo redirect, anche per questo caso, oppure mettere una scritta "Prova di nuovo" ad esempio, che funga anche da collegamento con la pagina di Login.
Adesso la condizione di Login funziona e ho ottenuto l'effetto desiderato, anche se ho dovuto spostare la condizione messa nel <body> interamente nell'header (tranne la forma della tabella che prende i dati).
Ho solo un piccolo problema rimasto. Quando c'è la condizione di logout ho scritto così:
Codice:
} elseif ($ses == "logout"){
   session_destroy();
        header("Refresh: 4; URL=../index.php");
   }

Premetto che ho deciso di mettere refresh perchè con la funzione Location non si vedeva la pagina di successo del login, in quanto il redirect avveniva istantaneamente. Comunque ricevo questo errore: "Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in .../htdocs/login2.php on line 68". A me la funzione sembra scritta in maniera corretta, infatti prima di psotare le condizioni sull'header non avveniva il redirect ma neanche usciva questo errore. Comunque tengo a precisare che nonostante la scritta allo scadere dei 4 secondi il redirect funziona anche per il logout; quindi la scritta "Logout effettuato" appare, la sessione viene chiusa e il redirect ha effetto ma ottengo questo messaggio di errore che non sò cosa rappresenti. Inoltre il foglio arriva ha 65 righe non 68.
Cosa potrebbe essere?[/i]
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11566
Residenza: Tokelau

MessaggioInviato: 21 Feb 2012 14:14    Oggetto: Rispondi citando

la session_destroy() ha senso solo se prima hai aperto la sessione.
su php.net consigliano di fare:
Codice:
     session_start();
     session_unset();
     session_destroy();
     session_write_close();
     setcookie(session_name(),'',0,'/');

per 'pulire' tutto al logout.
Top
Profilo Invia messaggio privato HomePage
HelpMe!!!
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 16/12/11 21:03
Messaggi: 87

MessaggioInviato: 21 Feb 2012 16:50    Oggetto: Rispondi citando

Grazie della risposta adesso controllo tutto. Comunque prima di controllare voglio segnalare una cosa che ho appena notato:
"Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in ../htdocs/login2.php on line 67"
La sezione: "[function.session-destroy]" non è anche un collegamento: ti porta alla pagina htdocs/function.session-destroy , dove ovviamente la pagina è mancante. Può avere a che fare con il problema in sè o è solo un particolare di poco conto?
Top
Profilo Invia messaggio privato
HelpMe!!!
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 16/12/11 21:03
Messaggi: 87

MessaggioInviato: 23 Feb 2012 10:58    Oggetto: Rispondi citando

Ok, ho fatto varie prove, in efeftti session sart non era presente (l'ho scordato...). Comunque anche se lo metto non funziona.
Dal mio punto di vista è molto strano, forse non lo metto nel posto corretto.
Codice:
<?php
//l'ho messo qui
$p = $_GET['azione'];
if($p == "login"){
if(!isset($_POST['invia'])){
} else {
//l'ho messo qui
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
//l'ho messo qui
if($username == "" || $password == ""){
} else {               
$password_cript = md5($password);
$recuperadati = mysql_query("SELECT * FROM prova WHERE username = '$username' AND password = '$password'");
$verificadati = mysql_num_rows($recuperadati);
//l'ho messo qui
if ($verificadati == 1){
     $sessione = mysql_fetch_array($recuperadati);
     $_SESSION['utente'] = $sessione['username'];
     header("Refresh: 4; URL=../index.php");
} else {
}
}
}
} elseif ($p == "logout"){
//qui in basso dovrebbe seere contenuto solo session_destroy,ma ho voluto fare un tentativo aprendo la sessione e chiudendola subito dopo
        session_start();
        $_SESSION = array();
        session_destroy();
        header("Refresh: 4; URL=../index.php");
   }
?>


Le scritte "//l'ho messo qui", indicano che avevo fatto una prova per aprire la sessione in quei punti, ma restituisce lo stesso errore, che è dovuto sempre al fatto che la sessione non vine effettivamente aperta, anche se il login viene effettivamente eseguito con successo.
Spero che qualcuno di voi conosca la soluzione effettiva del problema.
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11566
Residenza: Tokelau

MessaggioInviato: 23 Feb 2012 15:17    Oggetto: Rispondi citando

Codice:
$_SESSION = array();

a che serve? prova a toglierlo, o prova a usare proprio il codice suggerito su php.net così come è:
Codice:
     session_start();
     session_unset();
     session_destroy();
     session_write_close();
     setcookie(session_name(),'',0,'/');
Top
Profilo Invia messaggio privato HomePage
HelpMe!!!
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 16/12/11 21:03
Messaggi: 87

MessaggioInviato: 23 Feb 2012 17:48    Oggetto: Rispondi citando

Ho provato togliendolo, rimettendolo, poi ho inserito tutte le righe che mi hai dato, ma l'errore c'è ancora. Successivamente ho cancellato tutto lasciando solo il messaggio del logout effettuato e il refresh con l'header, il messaggio di errore non compare più, però la sessione non viene mai chiusa e l'utente continua ad essere loggato. Continuo a credere che ci sia o un problema con la funzione stessa, nel senso che magari è messa male, oppure il problema riguarda il fatto che la sessione non vine aperta. Ma se la sessione non viene mai aperta come è possibile che l'utente si logghi, visiti le pagine, commenti e sopratutto poi possa effettuare il logout? Perchè forse la cosa veramente strana è che se io lascio solo "session_destroy()" l'utente viene sloggato e se carico altre pagine o vado indietro usando la cronologia non appare più in alto come loggato, quindi funziona e sopratutto non ci sono errori, le pagine si caricano normalmente, e allora perchè quell'errore? La sintassi è quella....
Cambiandola non funziona ugualmente, neanche integrando i suggerimenti di SverX. Adesso devo andare, continuerò a provare stasera. Se nel frattempo qualcuno magari inciama nella discussione e ha avuto lo stesso problema in passato posti una soluzione please. Ciao.
Top
Profilo Invia messaggio privato
HelpMe!!!
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 16/12/11 21:03
Messaggi: 87

MessaggioInviato: 23 Feb 2012 18:09    Oggetto: Rispondi

OK, ho capito il problema in questione. La funzione "session_destroy()" deve andare per forza alla fine di tutto, mentre io la tenevo con sotto un header(). Adesso funziona perfettamente. Solo una domanda per SverX: per motivi di sicurezza è meglio usare il codice che hai postato al posto del solo "session_destroy()", mi è parso di capire che così viene "pulito" tutto, vero ? Tuttavia mi pare di aver capito che il "session_start()" a me sembra essere già incluso, quindi lo tolgo o lo tengo lì com'è? Lo chiedo anche perchè se lascio session_start o lo tolgo non cambia il risultato; inoltre se devo iniziare la sessione dovrei farlo prima, non ha molto senso farlo a logout, oppure è un modo anche sintattico per scrivere il tutto? Grazie mille per l'aiuto comunque. Wink
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi