Ciao a tutti ragazzi...sto iniziando a studiare PHP per un progetto che voglio realizzare. Sto partendo proprio dalle basi, quindi creazione di un form di registrazione, salvataggio dei dati in un DB, e poi successivo login.
Ho seguito un tutorial su youtube(se serve poi posto il link) e fino al modulo di registrazione tutto ok. I dati vengono inseriti correttamente nel db e tutto funziona. Il problema arriva quando bisogna effettuare il login. Sembra infatti che le stringhe "email" e "password" non vengano proprio lette per poter essere confrontate con quelle nel DB. Infatti attualmente visualizzo l'errore "login=empty"(vedrete tra poco il codice), ma se commento tutto il controllo dei campi vuoti, allora l errore diventa login=erroremail..insomma, sempre il primo errore nell'elenco, come se appunto non leggesse proprio i campi. Provo a mettere qui il codice delle classi che servono, sperando che potete darmi una mano.
Classe signup(funziona tutto correttamente):
<?php
if (isset($_POST['submit'])){
include_once 'db.php';
$nome = mysqli_real_escape_string($conn, $_POST['nome']);
$cognome = mysqli_real_escape_string($conn, $_POST['cognome']);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$pass = mysqli_real_escape_string($conn, $_POST['pass']);
//Error handlers
//Check for empty fields
if (empty($nome) || empty($cognome) || empty($email) || empty($pass)){
header("Location: ../signup.php?signup=empty");
exit();
} else {
//Check if input characters are valid
if(!preg_match("/^[a-zA-Z]*$/", $nome) || !preg_match("/^[a-zA-Z]*$/", $cognome)) {
header("Location: ../signup.php?signup=invalidCharacter");
exit();
} else {
//Check if email is valid
if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
header("Location: ../signup.php?signup=invalidEmail");
exit();
} else {
$sql = "SELECT * FROM users where email='$email'";
$result = mysqli_query($conn, $sql);
$resultCheck = mysqli_num_rows($result);
if($resultCheck > 0){
header("Location: ../signup.php?signup=emailtaken");
exit();
} else {
//Hashing the password
$hashedPass = password_hash($pass, PASSWORD_DEFAULT);
//Insert the user into the database
$sql = "INSERT INTO users (nome, cognome, email, pass) VALUES ('$nome', '$cognome', '$email', '$hashedPass');";
mysqli_query($conn, $sql);
header("Location: ../signup.php?signup=success");
exit();
}
}
}
}
} else {
header("Location: ../signup.php");
exit();
}
Classe database:
<?php
$dbServername="localhost";
$dbUsername="root";
$dbPassword="";
$dbName="loginsys";
$conn = mysqli_connect($dbServername, $dbUsername, $dbPassword, $dbName);
Classe login(da sistemare):
<?php
session_start();
if (isset($_POST['submit'])){
include 'db.php';
$email = mysqli_escape_string($conn, $_POST['email']);
$pass = mysqli_escape_string($conn, $_POST['pass']);
//Check if inputs are empty
if(empty($email) || empty($pass)){
header("Location: ../index.php?login=empty");
exit();
} else{
$sql = "SELECT * FROM users WHERE email='$email' AND pass = 'pass'";
$result = mysqli_query($conn, $sql);
$resultCheck = mysqli_num_rows($result);
if($resultCheck < 1){
header("Location: ../index.php?login=erroremail");
exit();
} else {
if($row = mysqli_fetch_assoc($result)){
//De-hashing the password
$hashedPassCheck = password_verify($pass, $row['pass']);
if($hashedPassCheck == false){
header("Location: ../index.php?login=errorhash");
exit();
}elseif ($hashedPassCheck == true){
//Log in the user here
$_SESSION['u_id'] = $row['id_utente'];
$_SESSION['u_nome'] = $row['nome'];
$_SESSION['u_cognome'] = $row['cognome'];
$_SESSION['u_email'] = $row['email'];
header("Location: ../index.php?login=success");
exit();
}
}
}
}
} else {
header("Location: ../index.php?login=error");
exit();
}
non capisco proprio, visto che ho seguito alla perfezione il video ed inoltre le stringhe che inserisco sono uguali a quelle inserite nel campo registrazione...
Grazie in anticipo a chi mi aiuterà!