witam pisze autoryzacje uzytkownikow oparta o pliki (jeszcze nie mysql). na razie mam logowanie.php, rejestracja.php oraz uzytkownicy.txt
Rejestracja dziala poprawnie i wyglada tak:
<?php
echo '<form method="post" action="rejestracja.php"> Nazwa: <input type="text" name="login2"/>
Haslo: <input type="password" name="haslo2"/>
Email: <input type="text" name="email2"/>
<input type="submit" value="OK"/></form>';
$login2 = $_POST['login2'];
$haslo2 = $_POST['haslo2'];
$email2 = $_POST['email2'];
$fp = fopen("uzytkownicy.txt","r");
for ($i=count($users),$e=0;$e<$i;$e += 3
) {
if ($users[$e]==$_POST['login2'])
{
$zajete=true;
break;
}
}
for ($i=count($users),$e=2;$e<$i;$e += 3
) {
if ($users[$e]==$_POST['email2'])
{
$zajete2=true;
break;
}
}
if ($zajete==true)
{
echo 'Ten login jest juz zajety'; } elseif ($zajete2==true)
{
echo 'Ten email jest juz w uzyciu'; } elseif (!preg_match('/^[a-zA-z0-9]{3,}$/D', $login2)) {
echo 'Niepoprawny login. Login moze skladac sie wylacznie z liter i cyfr. Musi zawierac min. 3 znaki'; } elseif (!preg_match('/^[a-zA-z0-9]{5,}$/D', $haslo2)) {
echo 'Niepoprawne haslo. Haslo moze skladac sie wylacznie z liter i cyfr. Musi zawierac min. 5 znakow'; } elseif (!preg_match('/^[a-zA-z0-9\_\-]+@{1}[a-z]+\.{1}[a-z]+$/D', $email2)) {
echo 'Niepoprawny email'; } else
{
echo 'Rejestracja przebiegla pomyslnie. Mozesz teraz sie zalogowac na <a href="logowanie.php">stronie glownej</a>'; $fp = fopen("uzytkownicy.txt","a"); $fp = fwrite($fp,"$login2|$haslo2|$email2|"); }
zawartosc uzytkownicy.txt to aktualnie: admin|admin1|admin@wp.pl|test|test1|testowy@onet.pl|
teraz logowanie.php. skrypt zaciagnalem z wikibooks. sama idee sesji juz w wiekszosci ogarnalem, jednak mam pewien problem, ktory zaraz opisze.
logowanie.php:
<?php
$uzytkownicy = array(1
=> array('login' => 'user1', 'haslo' => sha1
('ppp')), array('login' => 'user2', 'haslo' => sha1
('ddd')), array('login' => 'user3', 'haslo' => sha1
('fff')) );
function czyIstnieje($login, $haslo)
{
$haslo = sha1($haslo);
foreach($uzytkownicy as $id => $dane)
{
if($dane['login'] == $login && $dane['haslo'] == $haslo)
{
// O, jest ktos taki - zwroc jego ID
return $id;
}
}
// Jeżeli doszedłeś a tutaj, to takiego użytkownika nie ma
return false;
} // end czyIstnieje();
if(!isset($_SESSION['uzytkownik'])) {
// Sesja się zaczyna, wiec inicjujemy użytkownika anonimowego
$_SESSION['uzytkownik'] = 0;
}
if($_SESSION['uzytkownik'] > 0)
{
// Ktos jest zalogowany
echo 'Witaj, '.$uzytkownicy[$_SESSION['uzytkownik']]['login'].' na naszej stronie!'; }
else
{
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(($id = czyIstnieje($_POST['login'], $_POST['haslo'])) !== false)
{
// Logujemy uzytkownika, wpisal poprawne dane
$_SESSION['uzytkownik'] = $id;
echo 'Dziekujemy, zostales zalogowany! <a href="logowanie.php">Dalej</a>'; }
else
{
echo 'Podales nieprawidlowe dane, zegnaj! <a href="logowanie.php">Dalej</a>'; }
}
else
{
echo '<form method="post" action="logowanie.php"> Zaloguj sie: <input type="text" name="login"/>
<input type="password" name="haslo"/>
<input type="submit" value="OK"/></form>';
echo '<a href="rejestracja.php"> Zaloz konto </a>'; }
}
jak widac ten system logowania, umozliwia zalogowanie tylko 3 ustawionym juz uzytkownikom. chcialbym umozliwic mozliwosc tworzenai nowych kont i logowanie do nich. moj problem, polega jednak na tym, jak zaimportowac dane z rejestracja.php do tablicy w logowanie.php. po prostu brak mi pomyslu jak to wykonac. myslalem o wykorzystaniu petli foreach, albo for dla sprawdzenia czy login i haslo sa prawdziwe. mozna by tez miec lacznie 3 pliki tekstowe. w jednym byly by podane login haslo i email w przejrzystej formie, w drugim wszystkie loginy a w trzecim hasla. moglibyscie pomoc? pozdrawiam
Ten post edytował michat34 27.08.2012, 12:02:21