Rejestracja do txt


(Wiesio052) #1

Witam, chciał bym poprosić o pomoc w napisaniu pewnego skryptu, a mianowicie coś w rodzaju formularza rejestracyjnego ale dane nie zapisywały się w SQL tylko w pliku txt. Ponadto aby każda nowa rejestracja zapisywała się w nowym pliku txt.

Czy takie coś jest w ogóle wykonalne?


(mozilla007) #2

A no wszystko jest możliwe. Każdego użytkownika można zapisać w pliku txt typu login.txt a hasło w pliku szyfrować czymś.


(ra-v) #3

Tylko jakie jest bezpieczeństwo takiego rozwiązania.... delikatnie mówiąc nieduże.


(Grzesie K) #4

Może lepiej zapisywać te dane do pliku php np w formie:

<?php

$user['nazwa']=array(

'haslo'=>'123qwerty',

...

);

i tak dalej

?>

To już chyba lepsze rozwiązanie od txt


(ra-v) #5

Grzesie1k , ale przecież użytkownicy będą się rejestrować:slight_smile:


(Grzesie K) #6

A co to zmienia? Ja nie widzę problemu. Przecież to nadal jest tylko zapis do pliku, jedynie co się zmienia do sposób zapisu (w postaci kodu php) oraz rozszerzenie pliku (z txt na php). :smiley:


(mozilla007) #7

Tylko wg mnie to każdy user będzie miał osobny plik txt i to jest lepsze bo szuka się w katalogu usera i sprawdza hasło w pliku txt. Jakoś ta alternatywa do mnie bardziej przemawia


(Grzesie K) #8

wybił sobie z głowy pliki txt :evil: Jeżeli chcesz koniecznie by każdy user miał osobny plik to co ci moim rozwiązaniu nie pasuje?

Przykład rejestracji do plików php w katalogu db (jeden user=jeden plik):

<?php

if(!isset($_POST['nazwa']) and !isset($_POST['haslo']) and !isset($_POST['mail'])){

?>

Nawa:


Hasło:


E-mail:





<?php

}else{

	$nazwa=addslashes($_POST['nazwa']);

	$dir=md5($_POST['nazwa']);

	$haslo=md5($_POST['haslo']);

	$mail=addslashes($_POST['mail']);


	if(file_exists("db/$dir.php")){

		die('Podana nazwa użytkownika jest zajęta.');

	}

	$handle=fopen("db/$dir.php",'w+');

	fwrite($handle,"<?php \$user['$nazwa']=array('password'=>'$haslo','mail'=>'$mail'); ?>");

	fclose($handle);

	echo 'Zostałeś zarejestrowany.';

}

?>

(Darom82) #9

Gerzesie1k fajny kod, tylko nie zapisuje niczego w katalogu db - nie zapisuje zarejestrowanych uzytkownikow.

Pozatym po rejestracji nie pisze mi, ze jestem zalogowany jako(nazwa uzytkownika) i niema slowa wyloguj, ze jak sie wyluguje to bede mogl sie ponownie zalogowac jako ten zarejstrowany uzytkownik. I jak sie zalozy konto to zeby powiadomienie o zalozonym koncie przyszlo na maila podanego przy rejestracji.

Czy moglbys to dodac do swojego kodu ?


(Grzesie K) #10

Ten kod to tylko przykład, gdyż chciałem wytłumaczyć o co mi dokładnie chodzi. Dodanie tych ,,rzeczy" to chyba nic trudnego (o ile Znasz php).

Kod sprawdzony i działa poprawnie, być może nie masz utworzonego tego katalogu lub nie nadałaś praw do zapisu w nim.

EDIT:

rejestracja.php

<?php

session_start();

if(!isset($_POST['nazwa']) and !isset($_POST['haslo']) and !isset($_POST['mail'])){

?>

Nawa:


Hasło:


E-mail:





<?php

}else{

	$nazwa=addslashes($_POST['nazwa']);

	$dir=md5($_POST['nazwa']);

	$haslo=md5($_POST['haslo']);

	$mail=addslashes($_POST['mail']);


	if(file_exists("db/$dir.php")){

		die('Podana nazwa użytkownika jest zajęta.');

	}

	$handle=fopen("db/$dir.php",'w+');

	fwrite($handle,"<?php \$user['$nazwa']=array('password'=>'$haslo','mail'=>'$mail'); ?>");

	fclose($handle);

	$_SESSION['login']=$_POST['nazwa'];

	echo "Zostałeś zarejestrowany i automatycznie zalogowany jako $_POST[nazwa].";

//mail($_POST['mail'],'Zostałeś zarejestrowany','Jakaś treść');

}

