Zadejte hledaný výraz...

Login system v PHP

Sashaa
verified
rating uzivatele
(18 hodnocení)
2. 10. 2022 16:41:28
Zdravím, může mě tu prosím někdo poradit? Vytvořil jsem si login system v PHP, kde se přihlašuje skrze  napojení na databázi. K přihlášení jsem měl tyto údaje:
uživatelské jméno nebo email
heslo
Později jsem se rozhodl, že odeberu uživatelské jméno a nechám jen email k přihlášení, aby při registraci to bylo jednoduší pro nové uživatele. Script funguje jak má, jenomže mi tam zbyl jeden řádek, který potřebují upravit:
Tento kód potřebují mít takto:
nebo takto:
aby login_name tam nebylo vůbec k dispozici... jenže jakmile odeberu login_name tak se potom nedá přihlásit... nevím kde je chyba..
Zde je celý kod:
if (isset($_POST)){
include('db.php'); // Připojení k databazi
 
  $uzivatel = $_POST;
  $heslo = $_POST;
//doba pamatovani v cookies
if ($_POST === '5') {
$doba_trvani = time()+300;//5 minut ve vteřinach
}elseif ( $_POST === '10' ) {
$doba_trvani = time()+600;//10 minut ve vteřinach
}elseif ( $_POST === '30' ) {
$doba_trvani = time()+1800;//30 minut ve vteřinach
}elseif ( $_POST === 'hodina' ) {
$doba_trvani = time()+3600;
}elseif ( $_POST === 'hodin' ) {
$doba_trvani = time()+14400;
}elseif ( $_POST === 'den' ) {
$doba_trvani = time()+86400;
}elseif ( $_POST === 'dny' ) {
$doba_trvani = time()+259200;
}elseif ( $_POST === 'tyden' ) {
$doba_trvani = time()+604800;
}elseif ( $_POST === 'mesic' ) {
$doba_trvani = time()+2592000;
}elseif ( $_POST === 'rok' ) {
$doba_trvani = time()+31556952;
}
 
 
  if (empty($uzivatel) || empty($heslo) ) {
    header("Location: ../login.php?error=prazdnepole");
    exit();
  }
  else {
    $sql = "SELECT * FROM uzivatele WHERE Emailuser=? OR login_name=?;";
    $stmt = mysqli_stmt_init($conn);
    if (!mysqli_stmt_prepare($stmt, $sql) ) {
      header("Location: ../login.php?error=sqlchyba");
    exit();
    }
    else {
   
    mysqli_stmt_bind_param($stmt, "ss", $uzivatel, $heslo);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
   
    if ($row = mysqli_fetch_assoc($result) ) {
      $pwdCheck = password_verify($heslo, $row);
     
      if ($pwdCheck == false) {
        header("Location: ../login.php?error=spatneheslo");
      exit(); }
     
      else if ($pwdCheck == true) {
     
          if ($row == 'admin') {
     
       
        session_start();
        $_SESSION = $row;
        $_SESSION = $row;   
             
        if(isset($_REQUEST)){
        // pamatovani prihlaseni v cookie
        setcookie("userlogin", $_SESSION, $doba_trvani, '/');
      } else {
        unset($_COOKIE);
      }
     
    header("Location: ../?login=prihlasen");
      exit(); 
     
          } else {
      header("Location: ../login.php?error=zakaznik");
          }
     
     
     
      }
      else {
        header("Location: ../login.php?error=spatneheslo");
      exit();
      }
     
      }
   
    else {
        header("Location: ../login.php?error=uzivatelneexistuje");
      exit();
    }
   
    }
   
  }
 
}
else {
      header("Location: ../login.php");
    exit();
}
2. 10. 2022 16:41:28
https://webtrh.cz/diskuse/login-system-v-php/#reply1507704
Patrik
verified
rating uzivatele
(18 hodnocení)
2. 10. 2022 19:51:21
podla mna je chyba v tej ; za otaznikom :)
2. 10. 2022 19:51:21
https://webtrh.cz/diskuse/login-system-v-php/#reply1507703
wt_kaspy
verified
rating uzivatele
(4 hodnocení)
3. 10. 2022 06:55:13
První věc - podle kódu to vypadá, ze heslo v DB ukladate v plaintextu. To je velký bezpečnostní problém - v DB ukladejte pouze nějaký hash hesla a pak porovnavejte pouze hash hesla co zadal uživatel s hashem z databáze ( MD5 hash už je zastaralý, doporučuji minimálně SHA1 )
Druha věc - použijte tu druhou možnost SQL dotazu, kde máte středník jak před uvozovkami, tak za nima. Středník patří jak na konec SQL dotazu, tak na konec PHP řádky.
Třetí věc - pošlete sem i chybovou hlášku, kterou to vypisuje, jinak chyba půjde těžko debuggovat.
3. 10. 2022 06:55:13
https://webtrh.cz/diskuse/login-system-v-php/#reply1507702
unlucky
verified
rating uzivatele
(16 hodnocení)
25. 10. 2022 05:01:39
si najdi všude, kde máš login_name a pak si to uprav/smaž
25. 10. 2022 05:01:39
https://webtrh.cz/diskuse/login-system-v-php/#reply1507701
Marek Soldán
verified
rating uzivatele
(10 hodnocení)
25. 10. 2022 11:01:52
Ahoj, podle mě je problém někde tady
Posíláš nesmyslně $uzivatel a $heslo, a pritom v dotazu je heslo dosazovano za login_name 
Pokud login_name odebereš, je potřeba upravit i ten bind_param
Ale jak bylo zmíněno výše, pošli případně chybovou hlášku
25. 10. 2022 11:01:52
https://webtrh.cz/diskuse/login-system-v-php/#reply1507700
Pro odpověď se přihlašte.
Přihlásit