Stránka 1 z 1

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

Napsal: 30 zář 2010 11:07
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

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

Napsal: 30 zář 2010 14:13
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

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

Napsal: 01 říj 2010 16:04
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";
}
?>

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

Napsal: 01 říj 2010 16:16
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.

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

Napsal: 01 říj 2010 20:24
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)