?>

logowanie.php

<?php

session_start();

if(isset($_SESSION['login'])){

	echo "Jesteś już zalogowany jako $_SESSION[login]. Wyloguj";

}elseif(!isset($_POST['nazwa']) or !isset($_POST['haslo'])){

?>

Nawa:


Hasło:





<?php

}else{

	$dir=md5($_POST['nazwa']);

	if(file_exists("db/$dir.php")){

		include("db/$dir.php");

	}

	if(!isset($user[$_POST['nazwa']]) or $user[$_POST['nazwa']]['password']!=md5($_POST['haslo'])){

		echo 'Niepoprawna nazwa użytkownika i/lub hasło.';

	}else{

		$_SESSION['login']=$_POST['nazwa'];

		echo "Zostałeś zalogowany jako $_SESSION[login].";

	}

}

?>[/code]




wyloguj.php

[code]<?php session_start(); if(!isset($_SESSION['login'])){ echo 'Nie jesteś zalogowany.'; }else{ unset($_SESSION['login']); echo 'Zostałeś wylogowany.'; } ?>

Tak to by mniej więcej wyglądało...


(Darom82) #11

Grzesie1k ale powiadomienia na maila nie przychodza o tym, ze dana osoba sie zarejestrowala. Wiesz moze jak ten kod poprawic ?

I czy nie moznaby poprawic tego, zeby w folderze db zapisywane pliki nie mialy nazwy takiej dlugiej: 21232f297a57a5a743894a0e4a801fc3.php , tylko zeby nazwa byla krotsza np. user1

Kolejny zarejestrowany uzytkownik to: user 2 itd. Czy moglbys ten kod poprawic ?

Fajnie by było gdyby była wyświetlana jakaś lista osób, które już konto sobie założyło.


(Grzesie K) #12

Nazwe użytkownika można oczywiście łatwo skróci, by uzyskać numer wystarczy zliczyć pliki z katalogu, lecz może pojawić się problem z odczytem tych informacji.

Co do powiadomomienia na maila to zobacz tą linię:

//mail($_POST['mail'],'Zostałeś zarejestrowany','Jakaś treść');

// oznacza że nei jest ona wykonywana (napisałem tak byś sam sobie wpisał treść i temat maila)

Listę użytkowników mozna uzusyskać pobierając każdy plik z katalogu za pomocą include i wyświetleniem tabeli $user np. za pomocą foreach


(Darom82) #13

A mógłbyś mi coś takiego dopisac do tego skryptu ? bo bardzo fajnie to zrobiłeś i podoba mi się. Bardzo Cie o to prosze.

Fajnie by było, gdyby tabela z zarejestrowanymi użytkownikami była podobna do tej Tutaj

Jak tutaj zrobie tak jak mi napisałeś to i tak powiadomienia o rejestracji nie bedą przychodzić na maila użyttkowników podanych przy rejestracji :frowning:


(Grzesie K) #14

Sprawdź czy masz dostęp do funkcji mail()

<?php

foreach(scandir('db') as $file){

	if($file!='.' and $file!= '..'){

		include('db/'.$file);

	}

}

foreach($user as $name=>$data){

	echo $name.'
';

}

?>

Aby wyświetlać inne dane użytkowników na początku trzeba je posiadać, a jeżeli tak dalej pójdzie to napisze cały cms operaty na tych plikach. Mógłbyś zrobić coś samemu a nie czekać na gotowca....


(Darom82) #15

Funkcje mail() mam wyłączoną więc pewnie będzie potrzebne coś zastępczego.

A czy ten kod, który dałeś powyżej to sobie dodać do pliku logowanie.php, wyloguj.php czy do rejestracja.php ? i w ktorym miejscu ? Żebym sobie tego nie zepsuł. Tylko tę jedną rzecz mi powiedz o które teraz Cie prosze i już sobie potem jakoś poradze.


(Grzesie K) #16

