Login errato , oppure no

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Ho una pagina di login al mi sito, sto cercando di venire a capo delproblema in quanto nonostante inserisca username corretto ma password sbagliata, miappare l'avviso che i dati sono sbagliati ma i llogin me lo fa lo stesso. Questa è la pagina di login
PHP:
	$_SESSION['username'] 	= 	$mysqli->real_escape_string(trim($_POST['username']));
	$_SESSION['password'] 	= 	$mysqli->real_escape_string(trim($_POST['password']));

	if (($_SESSION['username'] == "") OR ($_SESSION['password'] == "")) {
		echo "Inserisci il tuo username e la password. <br />";
		echo "<meta http-equiv='Refresh' content='2; URL=login3a.php?azione=login'>";
	} else if ($_SESSION['username'] == "") {
		echo "Inserisci il tuo username. <br />";
		echo "<meta http-equiv='Refresh' content='2; URL=login3a.php?azione=login'>";
	} else {

		//Cripto la password con sha1
		$password_crypt = sha1($_SESSION['password']);

		//Eseguo l'interrogazione al DB
		//if($stmt = $mysqli->prepare("SELECT * FROM utenti WHERE username= ?, password_crypt= ? ")){
		if($result = $mysqli->query("SELECT * FROM utenti")){
		
			//Controllo i dati provenienti dall'interrogazione del DB
			if ($result->num_rows == 1) {	//Se nel db trovo utente e password proseguo
				while ($row = $result->fetch_assoc())
				{
					if(($row['username'] == $_SESSION['username']) && ($row['password_crypt'] == $password_crypt)){
						
						//Il risultato è sotto forma di array associativo quindi soltanto NOMI senza NUMERI
						echo '
							<fieldset class="login_out">
								<legend>Complimenti</legend>
							    <img class="img_login" src="images/complimenti.jpg" alt=""/>
							    <span>Ben tornato '.$_SESSION['username'].',<p> il login è stato effettuato</p> con successo2!</span>
							</fieldset>
							' ;
						echo "<meta http-equiv='Refresh' content= '3; URL=Newindex.php'>";
						} else {
							echo '
							<fieldset class="login_out">
								<legend>Errore</legend>
							    <img class="img_logout" src="images/error_1.png" alt=""/>
							    <span>Username e/o password errati. Riprova</span>
							</fieldset>' ;
							echo "<meta http-equiv='Refresh' content= '5; URL=login3a.php?azione=login'>";
						}
					}
				} else {
				echo '
					<fieldset class="login_out">
						<legend>Errore</legend>
					    	<img class="img_login" src="images/error_1.png" alt=""/>
					    <span>Username e/o password errati. Riprova1</span>
					</fieldset>' ;
				echo "<meta http-equiv='Refresh' content= '5; URL=login3a.php?azione=login'>";
				}  $result->close();
		} else {
//			return FALSE;
			echo '<div id="errore"><p><h3>Probabilmente qualcosa &egrave; andato storto, Non abbiamo nessuno registrato con questi dati. Riprova
			 ad inserire i dati, oppure <a href="form.php"> Registrati</a>, &egrave gratis!
			Grazie dallo staff Biblionet</h3></p></div>';
			echo "<meta http-equiv='Refresh' content='3; URL=Newindex.php'>";
		}
	}
} else {
	if(isset($_GET['azione']) && ($_GET['azione'] == 'logout')){
	//session_destroy();
	$_SESSION=array();
		echo '	<fieldset class="login_out">
					<legend>Arrivederci</legend>
				    <img class="img_logout" src="images/a presto.jpg" alt=""/>
				    <span>Torna presto a trovarci,<p> ci mancherai.</p></span>
				</fieldset>';
	echo "<meta http-equiv='Refresh' content='5; URL=Newindex.php'>";
	}

Il problema dove sta? Metto in sessione username e password, cripto la password interrogo il db, verifico che ci siano i dati e li confronto con quelli che ho preso dal form, se coincidono do l'ok altrimenti no. Ma al momento anche inserendo na password diversa il login me lo fa comunque. Chi mi aiuta a capire dove sbaglio?
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Ciao,

il tuo problema è che valorizzi la sessione nel momento in cui raccogli i dati dal client:
PHP:
$_SESSION['username']     =     $mysqli->real_escape_string(trim($_POST['username'])); 
$_SESSION['password']     =     $mysqli->real_escape_string(trim($_POST['password']));
E' questo il motivo per cui l'utente si ritrova sempre autenticato. Dovresti usare delle variabili per questo compito.

Basandomi sul tuo codice, ti scrivo un esempio di come potresti agire:
PHP:
// ci sono dati in post?
if (!empty($_POST['username']) && !empty_($_POST['password'])) {

    // Raccolta dati form
    $username = trim($_POST['username']);
    $password = trim($_POST['password']);

    // Preparazione query
    if ($stmt = $mysqli->prepare("SELECT username, password_crypt FROM utenti WHERE username= ? AND password_crypt = ? LIMIT 1")) {
        // Parametri da inviare con la query
        $stmt->bind_param("ss", $username, $password);
        // Variabili di output della query
        $stmt->bind_result($query_username, $query_password);
        // Richiesta effettiva
        if ($stmt->fetch()) {
            $stmt->close();

            // Dati OK! Sessione da valorizzare..
            $_SESSION['username'] = $query_username;
            $_SESSION['password'] = $query_password;

            // Utente connesso e autenticato!

        } else {
            // Dati invalidi
        }

    } else {
        // Errore interno
    }

} else {
    // username o password assenti
}
 

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Ok, ho capito! Purtroppo non conoscendo molto, anzi quasi nulla di php molte cose mi sono ignote.
Correggo e ti faccio sapere.

Sapresti darmi anche un aiuto negli altri due post che ho fatto? Sempre php.
 

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Questo è il mio codice:

PHP:
	if (!empty($_POST['username']) && !empty($_POST['password'])) {
		
		//Cripto la password con sha1
		$password_crypt = sha1($_POST['password']);
		
		// Preparazione query
		if ($stmt = $mysqli->prepare("SELECT username, password_crypt FROM utenti WHERE username= ? AND password_crypt = ? LIMIT 1")) {
			$stmt->execute();
			// Parametri da inviare con la query
			$stmt->bind_param("ss", $username, $password_crypt);
			// Variabili di output della query
			$stmt->bind_result($query_username, $query_password_crypt);
			// Richiesta effettiva
			if ($stmt->fetch()) {
				$stmt->close();
				// Dati OK! Sessione da valorizzare..
				$_SESSION['username'] = $query_username;
				$_SESSION['password'] = $query_password_crypt;
	
				echo '
						<fieldset class="login_out">
							<legend>Complimenti</legend>
						    <img class="img_login" src="images/complimenti.jpg" alt=""/>
						    <span>Ben tornato '.$_SESSION['username'].',<p> il login è stato effettuato</p> con successo2!</span>
						</fieldset>
						' ;
				echo "<meta http-equiv='Refresh' content= '3; URL=Newindex.php'>";
			} else {
				echo '
						<fieldset class="login_out">
							<legend>Errore</legend>
						    <img class="img_logout" src="images/error_1.png" alt=""/>
						    <span>Errore interno! Riprova</span>
						</fieldset>' ;
				echo "<meta http-equiv='Refresh' content= '5000; URL=login3a.php?azione=login'>";
			}		
		} else {
	//		return FALSE;
			echo '
					<fieldset class="login_out">
						<legend>Errore</legend>
					    <img class="img_logout" src="images/error_1.png" alt=""/>
					    <span>Abbiamo problemi nel collegarci al Database, riprova più tardi</span>
					</fieldset>' ;
			echo "<meta http-equiv='Refresh' content= '3; URL=login3a.php?azione=login'>";
		}
	} else {
		//Se clicco senza inserire i dati nel form
		echo '
				<fieldset class="login_out">
					<legend>Errore</legend>
				    <img class="img_logout" src="images/error_1.png" alt=""/>
				    <span>Username e/o password errati o non inseriti. Riprova2</span>
				</fieldset>' ;
		echo "<meta http-equiv='Refresh' content= '5; URL=login3a.php?azione=login'>";
	}

e purtroppo non riesco ad interrogare il db, ovviamente i dati ci sono.
 

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Rieccomi, purtroppo con il modello che mi hai scritto non sono riuscito a fare nulla, piuttosto, utilizzando questo sistema tutto sembra funzionare
PHP:
	if($result = $mysqli->query("SELECT * FROM utenti")){
			while ($row = $result->fetch_assoc())

			{
				$_SESSION['username'] = $row['username'];
				$password_crypt = $row['password_crypt'];

			}
			echo '
						<fieldset class="login_out">
							<legend>Complimenti</legend>
						    <img class="img_login" src="images/complimenti.jpg" alt=""/>
						    <span>Ben tornato '.$_SESSION['username'].',<p> il login è stato effettuato</p> con successo2!</span>
						</fieldset>
						' ;
			echo "<meta http-equiv='Refresh' content= '30000000; URL=login3a.php?azione=login'>";
		} else {
			echo '
 				<fieldset class="login_out">
 					<legend>Errore</legend>
 				    <img class="img_logout" src="images/error_1.png" alt=""/>
 				    <span>Errore interno! Riprova</span>
 				</fieldset>' ;
			echo "<meta http-equiv='Refresh' content= '5000; URL=login3a.php?azione=login'>";
		}

spero però di venire a capo del problema con lo statment perchè voglio utilizzarlo, ma non ne vengo fuori, in quanto l'username mi da NULL. Avete idee?!
 

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Rieccomi, dopo alcune prove al momento il codice completo e funzionante è questo
PHP:
	if (!empty($_POST['username']) && !empty($_POST['password'])) {

		$username  = $mysqli->real_escape_string(trim($_POST['username']));

		//Cripto la password con sha1
		$password_crypt = sha1($_POST['password']);

		if($result = $mysqli->query("SELECT * FROM utenti")){
			//Se riesco a collegarmi con il database proseguo
			while ($row = $result->fetch_assoc())

			{
				$row_username = $row['username'];
				$row_password_crypt = $row['password_crypt'];

			}
			// Controllo se i dati inseriti corrispondono a quelli nel database
			if (($row_username == $username) && ($row_password_crypt == $password_crypt)) {
				$_SESSION['username'] = $username;
				//Se i dati coincidono loggo l'utente e gli do i benvenuto
			echo '
				<fieldset class="login_out">
					<legend>Complimenti</legend>
				    <img class="img_login" src="images/complimenti.jpg" alt=""/>
				    <span>Ben tornato '.$_SESSION['username'].',<p> il login è stato effettuato</p> con successo2!</span>
				</fieldset>';
			echo "<meta http-equiv='Refresh' content= '3; URL=Newindex.php'>";
			} else {
				//Se non coincidono do questo avviso
				echo '
 				<fieldset class="login_out">
 					<legend>Errore</legend>
 				    <img class="img_logout" src="images/error_1.png" alt=""/>
 				    <span>I dati che hai inserito sono errati, controlla e riprova.</span>
 				</fieldset>' ;
				echo "<meta http-equiv='Refresh' content= '3; URL=login3a.php?azione=login'>";
			}
		} else {
			//se non riesco a collegarmi al DB do questo avviso
			echo '
 				<fieldset class="login_out">
 					<legend>Errore</legend>
 				    <img class="img_logout" src="images/error_1.png" alt=""/>
 				    <span>Errore interno! Riprova</span>
 				</fieldset>' ;
			echo "<meta http-equiv='Refresh' content= '5000; URL=login3a.php?azione=login'>";
		}
		} else {
		//Se clicco senza inserire i dati nel form do questo avviso
		echo '
				<fieldset class="login_out">
					<legend>Errore</legend>
				    <img class="img_logout" src="images/error_1.png" alt=""/>
				    <span>Username e/o password errati o non inseriti. Riprova2</span>
				</fieldset>' ;
		echo "<meta http-equiv='Refresh' content= '5; URL=login3a.php?azione=login'>";
		}
}

