Ciao a tutti,
mi trovo alle prese con la creazione di un sistema di login utente, sviluppando tutto in locale non ho riscontrato nessun problema ma una volta trasferito tutto il lavoro lavoro sul server mi sono accorto che dopo la registrazione se vado ad effoture il login non mi permette di accedere con nome utente e pass.
Vi posto il codice sperando che sia una cosa risolvibile.
Grazize a tutti in anticipo.
Form per l'accesso:
codice:
<form id="accesso" name="contact" method="post" action="autentica.php">
<input id="username" type="text" name="user" value="" />
<input id="password" type="password" name="pass" value="" />
<input type="submit" id="submit" value="LOGIN">
</form>
Autentica.php
Codice PHP:
<?php
require_once "autenticazione/Utente.php";
session_start();
$_SESSION["user"] = new Utente($_POST["user"], $_POST["pass"]);
$_SESSION["user"]->autentica();
if ($_SESSION["user"]->isAutenticato()) {
header("Location: /xxx/index.php");
} else {
header("Location: /xxx/index.php?loginFallito=1");
}
?>
autenticazione/Utente.php
Codice PHP:
<?php
class Utente {
/**
*
* @var string Il nome utente
*/
private $nome;
/**
*
* @var string La password, sia in chiaro che codificata
*/
private $password;
/**
*
* @var bool Lo stato di autenticazione dell'utente
*/
private $autenticato;
/**
*
* @var bool
*/
private $passwordCrittata;
/**
*
* @var array Contiene gli eventuali messaggi di errore in caso di
* autenticazione fallita.
*/
private $errori;
public function __construct($nome, $password) {
$this->nome = $nome;
$this->password = $password;
$this->autenticato = false;
$this->passwordCrittata = false;
$this->errori = array();
}
public function autentica() {
try {
$db = new PDO("mysql:host=localhost;dbname=xxx",
"root",
"",
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = sprintf("SELECT * FROM admin WHERE `nome` = '%s'", addslashes($this->nome));
$comandoSQL = $db->query($sql);
$risultato = $comandoSQL->fetch(PDO::FETCH_ASSOC);
unset($db);
} catch (PDOException $e) {
$this->errori[] = $e;
}
if ($risultato) {
if (!$this->passwordCrittata) {
$this->password = hash($risultato["algoritmo"], $this->password, true);
$this->passwordCrittata = true;
}
$this->autenticato = $this->password == $risultato["password"];
if (!$this->autenticato)
$this->errori[] = "Le password non corrispondono.";
} else {
$this->errori[] = "Utente non trovato.";
}
}
public function isAutenticato() {
return $this->autenticato;
}
public function __toString() {
return $this->nome;
}
}
?>
Questa è la query che uso per l'inserimento de dati
Codice PHP:
<?php
try{
$sql = "INSERT INTO `admin` (`id`, `nome`, `password`)
VALUES ( '$id', '$mail', SHA1('$pass'))";
//Preparo le strutture per contenere la query
$stmt = $dbh->prepare($sql);
//Controllo se la query è andata a buon fine
if (! $stmt->execute() ) echo "[b]Errore nella query.[/b]";
}
//Nel caso in cui ci siano errori, li cattura nella variabile $myerror e li stampa
catch (PDOException $myerror)
{
print "Problemi nella connessione al database:
" . $myerror->getMessage() . "
";
}
?>