Utwórz nowy plik np. użytkownicy.php w głównym katologu (tym co logowanie.php itp.) i w nim umieść ten kod.


(Darom82) #17

Grzesie1k zadnych powiadomień na maila nie dostaje o zalożonym koncie. Np. Jak ktoś sobie zalozy konto i poda adres email jacek@com.pl to zeby mu na tego maila jacek@com.pl przyszlo powiadomienie o zalozonym koncie. U mnie nic takiego sie nie dzieje, jak to poprawic ?

Jeszcze taka malutka prośba. Możesz mi powiedzieć jak zrobić, żeby obok nazwy użytkownika wyswietlała się ikonka emailktóra by była linkiem do adreu email podanego przy rejestracji ?


(Grzesie K) #18
<?php

foreach(scandir('db') as $file){

	if($file!='.' and $file!= '..'){

		include('db/'.$file);

	}

}

echo "

| $name | \"\" |
\n"; ?[/code]

http://www.google.pl/search?hl=plq=php ... 1aql=oq=

http://www.google.pl/search?hl=plq=php ... =aql=oq=


(Darom82) #19

Grzesie1k ładnie działa, tylko problem jest w tym iż przy wyświetlaniu listy zarejestrowanych osób tworzy liste w ten sposób: Kliknij Tutaj

W momencie gdy jest wolne miejsce miedzy zarejestrowanymi osobami jest wolne miejsce i obok jest ikonka email. Tak nie powinno być, a skoro powinno to czemu gdy jest odstęp miedzy tymi osobami to tez się wyświetla ikonka email a wtedy nie powinna ? wiesz jak to poprawic ? - w tej chwili jest 8 osób zarejestrowanych a wyświetla mi 9 ikonek email.

Natomiast co do wysyłania maili to musze użyc phpmailera innej rady niema. Czyli aby wysyłanie powiadomień o zarejestrowanym użytkowniku było możliwe to musze użyć coś takiego:

<?php

if(!empty($_POST['temat']) && !empty($_POST['imie']) && !empty($_POST['tresc']))

{

 //NASZ SKRYPT  

 require_once("phpmailer/class.phpmailer.php");  


 $mail = new PHPMailer();  


 $mail->PluginDir = "phpmailer/";  

 $mail->Mailer = "smtp";  

 $mail->Host = "ssl://smtp.gmail.com";  

 $mail->Port = 465;     


 $mail->SMTPKeepAlive = true;                       

 $mail->SMTPAuth = true;  

 $mail->Username = "Test_";  

 $mail->Password = "hasło_masło";     


 $mail->SetLanguage("pl", "phpmailer/language/");               

 $mail->CharSet = "utf-8";      

 $mail->ContentType = "text/html";                                  


 $mail->FromName = $_POST['imie'];  

 $mail->Subject = $_POST['temat'];

 $message = 'Witaj,
 Otrzymujesz ten email ponieważ został wysłany przez formularz ze strony: http://www.history.is.net.pl


 Wiadomość została wysłana przez użytkownika '.$_POST['imie'].', który posiada adres email: '.$_POST['email'].'

Treść wiadomości: '.$_POST['tresc'];

 $mail->Body = $message;  


 $mail->AddAddress("test@pl");  


 if($mail->Send())  

   echo "

Wiadomość została wysłana. Dziękujemy. Kliknij Tutaj aby przejść do strony głównej

"; else echo "Wiadomość nie może zostać wysłana z powodu: ".$mail->ErrorInfo; $mail->SmtpClose(); } else { // wyswietlamy formularz echo " Poniższy formularz pozwala na skontaktowanie się z serwisem Uwaga! Prosimy nie zadawać pytań dotyczących serwisu poprzez ten formularz. Wszelkie pytania i problemy związane z tym serwisem należy umieszczać w komentarzach, które do tego celu właśnie są przeznaczone.

| Temat: | |
| Twój Email: | |
| Podaj swoje imie:     | |
| Wiadomość: | |
| | |

"; } ?>[/code]

Wiesz moze jak przerobic to wysylanie na maila powiadomień o zarejestrowanym użytkowniku ?


(Michalw148) #20

Wystarczy że usuniesz te dwa ukośniki sprzed tej linijki bo tak to masz komentarz.

mail($_POST['mail'],'Zostałeś zarejestrowany','Dziękujemy za rejestrację.');