не вините меня, я пытаюсь учиться, код работает, но я не уверен, что он хорошо оптимизирован. Скажите, пожалуйста, если вы видите что-то не так. Моя цель — добиться максимально оптимизированного кода (и научиться чему-то среднему).
- Регистрация пользователя -> проверить, существует ли имя пользователя или адрес электронной почты, если нет = вставить в базу данных
- Логин пользователя -> проверьте базу данных, если имя пользователя существует, затем подтвердите пароль, впустите их 🙂
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