zaheslování více stránek pro více uživatelů

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Odpovědět
jurasek07
nováček
Příspěvky: 5
Registrován: 30 pro 2006 20:32

zaheslování více stránek pro více uživatelů

Příspěvek od jurasek07 »

Vytvářel jsem podle různých návodů administraci k webu. Stránky jsou zaheslované pro jednoho uživatele a heslo je vloženo v kódu (index.php).
Mám databází více uživatelů s DB SQL, kterým bych chtěl zpřístupnit tuto administraci. Chtěl jsem poprosit o radu, jak skript upravit, aby kontroloval uživatele z databáze, např. tabulky uzivatele a ne ze skriptu (pouze jednoho uživatele).

Níže uvádím 3 hlavní skripty:

1. Přihlašovací formulář (login.php)
<?php
session_unset();
?>
<form action="index.php" method="post">
Uživatel: <input type="text" name="user"><br>
Heslo: <input type="password" name="heslo"><br>
<input type="submit" value="Příhlásit">
</form>


2. hlavní skript s kontrolou (index.php)
<?php
session_start();
$login = $_POST['user'];
$pass = $_POST['heslo'];

//přihlašovací údaje
$login1 = 'admin';
$pass1 = 'heslo';


if (($login == $login1) and ($pass == $pass1) or ($_SESSION['authuser'] == 1)) { $_SESSION['authuser'] = 1; } else {
echo "<meta http-equiv='Refresh' content='0 ; URL=login.php'>";
exit(); }

echo "... zaheslovaný obsah ...";

?>


3. kontrolní skript (ten je ve všech ostatních stránkách)
<?php
if ($_SESSION['authuser'] != 1) {
echo "<meta http-equiv='Refresh' content='0 ; URL=../index.php'>";
echo "<p>Nemáte oprávnění k prohlížení této stránky</p>\n";
exit();
}
?>

Děkuji moc za pomoc
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: zaheslování více stránek pro více uživatelů

Příspěvek od CZechBoY »

zhruba takhle(z hlavy)
login na stránce index.php:
<form action=kontrola.php>
inputy pro jméno, heslo, atd
</form>

kontrola na kontrola.php:
<?php
session_start();
[color=#808080]// někde na začátku se připoj k databázi

$jmeno=MySQL_Real_Escape_String($_POST['jmeno']); //jmeno = jméno inputu <input name=jmeno>
$heslo=MySQL_Real_Escape_String($_POST['heslo']); // to samé...
$resLogin=@MySQL_Query("SELECT jmeno,heslo FROM uzivatele WHERE jmeno='$jmeno'") Or Die(MySQL_Error());
$rLogin=MySQL_Fetch_Assoc($resLogin);
If($rLogin['heslo']==$heslo){
$_SESSION['uzivatel']=$rLogin['jmeno'];
Header("Location:administrace.php");
}
Else{
session_destroy();
echo "Špatné heslo nebo uživatel neexistuje";
}
?>[/color]

potom soubor administrace.php (a další v zaheslované zóně):
začátek:
<?php
session_start();
If(Empty($_SESSION['uzivatel']))
Header("Location:./");
Else{
pokračování kodu když je uživatel přihlášen
}


nebo můžeš uzavřít kod přes exit u toho když není přihlášen(tentýž soubor administrace.php):
<?php
session_start();
If(Empty($_SESSION['uzivatel']))
exit(Header("Location:./"));
//pokračování


asi s MySQL žádný zkušenosti nemáš takže ti napíšu návod ještě:
založ si MySQL databázi a do ni vytvoř tabulku přes SQL příkaz:

Kód: Vybrat vše

CREATE TABLE `uzivatele` (
`jmeno` VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_czech_ci NOT NULL COMMENT 'jméno k přihlášení',
`heslo` VARCHAR( 30 ) CHARACTER SET utf8 COLLATE utf8_czech_ci NOT NULL COMMENT 'heslo k přihlášení',
PRIMARY KEY ( `jmeno` )
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_czech_ci COMMENT = 'přihlašovací tabulka'


potom přihlášení pomocí PHP:
$db=@mysql_connect("server","uzivatel","heslo") or die(mysql_error());
mysl_select_db("databaze") or die(mysql_error()); //většinou stejná jako uživatel (v 90% případů)
mysql_query("SET NAMES 'utf8'"); //nastavení kódování UTF8 - doporučuji UTF8, můžeš použít ještě mnoho jiných
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
jurasek07
nováček
Příspěvky: 5
Registrován: 30 pro 2006 20:32

Re: zaheslování více stránek pro více uživatelů

Příspěvek od jurasek07 »

Děkuji moc za postup.
Od včerejška až do dneška jsem nad tím seděl a bojoval, dokud se mi to nepodařilo rozchodit.
Co se týče SQL a je pravda, že se s tím učím. Už se mi po daří vytvářet tabulky, horší je to s těmi SQL dotazy.

Jestě jsem se chtěl zeptat, kdybych chtěl heslo kódovat do MD5, tak jak to udělat. Níže jsem do formuláře zkusil tuto funkci zakomponovat, ale nefunguje to. Nepustí to ani staré heslo ani nové.
Děkuji za pomoc


$jmeno=MySQL_Real_Escape_String($_POST['jmeno']); //jmeno = jméno inputu <input name=jmeno>
$heslo=MySQL_Real_Escape_String($_POST['heslo']); // to samé...

$kod = MD5($heslo);

$resLogin=@MySQL_Query("SELECT jmeno,heslo FROM uzivatele WHERE jmeno='$jmeno'") Or Die(MySQL_Error());
$rLogin=MySQL_Fetch_Assoc($resLogin);
If($rLogin['heslo']==$kod){
$_SESSION['uzivatel']=$rLogin['jmeno'];
Header("Location:administrace.php");
}
Else{
session_destroy();
echo "Špatné heslo nebo uživatel neexistuje";
}
?>
jurasek07
nováček
Příspěvky: 5
Registrován: 30 pro 2006 20:32

Re: zaheslování více stránek pro více uživatelů

Příspěvek od jurasek07 »

tak stahuji svůj dotaz, který jsem napsal před chvílí.
Chybu jsem odhalil. Heslo v MD5 má 32 znaků a v tabulce databáze bylo nastaveno 30.
Rozšířil jsem pole o ty dva znaky na 2 a je to v pořádku.
Je vidět, že se mám pořád co učit.
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: zaheslování více stránek pro více uživatelů

Příspěvek od CZechBoY »

nech tam délku 30znaků, je to bezpečnější pak aspoň to heslo nedostaneš z5 ;-)
akorát si dej v přihlašovacím skriptu $heslo=SubStr($heslo,0,30)
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
Odpovědět
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Změna poslední číslice ve více číslech najednou
    od Arnold91 » » v Kancelářské balíky
    7 Odpovědi
    11221 Zobrazení
    Poslední příspěvek od Zivan
  • Canon pixma ts5150 w11 nelze tisknout vice kopii na stranku
    od mrpcz » » v Vše ostatní (hw)
    4 Odpovědi
    4223 Zobrazení
    Poslední příspěvek od petr22
  • zamrzání Ntb + dlouhé načítání stránek a aplikací
    od PARKR » » v Problémy s hardwarem
    8 Odpovědi
    4591 Zobrazení
    Poslední příspěvek od PARKR
  • Problém s načítáním stránek - bílá blikající obrazovka po přihlášení
    od linkinlot9 » » v Programování a tvorba webu
    1 Odpovědi
    3067 Zobrazení
    Poslední příspěvek od kecalek

Zpět na „Programování a tvorba webu“