Changes between Version 7 and Version 8 of ImportantCase0


Ignore:
Timestamp:
02/24/25 15:53:35 (6 weeks ago)
Author:
222039
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ImportantCase0

    v7 v8  
    2929}
    3030
     31// Sanitize and validate inputs
    3132$input_name = trim(htmlspecialchars($_POST['username']));
    3233$input_email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
     
    5556    require 'connect.php';
    5657
     58    $conn->beginTransaction();
     59
    5760    // Check for existing username
    58     $stmt = $conn->prepare("SELECT COUNT(*) FROM Users WHERE username = :username");
    59     $stmt->bindParam(':username', $input_name, PDO::PARAM_STR);
    60     $stmt->execute();
    61    
    62     if ($stmt->fetchColumn() > 0) {
    63         header("Location: /Sign&Log.php?error=USERNAME_TAKEN&email=" . urlencode($_POST['email']));
    64         exit();
    65     }
    66 
    67     // Check for existing email
    68     $stmt = $conn->prepare("SELECT COUNT(*) FROM Users WHERE email = :email");
    69     $stmt->bindParam(':email', $input_email, PDO::PARAM_STR);
    70     $stmt->execute();
    71    
    72     if ($stmt->fetchColumn() > 0) {
    73         header("Location: /Sign&Log.php?error=EMAIL_TAKEN&username=" . urlencode($input_name));
    74         exit();
    75     }
    76 
     61    $stmt = $conn->prepare("CALL register_user(:username, :email, :password, :role)");
    7762    // Hash password
    7863    $hashed_password = password_hash($input_password, PASSWORD_ARGON2ID, [
     
    8166        'threads' => 3
    8267    ]);
    83 
    84     // Insert new user
    85     $stmt = $conn->prepare('
    86         INSERT INTO Users (username, email, password, role)
    87         VALUES (:username, :email, :password, :role)
    88     ');
    8968
    9069    $stmt->bindParam(':username', $input_name, PDO::PARAM_STR);
     
    9574    $stmt->execute();
    9675
     76    // Commit the transaction
     77    $conn->commit();
     78
     79    // Set session variables for automatic login
    9780    session_regenerate_id(true);
    9881    $_SESSION['username'] = $input_name;
     
    10790
    10891} catch (PDOException $e) {
     92    // Roll back the transaction if something failed
     93    $conn->rollBack();
    10994    error_log("Registration error: " . $e->getMessage());
    11095    header("Location: /Sign&Log.php?error=SERVER_ERROR");
    11196    exit();
    11297}
     98
     99
     100?>
    113101}}}
    114102
    115103
     104* '''''Се користи POST метод за испраќање на податоците од формата. Кодот врши основна валидација на внесените податоци (email, корисничко име, лозинка) и проверува дали се соодветни (на пр., дали лозинката е доволно силна, дали email-от е валиден). Ако сите податоци се точни, кодот ги чисти и валидира внесените вредности, а потоа ги зачувува во базата на податоци преку SQL процедура (CALL register_user). Лозинката се хашира со PASSWORD_ARGON2ID за подобар ентитет. Ако регистрацијата е успешна, корисникот се логира автоматски и се пренасочува кон почетната страница (HomePage.php). Ако има грешка, корисникот се враќа на страницата за регистрација со соодветна порака за грешка. Се користат сесии за следење на активност и зачувување на корисничките податоци.'''''
    116105=== Чекор 2 ===
    117106По успешна регистрација корисникот се најавува со своето корисничко име и лозинка за да да пристапи до платформата.