Autor Zpráva
Kardif
Profil *
Potřebuju přihlásit lidi z phpbb databáze na svojí stránce, jenomže nemůžu přijít jak na to normálně bych použil tenhle kod:
    session_start();

    if(isset($_POST['jmeno'])){
      require_once 'db.php';
      $name = $_POST['jmeno'];
      $pass = $_POST['heslo'];
      echo $pass
        $query = mysql_query("SELECT * FROM `uziv` WHERE `meno` = '$name' and `heslo` = '$pass'") or die (mysql_error());
          $Vysledek = mysql_fetch_array($query);
            if($Vysledek['meno']){
              // Do sessions si uložíme pár informací o přihlášeném
              $_SESSION['prihlasen'] = 1;
              $_SESSION['login'] = $Vysledek['username'];
              $_SESSION['UserId'] = $Vysledek['user_id'];
            $_SESSION['prava'] = $Vysledek['prava'];
            }else{
    echo "Bohužel jste zadali špatné jméno nebo heslo";
            }
        mysql_free_result($query);
    }else{
      echo "Zde nic není.";
    }
    ob_end_flush();


Jenomže phpbb má heslo v hashi, kterej je prý nerozluštelnej :D. Takže tenhle kod jaksi nefunguje. Předem děkuji za každou pomoc.
Majkl578
Profil
Jaký je problém s hashováním pomocí jejich funkce?
AM_
Profil
Kardif:
Jenomže phpbb má heslo v hashi, kterej je prý nerozluštelnej :D
jasně, hesla rozluštit nelze, ale o jaký hash se jedná lze zjistit většinou na pohled (32 hexa znaků - MD5, teď nevím jak přesně dlouhý je SHA1). Hashovací algoritmy má PHP zabudované přímo jako funkce md5() a sha1().
tiso
Profil
Kardif: stačí sa pozrieť ako má prihlasovanie riešené phpbb a použiť ho na svojej stránke.
Kardif
Profil *
:D:D Tak prohrabávat se kodem se 50000 řádky a hledat kde to má fuknci na přihlášení to vidím bledě.
No ale mělo by se používat tohle:phpbb_hash() ale i když to použiju tak se mi nic nevypíše ani chyba prostě prázdnej list
AM_
Profil
Kardif:
No pokud já vím tak BBčko používá MD5, přesně tohle jsem jednou dělal - web s přihlašováním a účty jsem převzal z phpBB, které běželo na md5. Pokud máš nějakou jinou verzi, tak se v tom holt budeš muset prohrabat. Programátoři phpBB zřejmě nejsou takoví dobytci, aby phpbb_hash() něco vypisovalo na standardní výstup. Z tvého posledního příspěvku opravdu nic nevyvěštíme, a holt je na tobě tu funkci prozkoumat pokud se nechová jak bys čekal nebo si najít dokumentaci k phpBB.
Majkl578
Profil
Kardif:
PHPBB má také tzv. Code Reference. Tam by jsi to zjistil velice rychle. Viz funkce phpbb_hash.
nightfish
Profil
předpokládám, že hledáš spíš phpbb_check_hash() (nachází se ve functions.php)
Kardif
Profil *
Tak sem to udělal takhle a stejně nic bílá stránka :-(
<?php
ob_start();

session_start();
define('IN_PHPBB', true);
include_once  ("/includes/functions.php");
if(isset($_POST['jmeno'])){
  require_once 'db.php';
  $name = $_POST['jmeno'];
  $pass = phpbb_check_hash($_POST['heslo']);
  echo $pass
    $query = mysql_query("SELECT * FROM `phpbb_users` WHERE `username` = '$name' and `user_password` = '$pass'") or die (mysql_error());
    // Vybereme uživatele se zadaným jménem a heslem
      $Vysledek = mysql_fetch_array($query);
        if($Vysledek['username']){ // pokud tato proměnná obsahuje data, bylo zadané správné jméno a heslo
          // Do sessions si uložíme pár informací o přihlášeném
          $_SESSION['prihlasen'] = 1;
          $_SESSION['login'] = $Vysledek['username'];
          $_SESSION['UserId'] = $Vysledek['user_id'];
        $_SESSION['prava'] = $Vysledek['prava'];
        }else{
echo "Bohužel jste zadali špatné jméno nebo heslo";
        }
    mysql_free_result($query);
}else{
  echo "Zde nic není.";
}
ob_end_flush();
?>
Majkl578
Profil
Na řádku 11 je chyba syntaxe - chybí středník.
Doporučuji zapnout chybové hlášky.
shaggy
Profil
Kardif:
Predpokladám, že si si neprečítal popis funkcie na stránke phpbb.
Pretože by si vedel, že tvoj riadok č. 10
$pass = phpbb_check_hash($_POST['heslo']);

nemôže fungovať, pretože:
1. funkcia porovnáva heslo s hashom, ktorý je v db a ty jej predávaš iba jednu premennú,
2. aj keby jej stačila iba premenná heslo, tak $pass by sa rovnalo iba true alebo false. A potom by nasledujúci riadok
$query = mysql_query("SELECT * FROM `phpbb_users` WHERE `username` = '$name' and `user_password` = '$pass'")

aj tak neprešiel, pretože žiadny z používateľov nemá heslo, ktoré sa rovná true alebo false.

Preto by si mal:
1. po prihlásení vybrať z DB stĺpce user_id, prava a heslo (resp. jeho hash) pre používateľa, ktorého username sa rovná tomu, ktoré zadal pri prihlasovaní.
2. overiť, či sa jeho heslo zhoduje s heslom po prihlásení, čiže:
$isPass = phpbb_check_hash($_POST['heslo'], $Vysledek['heslo']);

a ak bude $isPass true, tak ho "prihlásiš" (nastavíš hodnoty session).

Samozrejme ber ten môj kód ako ilustračný, treba si ošetriť vstupy a prispôsobiť si svojim potrebám.
Kardif
Profil *
No tak sem to předělal, ale stejně to nefunguje myslým že je to v tom true a v tej podmínce (teď se trochu stydím, ale tak něják sem ještě nepoužíva true a fals)
<?php
ob_start();

session_start();
define('IN_PHPBB', true);
include_once  ("/includes/functions.php");
if(isset($_POST['jmeno'])){
  require_once 'db.php';
  $name = $_POST['jmeno'];
  $pass = $_POST['heslo'];
  
    $query = mysql_query("SELECT * FROM `phpbb_users` WHERE `username` = '".$name."'") or die (mysql_error());
    // Vybereme uživatele se zadaným jménem a heslem
	
      $Vysledek = mysql_fetch_array($query);
	  $isPass = phpbb_check_hash($_POST['heslo'], $Vysledek['heslo']);
	  if ($isPass == true) {
	     $query2 = mysql_query("SELECT * FROM `phpbb_users` WHERE `user_id` = '".$Vysledek['user_id']."'") or die (mysql_error());
      $Vysledek2 = mysql_fetch_array($query2);
          $_SESSION['prihlasen'] = 1;
          $_SESSION['login'] = $Vysledek2['username'];
          $_SESSION['UserId'] = $Vysledek['user_id'];
          $_SESSION['points'] = $Vysledek['user_points'];
        }else{
echo "Bohužel jste zadali špatné jméno nebo heslo";
        }
    mysql_free_result($query);
}else{
  echo "Zde nic není.";
}
ob_end_flush();
?>

Už jsem z toho docela konsternovanej :-).
AM_
Profil
Kardif:
ale stejně to nefunguje
asi je to rozbité.
Kardif
Profil *
:D Zajímavý čtení, né že by to pomohlo, ale díky ;-)
AM_
Profil
Kardif:
:-DD to myslíš vážně? [#12] Kardif to myslíš že si ten kód budeme instalovat na localhost, vedle toho phpBB a zjišťovat, proč ti to nešlape? ten odkaz tě měl přivést k tomu, aby ses alespoň obtěžoval dodat chybu. A jestli ti to neháže chybovou hlášku, tak zapojit echo, var_dump atd, vypsat si klíčové proměnné v klíčových místech a zjistit, proč ti to nefunguje. Kdybych já běžel na fórum s každou funkcí, která se nechová tak, jak bych čekal, tak tu udělám denně deset vláken, to je holt otrocká programátorská práce na to přijít, a ne někam plácnout kód aby na to přišli ostatní.

že je to v tom true a v tej podmínce
co je v true? true je hodota, v ní nic není. V podmínce je toho spoustu, třeba můj kamarád, který řídil pod vlivem alkoholu. Ne že by tahle věta nějak pomohla nám.
Kardif
Profil *
Jo díky Nakonec sem to udělal trochu jinak :D No dost jinak :D Ale otevřel si mi oči
Nadan
Profil
Kardif:
Jak jsi to udělal? :-D
Kardif
Profil *
No přpsal jsem ve function.php ověřování, takže při ověřování to udělá z toho phpbb_hashe MD5 a to už pak jde porovnat v pohodě

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: