Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Wyciąganie znaków z wzorca
Forum PHP.pl > Forum > Przedszkole
Favrid
Witajcie, jestem tutaj nowy. Również z php mam styczność od niedawna i aktualnie staram się go nauczyć tymczasem chciałbym napisać pewną stronę ale kompletnie nie mam pojęcia jak to zrobić. Może pomożecie.

Konkretniej chodzi mi o sposób logowania do strony. Chciałbym aby wyglądało coś jak coś w podobie do logowania się do banku. Czyli mamy już jakieś tam hasło które wcześniej podawaliśmy i jest ono zapisane w bazie danych. Teraz załóżmy, że ma ono 11 znaków i składa się z dwóch wyrazów oddzielonych spacją. W momencie logowania wyskakuje nam wzorzec "*_***_* *_*" i mamy uzupełnić te trzy pola "_". Oczywiście pola do uzupełnienia wyskakiwałyby w losowych miejscach. Za każdym razem inaczej "_*****_ _**" itd.

Z góry dziękuję za pomoc i podpowiedzi smile.gif
sadistic_son
Ja to widzę tak:
Załaduj hasło do tablicy, każdy znak jako odzielny element. Następnie do pętli for wrzucasz rand. Parametry dla rand to 1 oraz ilosc znakow w hasle. Czyli np dla hasla 15 znakowego rand(1,15);
Nastepnie powtarzasz petle for tyle razy ile chcesz aby user musial wpisac znakow. Kazda wartosc rand z powtorzenia petli to numer znaku ktory trzeba wpisac.
Jednak w takim wypadku moze sie zdarzyc ze user bedzie musial wypelnic np 2 razy pole np 7.
Wiec aby sie przed tym zabezpieczyc zrobil bym tak.
Kazda wartosc wylosowana w rand wrzucasz do tablicy. Nastepnie przy kolejnym losowaniu za pomoca in_array sprawdzasz czy nie zostala juz wczesniej wylosowana. Jesli tak, to nie dodajesz go drugi raz do tablicy ale zwiekszasz o 1 ilosc powtorzenia sie petli.
Tak to w skrocie by wygladalo.
Favrid
Dzięki za podpowiedźsmile.gif Sadistic_son masz może pomysł jeszcze, żeby np nie musieć wstawiać do pętli konkretnej wartości ile razy ma się powtórzyć tylko żeby sama przybierała wartość procentowo w zależności ile hasło posiada znaków. Mam tu na myśli coś w stylu. Zliczania z ilu elementów składa się ta tablica z hasłem no i przy logowaniu prośba o wpisanie np od 25 do 35 % znaków. Jeśli mniejsza niepełna wartość o zawsze by zawyżało. Wiem, że to dużo pisania ogólnie kodu ale mam czas winksmiley.jpg tylko pomysłowo wysiadam chwilami winksmiley.jpg
sadistic_son
Policz ile jest elementów tablicy, czyli ile znakow ma haslo - funkcja count.
Oczywiscie warto przy rejestracji ustawic minimalna i maxymalna dlugosc hasla.
Calosc powinna wygladac mniej wiecej tak:
  1. $dlugosc_hasla=strlen($password);
  2. //lub $dlugosc_hasla=count($password); jesli $password jest juz tablica
  3.  
  4. $procent=0.5; //jaka czesc ma byc uzupelniona przez usera
  5. $ile_wypelnic=$dlugosc_hasla*$procent;
  6. $ile_wypelnic=round($ile_wypelnic);
  7. $j=$ile_wypelnic;
  8. $tab=array();
  9. for($i=0;$i<$j;$i++){
  10. $ktory_znak=rand(1,$dlugosc_hasla);
  11. if(in_array($ktory_znak,$tab)){
  12. $j++;
  13. }else{
  14. $tab[$i]=$ktory_znak;
  15. }
  16. }
  17.  
  18. print_r($ktory_znak);

W tablicy $tab pozostaje Ci ktore znaki user musi wpisac. Dla powyzszego przykladu bedzie to 50% z calosci hasla. Pozostaje tylko posortowac $tab rosnaco wg wartosci. Wtedy kazdy element $tab bedzie numerem indeksu elementu tablicy $password, ktory user musi wpisac.
Favrid
Narazie jestem początkujący w te klocki ale bardzo mi pomogłeś... myślę, że też wpadłbym na coś podobnego ale zajęłoby mi to jeszcze sporo czasu tongue.gif Wiem, że ciągnę Cię za język ... ale możesz podpowiedzieć mi jeszcze jedną rzecz?smile.gif Jak rozbić hasło na poszczególne litery? Jakąś pętlą pobierać każdy znak z osobna? Czy jest jakaś funkcja która od razu rozbije ciąg i przetworzy go na tablicę? Przetworzyłbym hasło na tablicę gdyby istniał między znakami jakiś seperator ale bez niego nie mam pomysłu :/
sadistic_son
Spoko, cieszę się, że mogłem pomóc. Co do rozbijania stringu na poszczególne znaki to str_split.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.