er i gang med at lave en login side med noget email password osv. man skal kunne logge ind med Email og password og når jeg udfylder email og password går den til siden localhost/index.php?login=error1 forstår ikke ved ikke om de er de 2 || der er fejlen søger gerne en løstning på forhånd tak
/* create a prepared statement */ if ($stmt = $mysqli->prepare("SELECT * FROM bruger WHERE email=? AND password=?")) {
/* bind parameters for markers */ $stmt->bind_param("ss", $_POST['email'], $_POST['password']);
/* execute query */ $stmt->execute();
/* bind result variables */ $stmt->bind_result($id);
/* fetch value */ $stmt->fetch();
$_SESSION['user_logged_in'] = true;
/* close statement */ $stmt->close(); }
/* close connection */ $mysqli->close(); ?>
og så håndtere om brugeren logges ind eller ej. Om email eller password er "tomt" er jo som sådan lige meget. Det kan du håndtere direkte i din html formular og sikre der ikke postes inden begge felter er indtastet.
det er bare nu har jeg skrevet hele koden og følger en tutorial til at prøve at få lidt af det ind under huden. dog stødt på et problem igen der skulle være en fejl i denne del af koden håber dog ikke det var en taste fejl som sidste synes jeg har tjekket den igennem
Som jakobdo skrev: Hvis browseren navigerer videre til index.php?login=error3, så er dit problem, at $hashedpasswordCheck = false, dvs. at den ikke genkender det indtastede password:
Jeg har lige kopieret koden: $hashedpasswordCheck = password_verify($password, $row ['password']); if ($hashedpasswordCheck == false) { header("Location: ../index.php?login=error3"); exit() over i en editor.
Der er også et mellemrum her: $row ['password'] (mellem $row og [ )
Du kan have ret i, at det er her, du opdager fejlen, men jeg tror den opstår før det.
Din fejl må betyde, at password_verify(...) returnerer FALSE både når du angiver det rigtige password (jf din oprindelige post) og når du angiver det forkerte password (jf #22).
Det får mig til at tro, at der er noget "galt" med et af argumenterne til password_verify(...), således at funktionen meddeler dig, at password og hash ikke passer sammen uanset om de burde gøre det eller ej.
Jeg kan se af din kode, at du behandler det indtastede password med linien
Det andet argument til password_verify(...) kommer fra
$row ['password']);
og skal indeholde hash-værdien af brugerens password. Vi har ikke den kode, der viser hvordan det behandles før det ender i din database, men det jeg spørger til i #15 er, om du også kalder mysql_real_escape_string før dit kald til password_hash() i den kode. For hvis ikke du gør det, så vil password_verify ikke virke. Der kan også være andet galt. Evt kan du vide den del af koden også.
//Hashing the password $hashedpassword = password_hash($password, PASSWORD_DEFAULT); //insert the user into the database $sql = "INSERT INTO bruger (email, password, managernavn, klubnavn) VALUES ('$email', '$hashedpassword', '$managernavn', '$klubnavn');"; mysqli_query($conn, $sql); header("Location: ../signup.php?signup=success"); exit();
fik jeg det rigtige hashed men ikke med denne kode: $password = "123456"; $dinhash = "$2y$10$LU5Eznk6SkuYb"; $rigtighash = password_hash($password, PASSWORD_DEFAULT);
Felt format ser ok ud. Men jeg håber, at du kan se, at noget er galt:
Når du hasher "123456" med koden fra #32 får du "$2y$10$Ji8cQd02kUFgbQrdKtygXupreygynwGCZZoUJsFkonQEsmGxw6kZS".
Når du hasher "123456" med koden i #33 får du "$2y$10$LU5Eznk6SkuYb".
De skal give det samme! Prøv at skifte hash ud manuelt i databasen, og se at det virker. Så ved du at fejlen ikke ligger i login koden eller i databasen.
PASSWORD_DEFAULT - Use the bcrypt algorithm (default as of PHP 5.5.0). Note that this constant is designed to change over time as new and stronger algorithms are added to PHP. For that reason, the length of the result from using this identifier can change over time. Therefore, it is recommended to store the result in a database column that can expand beyond 60 characters (255 characters would be a good choice). PASSWORD_BCRYPT - Use the CRYPT_BLOWFISH algorithm to create the hash. This will produce a standard crypt() compatible hash using the "$2y$" identifier. The result will always be a 60 character string, or FALSE on failure. PASSWORD_ARGON2I - Use the Argon2 hashing algorithm to create the hash.
pt er default algorithm bcrypt, så lige pt skal dit varchar (20) lavas om til min varchar (60)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.