Регистрация и вход через PDO

не вините меня, я пытаюсь учиться, код работает, но я не уверен, что он хорошо оптимизирован. Скажите, пожалуйста, если вы видите что-то не так. Моя цель – добиться максимально оптимизированного кода (и научиться чему-то среднему).

  1. Регистрация пользователя -> проверить, существует ли имя пользователя или адрес электронной почты, если нет = вставить в базу данных
  2. Логин пользователя -> проверьте базу данных, если имя пользователя существует, затем подтвердите пароль, впустите их 🙂

Login.php

<?php 
session_start();
....
<form....>// https://stackoverflow.com/questions/11974613/pdo-php-check-if-row-exist
    $stmt = $link->prepare('SELECT * FROM users WHERE username=? LIMIT 1');
    $stmt->bindParam(1, $username, PDO::PARAM_STR);
    $stmt->execute();
    $row = $stmt->fetch(PDO::FETCH_ASSOC); //$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 
        if( $row ) {
            if (password_verify($_POST['password'], $row['password'])) {
                // ==============================
                session_regenerate_id(); // https://www.php.net/manual/en/function.session-regenerate-id.php
                $_SESSION["loggedin"] = true; // Store data in session variables
                $_SESSION["id"] = $row['id'];
                $_SESSION["username"] = $_POST["username"];  
                    //$form->printr($_SESSION); // for debug 
                header("location: profile.php");  
                // ==============================
            } else { $form->error_message("Паролата не е вярна."); } // User ok , pass not valid    
        }  else { $form->error_message("Няма такъв акаунт в системата."); } // No such user         
    $link = null; // close pdo connection

Register.php

<?php
session_start();
...
<form...>//
/* https://stackoverflow.com/questions/11974613/pdo-php-check-if-row-exist
        $sql="SELECT 1 from table WHERE id = ? LIMIT 1";
        //$sql="SELECT COUNT(*) from table WHERE param = ?"; // for checking >1 records
        $stmt = $conn->prepare($sql);
        $stmt->bindParam(1, $_GET['id'], PDO::PARAM_INT);
        $stmt->execute(); 
        if($stmt->fetchColumn()) echo 'found';
*/ 
        $stmt = $link->prepare("SELECT 1 from users WHERE username=? or email=? LIMIT 1");
        $stmt->execute(array($username,$email));
        if ($stmt->fetchColumn() > 0) { 
           $form->add_to_errors('Името или Имейла вече е зает, моля опитайте с друг.'); // Username taken
        } else { 
           $data = ['name' => $username,'email'  => $email, 'pass' => $password]; // INSERT INTO DATABASE 
        $sql = "INSERT INTO users (username, email, password) VALUES (:name, :email, :pass)"; 
        // ===========================================================
        $stmt= $link->prepare($sql); //$stmt->execute($data);
        if ($stmt->execute($data)) {  //success 
            $form->success_message("Добре дошъл в системата: <b>".$username."</b>"); 
            //session_regenerate_id();  
        } else { $form->add_to_errors('Проблем със заявката за регистрация, моля опитайте по-късно или се свържете с администратор.'); } // failed 
        } 
    $link = null; // close pdo connection 

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *