Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Dowiedz się więcej OK, rozumiem

[PHP]Niepowtarzające się loginy.

Zdecydowałeś się na tworzenie interaktywnych stron przy pomocy PHP? Chcesz w łatwy i szybki sposób zarządzać danymi na swojej stronie? Tutaj znajdziesz pomoc w napotkanych przy tym trudnościach.

[PHP]Niepowtarzające się loginy.

Post 23.10.2018, 06:40:13

Witam. Mam pewien problem, otóż potrzebuję przy rejestracji aby login, ani email się nie powtarzały. Tak wygląda mój kod:
Kod: Zaznacz cały
<?php
require_once("config.php");
if(isset($_POST['register'])){
    $logg = $_POST['logg'];
  $email = $_POST['email'];
  $password = $_POST['password'];
  $hashPassword = password_hash($password,PASSWORD_BCRYPT);
  $sth = $db->prepare('INSERT INTO user (logg,email,password) VALUE (:logg,:email,:password)');
  $sth->bindValue(':logg', $logg, PDO::PARAM_STR);
  $sth->bindValue(':email', $email, PDO::PARAM_STR);
  $sth->bindValue(':password', $hashPassword, PDO::PARAM_STR);
  $sth->execute();

  header('Location: ./login.php');
 
}
?>

Znalazłem coś takiego na internecie " $spr1 = mysql_fetch_array(mysql_query("SELECT user.email FROM user WHERE email='$email' LIMIT 1"));" "if ($spr1[0] >= 1) {
$komunikaty .= "Ten login jest zajęty!<br>"; }" Lecz nie działa mi to. Nazwa mojej bazy to " user" loginu to "logg", a emaila "email". Proszę o pomoc.
vdk1999
Posty: 2
Dołączył(a): 23.10.2018

Re: [PHP]Niepowtarzające się loginy.

Post 23.10.2018, 09:58:11

Poszukałem znalazłem ale raz działa raz nie, co może być przyczyną?
Kod: Zaznacz cały
<?php
require_once("config.php");
if(isset($_POST['register'])){
    $logg = $_POST['logg'];
  $email = $_POST['email'];
  $password = $_POST['password'];
  $hashPassword = password_hash($password,PASSWORD_BCRYPT);
  $spr1 = mysqli_fetch_array(mysqli_query("SELECT user.email, user.logg FROM user WHERE email='$email' OR logg='$logg'"));

  if (($spr1)!=NULL) {
   echo "Ten login jest zajęty!";
exit();
}

   
  $sth = $db->prepare('INSERT INTO user (logg,email,password) VALUE (:logg,:email,:password)');
  $sth->bindValue(':logg', $logg, PDO::PARAM_STR);
  $sth->bindValue(':email', $email, PDO::PARAM_STR);
  $sth->bindValue(':password', $hashPassword, PDO::PARAM_STR);
  $sth->execute();
 
  header('Location: ./login.php');
 
}
?>
vdk1999
Posty: 2
Dołączył(a): 23.10.2018

Re: [PHP]Niepowtarzające się loginy.

Post 30.10.2018, 22:09:51

Jedyne co mi przychodzi do głowy to to, że na raz dwóch użytkowników rejestruje w tym samym czasie tego samego usera, albo że haszowanie hasła za długo trwa bo to bcrypt który jest wolny w czasie jak jeden haszuje to drugi zdążył zarejestrować usera. Ale to chyba nie to bo pewnie testujesz to lokalnie.

PS: w tym drugim skrypcie masz SQL Injection, ale skoro używasz prepare w pierwszym to pewnie wiesz.
jjankiewicz
Jakub Jankiewicz

Posty: 12
Dołączył(a): 30.10.2018
Lokalizacja: Świętokrzyskie

Re: [PHP]Niepowtarzające się loginy.

Post 02.11.2018, 10:11:24

Robiłem właśnie coś takiego i mam taki kod:

Kod: Zaznacz cały
    function register($username, $email, $password) {
        $ret = $this->query("SELECT count(*) FROM users WHERE username = ? OR email = ?",
                            $username,
                            $email);
        if ($ret[0]['count(*)'] > 0) {
            throw new Exception("user already exists");
        }
        $password = password_hash($password, PASSWORD_BCRYPT);
        $this->query("INSERT INTO users(email, username, password) VALUES(?, ?, ?)",
                     $email,
                     $username,
                     $password);
        return $this->lastInsertId();
    }


Gdzie query wygląda tak:

Kod: Zaznacz cały
    function query($query) {
        $args = func_get_args();
        array_shift($args);
        if (count($args) == 0) {
            $res = $this->db->query($query);
        } else {
            $res = $this->db->prepare($query);
            if ($res) {
                if (!$res->execute($args)) {
                    throw Exception("execute query failed");
                }
            } else {
                throw Exception("wrong query");
            }
        }
        if ($res) {
            if (preg_match("/^\s*INSERT|UPDATE|DELETE|ALTER|CREATE|DROP/i", $query)) {
                return $res->rowCount();
            } else {
                    return $res->fetchAll(PDO::FETCH_ASSOC);
            }
        } else {
            throw new Exception("Query Error");
        }
    }
jjankiewicz
Jakub Jankiewicz

Posty: 12
Dołączył(a): 30.10.2018
Lokalizacja: Świętokrzyskie


Powrót do PHP i bazy danych


 


  • Podobne wątki
    Odpowiedzi
    Wyświetlone
    Ostatni post

Kto przegląda forum

Użytkownicy przeglądający ten dział: Bing [Bot] i 3 gości

Hosting, Domeny, SSL

Subskrypcja

Mamy 52886 zarejestrowanych użytkowników.
Najnowszy użytkownik: Panditji14


Nasi użytkownicy napisali:

  • 939109 wiadomości
  • w 248350 tematach

Najnowsze wpisy na blogu

Najnowsze artykuły

Najaktywniejsi (ostatnie 30 dni)