Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Logowanie, rejestracja, panel gracza...
Forum PHP.pl > Forum > PHP
Chrusta
Witam.

Stawiam serwer do pewnej gry i potrzebuję skryptu logowania na stronę www, który będzie tworzył konto potrzebne do gry (o określonej treści i w określonym folderze) i do zalogowania do panelu gracza będzie wykorzystywał login i hasło z tego pliku. Może być też tak, że skrypt tworzy dwa pliki - jeden z kontem do logowania na www, drugi plik z kontem w określonym folderze, potrzebny do gry. Te pliki będą jakby połączone: zmiana hasła na www spowoduje także zmianę w pliku konta do gry.
Pliki z kontami do gry przechowywane są w folderach o nazwie np. AscII71, jeśli pierwsza litera nazwy konta to G, itd.

Skrypt logowania www:
http://www.przeklej.pl/plik/logowanie-www-zip-0020068mv40i
Skrypt tworzenia konta do gry:
http://www.przeklej.pl/plik/newacc-php-0020069h296u

Problem w tym, że nie wiem jak to połączyć...
Jeśli ktoś ma trochę czasu i mógłby się tym zająć, to z góry bardzo dziękuję.
Myślę, że jeśli się ktoś zna, to nie będzie stanowiło to większego problemu.

Jeszcze mam drugi problem. Kod:
  1. $dir = 'D:\\Różne\\Helbreath\\HB Server 3.51\\HB SERVER 3.51';
  2. ....
  3. Account: <input type="text" name=acc><br>
  4. ....
  5. $acc = $_POST['acc'];
  6. $accord = ord($acc);
  7. ....
  8. $acc_path = ($dir==''?'':$dir.'\\').'Account\\AscII'.$accord.'\\'.$acc.'.txt';
  9. $lines = file($acc_path);
  10. $accpass = substr($lines[5], 19);
  11. (5 linijka wygląda tak: account-password = abc)
  12. ....
  13. if($pass != $accpass)
  14. die('Password is not correct.');

Problem w tym, że ZAWSZE wyświetla mi "Password is not correct.".

Z góry bardzo dziękuję za pomoc...

Pozdrawiam,
Chrusta.
CuteOne
Pierwszy błąd:: Tu raczej łosiów, którz odwalą za Ciebie brudną robotę nie znajdziesz smile.gif lepiej napisz o tym w innym dziale

Drugi bład:: Widocznie spieprzyłeś substr()... Porównaj sobie $pass i $accpass w ten sposób:
zamiast
  1. if($pass != $accpass)
  2. die('Password is not correct.');

wstaw
  1. die($pass." ".$accpass);
Chrusta
Hasła wyglądają tak samo...
Ale gdy zrobię tak:
  1. die($accpass."".$pass);

(bez spacji w środku) to otrzymuje coś takiego:
abc abc
Jak zrobię tak:
  1. die($pass."".$accpass);

to mam:
abcabc

Jak dodałem do substr trzeci argument: "3" (taki jak długość hasła: abc) to skrypt działa dobrze. Problem w tym że hasło nie zawsze ma 3 litery...

Cały plik wygląda tak:
Cytat
Account-generated: Time(2003/19/9/20/24) IP(127.0.0.0)
[NAME]
account-name = GM1

[PASSWORD]
account-password = abc

[ACCOUNT-STATUS]
account-valid-time = 0
account-valid-date = 2008 4 5
account-change-password = 2003 3 29
[ETC]
account-Gender = Male
account-Age = 19
account-Birth-Year = xxxx
account-Birth-Month = xx
account-Birth-Day = xx
account-RealName = xxx
account-SSN = ECTS
account-Email = xxx@xxx.pl
account-Quiz = aaaaaa_aaaaaaaaa
account-Answer = aaaaaaa
account-created-by =

[CHARACTERS]
account-character-,.|[] = Helloo
account-character-,.|[] = Hell
account-character-,.|[] = LoL
account-character-,.|[] = GM1
glh
Spróbuj użyć na zmiennych od haseł funkcji trim

Czyli, np $haslo1=trim($haslo1); $haslo2=trim($haslo2);

Dopiero później porównuj.
CuteOne
Po się męczyćquestionmark.gif Nie lepiej zapisać dane do zmiennych i je includować zamiast wczytywać plik np. przez fopen?

  1. include 'ścieżka_do_pliku/plik_z_danymi_uzytkownika.php';
  2.  
  3. if($pass == $accpass) {
  4. //jakiś kod
  5. }


A tak wygląda plik zapisu danych do includowanego pliku z danymi użytkownika:
  1.  
  2. $file = "ścieżka_do_pliku/plik_z_danymi_uzytkownika.php";
  3.  
  4. if ( file_exists($file)) {
  5.  
  6. $handle = fopen ($file, 'r+');
  7. $str = "<?php \$accpass='abc'; \$login='cba'; ?>";
  8. fwrite ($handle, $str);
  9. fclose ($handle);
  10. }
  11. else {
  12. echo "jakiś masejdż o braku pliku";
  13. }
Chrusta
Co do hasła, zrobiłem tak:
  1. $ex=explode('=',$lines[8]);
  2. $accpass = trim($ex[1]);
  3. if($pass != $accpass)
  4. die('Password is not correct.');

Linia 8:
Cytat
account-password = abc


Mam teraz taki problem:
W pliku (.txt) mam takie linijki:
Cytat
character-item = jakasnazwa 1 2 29977 29956 6 0 0 0 0 4919 0

i takie:
Cytat
character-bank-item = jakasnazwa 1 2 30367 18531 124 5 0 0 0 2451 -266391808