Grazie a flameseeker per la dritta!!
 
Discussioni simili
Autore Titolo Forum Risposte Data
asevenx messaggio d’errore in caso di login errato PHP 1
N Vba Maschera di login MS Access 1
Shyson Codice wp-login non funziona PHP 2
L Problemi con il login PHP 2
L login e session PHP 4
A Problema login con Safari PHP 14
R Reinderizzamento dopo login PHP 2
C finestra popup dopo login PHP 2
L login con solo un codice PHP 3
Web93 PROBLEMA SITO WEB WORDPRESS - LOGIN DASHBOARD Programmazione 3
M Login Autenticazione Sviluppo app per Android 0
M Effettuare Login con dati Json Sviluppo app per Android 0
S [PHP] Stampa a video Nome e Cognome in seguito a login PHP 1
M [PHP] header (location..) non funzionante dopo login PHP 3
L [PHP] Visualizzare utente dopo login PHP 0
L [PHP] login con password_verify PHP 3
A HTML issues with creating a register and login page + general questions HTML e CSS 1
L [PHP] login con varie entrate PHP 3
L [PHP] login con password_verify - password_hash PHP 5
M [PHP] Problemi con il riconoscimento login. PHP 21
F [PHP] Login senza database PHP 3
F [php] sicurezza password form login PHP 2
M [PHP] Metodo migliore per fare login a un DB Mysql PHP 1
F Problema con pagine login in PHP PHP 2
Y [PHP] Errore di login dopo aver inserito Codice AdSense PHP 0
M [PHP] Problemi con login facebook PHP 0
Shyson [WordPress] Nascondere link del Login WordPress 2
W [PHP] Login sicuro al web Service SOAP PHP 20
P [PHP] Limitare login ad un solo utente per volta PHP 12
L [PHP] login e protezione pagine con session PHP 3
L [PHP] login con la classe medoo.in PHP 5
I [PHP] [Javascript] login da smartphone a web PHP 3
P [PHP] Reindirizzamento post Login PHP 3
I [PHP] login con sessione singola PHP 1
AkenStyle Login per gioco online Database 6
bubino8 [WordPress] [PHP] Login diretto da bottone WordPress 4
D [PHP] Login Multiutente con pagina privata PHP 5
D problemi login php 5.6 mysql PHP 1
I [PHP] Login Facebook SDK returned an error: No URL set! PHP 0
G PHP Login PHP 1
Laskot Login php e redirect PHP 1
K [PHP] Unica sessione login forum/sito PHP 1
bubino8 [WordPress] Login a WP da bottone WordPress 0
bubino8 [PHP] Login Automatico PHP 1
R Filtro login tramite mac-address su apache2 SSL Apache 1
M [PHP] Sessione Login PHP 15
C [PHP] Aprire la pagina dopo aver fatto il login PHP 1
fabry1986 [PHP] login PHP 2
Punix pagine login-logout php principiante PHP 4
Fuego2806 [Joomla] Problema di login con il nuovo template Joomla 0

Discussioni simili