- Home
- Categorie
- Coding e Sistemistica
- PHP
- login utente
-
login utente
Salve a tutti
ho costruito e testato in locale il mio sito chiab-gigi.it
sia il login che 'nuovo utente' funzionano perfettamenteho caricato il tutto sul server (match.it)
ho creato il database e la tabella 'iscritti'
ho modificato, poichè in locale avevo altri parametri, il file 'config.php'faccio una prova: nuovo utente....verifico nel database e sono presente
allora tento il login......non accetta user e pwsapete, per favore darmi una spiegazione
grazie
-
Difficile risponderti così senza avere info. Hai controllato i file di log? Come gestisci gli errori?
Ti faccio notare che mi sono potuto registrare, o almeno il messaggio di errore così diceva, inserendo dati a casaccio.
Dovresti fare una validazione lato client (con Javascript) ma più importante lato server (con PHP) sui dati (Es. formato email, campi obbligatori, etc...)
-
grazie per la risposta flaviors200
prima di proseguire devo chiederti:Ti faccio notare che mi sono potuto registrare, o almeno il messaggio di errore così diceva, inserendo dati a casaccio.
R. io non ti vedo nel database, io mi vedo
Dovresti fare una validazione lato client (con Javascript) ma più importante lato server (con PHP) sui dati (Es. formato email, campi obbligatori, etc...)
R. ecco li avrei bisogno di una mano, se possibile
ma posto comunque gli errori riscontrati finoracomunque, come sopra, io mi vedo registrato nel database
- la tabella iscritti è cosi composta, questo è il dump.php per mysql
CREATE TABLE IF NOT EXISTS `iscritti` ( `id_utente` int(4) NOT NULL AUTO_INCREMENT, `nome_utente` varchar(20) DEFAULT NULL, `password` varchar(40) DEFAULT NULL, `nome_reale` varchar(50) DEFAULT NULL, `email` varchar(80) DEFAULT NULL, `attivo` enum('0','1') NOT NULL default '0', PRIMARY KEY (`id_utente`), UNIQUE KEY `username` (`nome_utente`), UNIQUE KEY `email` (`email`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-
anche se registrato, mi segnala come 'attivo =0'...-.. allora, per esperimento, forzo lo stato a 1
-
risultato sono loggato e accedo alla pagina che deve essere visualizzata ma'.........se voglio uscire:
msg: si è verificato un errore nella sintassi SQL; controlla il manuale che corrisponde alla versione del tuo server MySQL per la sintassi corretta da usare vicino a '' alla riga 1
se vuoi posto i file config e functions......
-
Allora andiamo per ordine:
- Quando apro la pagina di registrazione ho già il messaggio "Il form non è stato compilato correttamente oppure stai cercando di registrarti con dei dati giá presenti nel database."
- Se provo a compilare e inviare il modulo con stringhe a casaccio, mi spunta il messaggio "Registrazione conclusa ora puoi loggarti."
Dovresti quindi fare una validazione lato server con le funzioni isset() o empty() e controllare la validità del formato dell'email con php.net/manual/en/function.filter-var.php oppure preg_match()
Per la validazione lato client, se vuoi metterla, ti consiglio questa libreria parsleyjs.org/doc/examples/simple.html
Si sarebbe meglio vedere il resto del codice, ma postalo tra i tag PHP oppure usa pastebin.com e poi incolla qui il link
-
config.php
[PHP]<?php# definizione delle costanti per l'autenticazione al DBMSdefine('DATA_HOST', 'localhost');define('DATA_UTENTE', 'xxxxxx_xgigi');define('DATA_PASS', 'xxxxxxxxx');define('DATA_DB', 'xxxxxxx_general');# classe per l'interazione con il databaseclass DATA_Class { # definizione del costruttore function __construct() { # connessione al DBMS $connessione = @mysql_connect(DATA_HOST, DATA_UTENTE, DATA_PASS) or die('Errore nella connessione: ' . mysql_error()); # selezione del database @mysql_select_db(DATA_DB, $connessione) or die('Errore dal database: ' . mysql_error()); }}// mail dell'amministratore$admin_email = "[email protected]";?>
[/PHP]functions.php
[PHP]<?php# inclusione del file di configurazione@include_once 'config.php';# definizione della classe che conterrà i metodi per la gestione degli iscritticlass Iscrizioni { # definizione del costruttore public function __construct() { # istanza della classe per la connessione al database $data = new DATA_Class(); }metodo per la registrazione public function registra($nome_reale, $nome_utente, $password, $email) { # tolgo eventuali spazi vuoti $nome_reale = trim($nome_reale); $nome_utente = trim($nome_utente); $password = trim($password); # verifico che il modulo sia stato compilato if (strlen($nome_reale) == 0 || strlen($nome_utente) == 0 || strlen($password) == 0) return false; else { # cifratura della password $password = @sha1($password); # confronto degli input con i dati contenuti in tabella $query = @mysql_query("SELECT id_utente FROM iscritti WHERE nome_utente = '$nome_utente' OR email = '$email'") or die('Errore: ' . mysql_error()); # controllo sulla presenza di corrispondenze prodotte dal confronto $conta = @mysql_num_rows($query); # se il confronto non genera corrispondenze.. if ($conta == 0) { # ..si procede con la registrazione.. $risultato = @mysql_query("INSERT INTO iscritti(nome_utente, password, nome_reale, email) VALUES ('$nome_utente', '$password','$nome_reale','$email')") or die('Errore: ' .mysql_error()); return $risultato; }else{ # ..altrimenti l'esito della registrazione sarà negativo return false; } } }
metodo per l'autenticazione public function verifica_login($email_o_nome_utente, $password) { # cifratura della password $password = @sha1($password); # confronto degli input con i dati contenuti in tabella $query = @mysql_query("SELECT id_utente FROM iscritti WHERE (email = '$email_o_nome_utente' OR nome_utente='$email_o_nome_utente') AND password = '$password'") or die('Errore: ' . mysql_error()); # controllo sulla presenza di una corrispondenza prodotta dal confronto $conta = @mysql_num_rows($query); # se il confronto genera una corrispondenza.. if ($conta == 1) { # ..viene generata la sessione di login.. $risultato = @mysql_fetch_object($query); $_SESSION['login'] = true; $_SESSION['id_utente'] = $risultato->id_utente; return true; }else{ # ..altrimenti l'esito dell'autenticazione sarà negativo return false; } }
metodo per la visualizzazione del nome dell'utente loggato public function mostra_utente($id_utente) { # estrazione del nome reale sulla base dell'identificatore memorizzato in sessione $query = @mysql_query("SELECT nome_reale FROM iscritti WHERE id_utente = $id_utente") or die('Errore: ' . mysql_error()); $risultato = @mysql_fetch_object($query); # stampa a video del nome reale dell'utente echo $risultato->nome_reale; }
metodo per il controllo sulla sessione public function verifica_sessione() { # il metodo restituisce l'informazione relativa alla sessione a patto che questa sia stata inizializzata if(isset($_SESSION['login'])) { return $_SESSION['login']; }else{ return false; } } # metodo per il logout # la sessione viene distrutta a seguito di uno specifico input dell'utente public function esci() { $_SESSION['login'] = FALSE; @session_destroy(); } }?>[/PHP]
immagine dati phpMyAdmin: drive.google.com/open?id=1vG_SbSfmhj5EkU-0OJAx7KPQKq_Inn2e
-
Forse meglio se posti il codice bello indentato su pastebin. Non riesco a capirlo proprio :bho:
Vedo che utilizzi ancora le funzioni native di mysql, ormai sono deprecate da tanto e rimosse in PHP7, usa la classe PDO piuttosto opp mysqli
-
grazie per la pazienza
in primis non posso pubblicare link o altro (gt vuole iscrizione e io sn disoccupato e nn posso spendere)
proviamo cosi e vediamo se mi dai una dritta per rimediareconfig.php
<?php# definizione delle costanti per l'autenticazione al DBMS
define('DATA_HOST', 'localhost');
define('DATA_UTENTE', 'mio nome utente');
define('DATA_PASS', 'mia pw');
define('DATA_DB', 'nome db');classe per l'interazione con il database
class DATA_Class {
definizione del costruttore
function __construct() {
# connessione al DBMS
$connessione = @mysql_connect(DATA_HOST, DATA_UTENTE, DATA_PASS) or die('Errore nella connessione: ' . mysql_error());
# selezione del database
@mysql_select_db(DATA_DB, $connessione) or die('Errore dal database: ' . mysql_error());
}
}
// mail dell'amministratore
$admin_email = "[email protected]";
?>functions.php
<?php# inclusione del file di configurazione
@include_once 'config.php';definizione della classe che conterrà i metodi per la gestione degli iscritti
class Iscrizioni {
definizione del costruttore
public function __construct()
{
# istanza della classe per la connessione al database
$data = new DATA_Class();
}metodo per la registrazione
public function registra($nome_reale, $nome_utente, $password, $email)
{
# tolgo eventuali spazi vuoti
$nome_reale = trim($nome_reale);
$nome_utente = trim($nome_utente);
$password = trim($password);
# verifico che il modulo sia stato compilato
if (strlen($nome_reale) == 0 || strlen($nome_utente) == 0 || strlen($password) == 0) return false;
else {
# cifratura della password
$password = @sha1($password);
# confronto degli input con i dati contenuti in tabella
$query = @mysql_query("SELECT id_utente FROM iscritti WHERE nome_utente = '$nome_utente' OR email = '$email'") or die('Errore: ' . mysql_error());
# controllo sulla presenza di corrispondenze prodotte dal confronto
$conta = @mysql_num_rows($query);
# se il confronto non genera corrispondenze..
if ($conta == 0)
{
# ..si procede con la registrazione..
$risultato = @mysql_query("INSERT INTO iscritti(nome_utente, password, nome_reale, email) VALUES ('$nome_utente', '$password','$nome_reale','$email')") or die('Errore: ' .mysql_error());
return $risultato;
}else{
# ..altrimenti l'esito della registrazione sarà negativo
return false;
}
}
}metodo per l'autenticazione
public function verifica_login($email_o_nome_utente, $password)
{
# cifratura della password
$password = @sha1($password);
# confronto degli input con i dati contenuti in tabella
$query = @mysql_query("SELECT id_utente FROM iscritti WHERE (email = '$email_o_nome_utente' OR nome_utente='$email_o_nome_utente') AND password = '$password'") or die('Errore: ' . mysql_error());
# controllo sulla presenza di una corrispondenza prodotta dal confronto
$conta = @mysql_num_rows($query);
# se il confronto genera una corrispondenza..
if ($conta == 1)
{
# ..viene generata la sessione di login..
$risultato = @mysql_fetch_object($query);
$_SESSION['login'] = true;
$_SESSION['id_utente'] = $risultato->id_utente;
return true;
}else{
# ..altrimenti l'esito dell'autenticazione sarà negativo
return false;
}
}metodo per la visualizzazione del nome dell'utente loggato
public function mostra_utente($id_utente)
{
# estrazione del nome reale sulla base dell'identificatore memorizzato in sessione
$query = @mysql_query("SELECT nome_reale FROM iscritti WHERE id_utente = $id_utente") or die('Errore: ' . mysql_error());
$risultato = @mysql_fetch_object($query);
# stampa a video del nome reale dell'utente
echo $risultato->nome_reale;
}metodo per il controllo sulla sessione
public function verifica_sessione()
{
# il metodo restituisce l'informazione relativa alla sessione a patto che questa sia stata inizializzata
if(isset($_SESSION['login']))
{
return $_SESSION['login'];
}else{
return false;
}
}metodo per il logout
la sessione viene distrutta a seguito di uno specifico input dell'utente
public function esci() {
$_SESSION['login'] = FALSE;
@session_destroy();
}
}
?>il database del sito/server si identifica come localhost
ciao