W miejscach "jakasnazwa" są różne nazwy, liczby też się zmieniają (ilość liczb zawsze jest taka sama).
I teraz jak odczytać nazwę i każdą liczbę, i zapisać to do zmiennych? Na razie mam coś takiego:
  1. $items=0;
  2. foreach($lines as $line){
  3. if(strpos($line,'character-item')!==false){
  4. $ex=explode('=',$line);
  5. $items++;
  6. $item[$items] = (trim($ex[1]));
  7. $ex=explode(' ',$item[$items]);
  8. $item[$items] = (trim($ex[0]));
  9. }
  10. else if(strpos($line,'character-bank-item')!==false){
  11. $ex=explode('=',$line);
  12. $items++;
  13. $itembank[$items] = (trim($ex[1]));
  14. $ex=explode(' ',$itembank[$items]);
  15. $itembank[$items] = (trim($ex[0]));
  16. }
  17. }
  18.  
  19. foreach($item as $k=>$v){
  20. echo 'Item'.$k.': '.$v.' <br>';
  21. }
  22. foreach($itembank as $k=>$v){
  23. echo 'Itembank'.$k.': '.$v.' <br>';
  24. }
sebekzosw
a nie lepiej będzie zrobić funkcję zwracającą tablicę?

  1. function userInfo($login)
  2. {
  3. $lines = file($login.'.txt');
  4. $user_info = array();
  5. foreach($lines as $line)
  6. {
  7.  
  8. if(strlen($line) > 2 && preg_match('/=/i', $line))
  9. {
  10. $variable = explode("=", $line);
  11. $user_info[trim($variable[0])] = trim($variable[1]);
  12. }
  13. }
  14. return $user_info;
  15. }
  16. $user_info = userInfo('dane');
  17. echo $user_info['account-name'];
  18.  
  19.  
  20. if($pass == $user_info['account-password']) {
  21. //jakiś kod
  22. }


wtedy jak linia z hasłem będzie w innym miejscu to i tak będziesz mógł sprawdzić hasło
Chrusta
Ooo, wielkie dzieki, przydalo sie. Da sie jeszcze dorobic do tego kodu takie cos, jak pisalem w poprzednim poscie? Tzn. jak np. bede mial linijke "acount-settings = abc 1 2 3 4", to zeby oddzielnie pobieralo: abc, 1, 2, 3 i 4? Przepraszam, ze tyle wymagam, ale coz, dopiero sie ucze... tongue.gif
sebekzosw
  1. $acount_settings = explode(' ', $user_info['acount-settings']);


i masz tablicę winksmiley.jpg
Chrusta
A jak ją odczytać?
Jak robie np. tak:
  1. foreach($user_info as $k=>$v){
  2. echo ''.$k.': '.$v.' <br>';
  3. }

to dla linijki np.:
Cytat
account-valid-date = 2008 4 5

Mam:
0: 2008
1: 4
2: 5

EDIT
Zrobiłem tak:
  1. $ile = count($user_info);
  2. for ($i=0; $i <$ile; $i++)
  3. {
  4. echo $user_info[$i].'<br />';
  5. }

I wyświetla liczby jedna pod drugą. Ale jak je zapisać do zmiennych?
Przykładowo, dla linijki:
Cytat
character-item = jakasnazwa 1 2 29977 29956 6 0 0 0 0 4919 0

pierwsza liczba (w tym przypadku nazwa: jakasnazwa) to będzie $cos1, druga (1) - $cos2, trzecia (2) - $cos3, czwarta (29977) $cos4, itd...

EDIT

JUZ WIEM! winksmiley.jpg
$user_info[0]; - pierwsza liczba
$user_info[1]; - druga, itd. ;p

Bardzo Ci dziękuję za pomoc : ). Moderatora proszę o niezamykanie tematu, będę jeszcze pisał.


=========================================
EDIT

Znów problem...
W pliku mam sporo takich linijek:
Cytat
character-item = ArenaTicket(4) 1 3 6 20 2 0 0 0 0 1 0
character-item = Meat 1 2 3878 829 4921 0 0 0 0 1 0
character-item = Baguette 1 2 29920 8995 14501 0 0 0 0 1 0
character-item = Fire-Bow 1 0 0 0 0 0 0 0 0 1000 0
character-item = Arrow 2089 0 0 0 0 0 0 0 0 1 0

Między nazwą a liczbami jest sporo spacji, nie wiem czemu tutaj je usuwa... Trzeba by jakoś zmienić kod, żeby nie pobierał spacji, bo później np. przy $charitems_info[2] wyświetla mi spacje.
Jak zrobić żeby pobrać wszystko to co jest po znaku "=", z każdej linijki?
Próbowałem takie coś:
  1. function charitems_fileInfo($character)
  2. {
  3. $dir = 'D:\\Różne\\Helbreath\\HB Server 3.51\\HB SERVER 3.51';
  4. $character_ord = ord($character);
  5. $character_path = ($dir==''?'':$dir.'\\').'Character\\AscII'.$character_ord.'\\'.$character.'.txt';
  6. $lines = file($character_path);
  7. $item = array();
  8. $items=0;
  9.  
  10. foreach($lines as $line){
  11. if(strpos($line,'character-item')!==false){
  12. $ex=explode('=',$line);
  13. $items++;
  14. $item[trim($ex[0])] = trim($ex[1]);
  15. $item = explode(' ', $item['character-item']);
  16. }
  17. }
  18. return $item;
  19. }

i wyświetlanie coś w tym stylu:
  1. $charitems_info = charitems_fileInfo($char);
  2. echo 'item: '.$charitems_info[0].'<br>';

Wyświetla tylko ostatnią linijkę "character-item", a nie wszystkie.
Wiem, że trzeba gdzieś pętle dodać, tylko gdzie i jaką...
Nie wiem, późno się robi, od 16 godzin nie śpie, zmęczony jestem, nie myśle już... ; p
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.