Hej! Jag håller på att koda ett simpelt inloggningssystem i PHP där man kan registrera sig med ett användarnamn + lösenord, och sedan logga in förutsatt att den inmatade datan följer vissa riktlinjer (t.ex. att användarnamnet enbart får innehålla siffror och bokstäver, samt att man inte kan registrera sig med ett användarnamn som redan är taget).
Jag har hittills bara kodat registreringsdelen och har stött på några problem. Jag har ett .php-dokument med error handlers som exekverar diverse funktioner, och funktionerna återfinns i ett separat .php-dokument. Koden ser ut såhär:
Det första problemet jag stöter på är ett felmeddelande (när jag klickar på "registrera") som hänvisar till ett ","-tecken som finns på rad 55, där det tydligen inte ska finnas. Detta ","-tecken återfinns alltså i funktionen invalidUsername() där kommatecknet separerar preg_match-funktionen och variabeln $username, och jag förstår inte riktigt varför jag får ett parse error för detta då ju kommatecknet visst ska finnas där för att separera funktionens parametrar, så om någon kan hjälpa mig lista ut vad detta beror på så vore det nice.
Jag har kommenterat ut funktionen invalidUsername() för att testa de resterande error handlers som finns, men resultatet blir att enbart den första error handlern exekveras oavsett resultat, dvs även om alla inmatningsfält är ifyllda så returnerar funktionen emptyInputFields() true. Jag har testat samtliga kombinationer av ifylld data som skulle kunnat trigga samtliga error handlers men emptyInputFields() är det enda som körs, även när den inte skall göra det.
Om någon har några tips på hur jag kan ta mig vidare samt även tips på hur man debuggar (för jag har ingen riktig strategi för det) så tas detta tacksamt emot
Jag har hittills bara kodat registreringsdelen och har stött på några problem. Jag har ett .php-dokument med error handlers som exekverar diverse funktioner, och funktionerna återfinns i ett separat .php-dokument. Koden ser ut såhär:
Kod:
<?php
if(isset($_POST['submit'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$rePassword = $_POST['rePassword'];
require_once 'dbh.inc.php';
require_once 'functions.inc.php';
if(emptyInputFields($username, $password, $rePassword)) {
header('location: ../register.php?error=empty_input');
exit();
}
if(username2short($username)) {
header('location: ../register.php?error=username2short');
exit();
}
if(username2long($username)) {
header('location: ../register.php?error=username2long');
exit();
}
if(invalidUsername($username)) {
header('location: ../register.php?error=invalid_username');
exit();
}
if(password2short($password)) {
header('location: ../register.php?error=password2short');
exit();
}
if(passwordsNotMatching($password, $rePassword)) {
header('location: ../register.php?error=passwords_not_matching');
exit();
}
if(usernameTaken($conn, $username)) {
header('location: ../register.php?error=username_taken');
exit();
}
createUser($conn, $username, $password);
}
else {
header('location: ../register.php');
exit();
}
Kod:
<?php
function emptyInputFields($username, $password, $rePassword) {
$result;
if(empty($username) || empty($password) || empty($rePassword)) {
$result = true;
}
else {
$result = false;
}
return $result;
}
function username2short($username) {
$result;
if(strlen($username) < 6) {
$result = true;
}
else {
$result = false;
}
return $result;
}
function username2long($username) {
$result;
if(strlen($username > 12)) {
$result = true;
}
else {
$result = false;
}
return $result;
}
function invalidUsername($username) {
$result;
if(!preg_match("/^[a-zA-Z0-9]*$/"), $username) {
$result = true;
}
else {
$result = false;
}
return $result;
}
function password2short($password) {
$result;
if(strlen($password) < 8) {
$result = true;
}
else {
$result = false;
}
return $result;
}
function passwordsNotMatching($password, $rePassword) {
$result;
if($password !== $rePassword) {
$result = true;
}
else {
$result = false;
}
return $result;
}
function usernameTaken($conn, $username) {
$result;
$sql = "SELECT * FROM users WHERE username = ?;";
$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql)) {
header('location: ../register.php?error=connection_error');
exit();
}
mysqli_stmt_bind_param($stmt, 's', $username);
mysqli_stmt_execute($stmt);
$resultData = mysqli_stmt_get_result($stmt);
if($row = mysqli_fetch_assoc($resultData)) {
return $row;
}
else {
$result = false;
return $result;
}
mysqli_stmt_close($stmt);
}
function createUser($conn, $username, $password) {
$sql = "INSERT INTO users (username, password) VALUES (?, ?);";
$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql)) {
header('location: ../register.php?error=connection_error');
exit();
}
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
mysqli_stmt_bind_param($stmt, 'ss', $username, $hashedPassword);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
header('location: ../register.php?success=user_created');
exit();
}
Det första problemet jag stöter på är ett felmeddelande (när jag klickar på "registrera") som hänvisar till ett ","-tecken som finns på rad 55, där det tydligen inte ska finnas. Detta ","-tecken återfinns alltså i funktionen invalidUsername() där kommatecknet separerar preg_match-funktionen och variabeln $username, och jag förstår inte riktigt varför jag får ett parse error för detta då ju kommatecknet visst ska finnas där för att separera funktionens parametrar, så om någon kan hjälpa mig lista ut vad detta beror på så vore det nice.
Jag har kommenterat ut funktionen invalidUsername() för att testa de resterande error handlers som finns, men resultatet blir att enbart den första error handlern exekveras oavsett resultat, dvs även om alla inmatningsfält är ifyllda så returnerar funktionen emptyInputFields() true. Jag har testat samtliga kombinationer av ifylld data som skulle kunnat trigga samtliga error handlers men emptyInputFields() är det enda som körs, även när den inte skall göra det.
Om någon har några tips på hur jag kan ta mig vidare samt även tips på hur man debuggar (för jag har ingen riktig strategi för det) så tas detta tacksamt emot