Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Edycja profilu na plikach
Forum PHP.pl > Forum > PHP
danielwwa91
Mam następny problem, otóż zrobiłem sobie panel użytkownika, w ktorym chciałbym, aby użytkownicy mogli edytować swoje dane. Niestety nie mam pojęcia jak do tego się zabrać.. siedzę już nad tym 2 dzień i nadal nic konkretnego. Proszę Was o pomoc.

plik rejestracja.php, w którym się tworzy profil usera:

  1. <div class="post"><Br>
  2. <div id="newstitle">Rejestracja w serwisie xxx - Krok 2</div>
  3. <div id="newsbg">
  4.  
  5. <?php
  6.  
  7.  
  8. if (($nick=='') && ($pass2=='') && ($pass=='')){
  9.  
  10. echo ('Pola oznaczone gwiazdką należy wypełnić!'); die;}
  11.  
  12. if (strpos($nick,' ')) {echo('Nick nie może zawierać spacji!'); die;}
  13. if (strlen($pass)<3){ echo('Podane hasło jest za krótkie!'); die;}
  14. if (strlen($pass)>8){ echo('Podane hasło jest za długie!'); die;}
  15.  
  16. if (strlen($nick)<3){ echo('Podany nick jest za krótki!'); die;}
  17. if (strlen($nick)>15){ echo('Podany nick jest za długi! (max 15 znaków)'); die;}
  18.  
  19. if ($nick==''){ echo ('Pola oznaczone gwiazdką należy wypełnić!'); die;}
  20.  
  21. $usernew = "users/".$nick.".php";
  22. if (file_exists($usernew)) {
  23. print ("Login <b>$nick</b> jest już zarejestrowany w naszej bazie. Prosimy wybrać inny."); } else {
  24.  
  25. if ($pass == $pass2){
  26.  
  27. $dataut=date('d.m.Y, H:i:s');
  28. $adduser = fopen ("users/".$nick.".php", "w");
  29. $zawuser = "$grupa|$nick|$pass|$email|$imie|$dataut";
  30.  
  31.  
  32. fputs ($adduser, $zawuser);
  33. fclose ($adduser);
  34.  
  35. $adduserpa = "users/profile/".$nick.".php";
  36.  
  37. $_SESSION['usernick']=$nick;
  38. $_SESSION['username']=$imie;
  39. $_SESSION['usermail']=$email;
  40.  
  41. if (file_exists($adduserpa)) {
  42. print ("Login <b>$nick</b> jest już zarejestrowany w naszej bazie. Prosimy wybrać inny."); } else {
  43.  
  44. $adduserp = fopen ("users/profile/".$nick.".php", "w");
  45. $zawuserp = "
  46.  
  47. <div class=post><br>
  48.  
  49. <div id=newstitle>Przeglądasz profil użytkownika: $nick</div>
  50.  
  51. <div id=newsbg>
  52.  
  53. <div id=userprofile>Informacje podstawowe:</div>
  54. <div id=userprofilebg>
  55.  
  56. Nick użytkownika: <b>$_SESSION[usernick]</b><br>
  57. Data utworzenia: <b>$dataut</b><br>
  58. Poziom: <b>$grupa/4</b><br><br>
  59.  
  60.  
  61. </div>
  62.  
  63. <div id=userprofile>O użytkowniku:</div>
  64. <div id=userprofilebg>
  65.  
  66. Imię: <b>$_SESSION[username]</b><br>
  67. Data urodzenia: <b></b><br>
  68. Skąd: <b></b><br>
  69. Email: <b>$_SESSION[usermail]</b><br>
  70.  
  71. </div>
  72.  
  73. </div>
  74.  
  75. ";
  76.  
  77. fputs ($adduserp, $zawuserp);
  78. fclose ($adduserp); }
  79.  
  80. echo ('<font color=green><b>Witaj '.$nick.'! Dziękujemy za rejestrację w serwisie fwsite.pl!</b></font><br><br>
  81.  
  82. Twój nick: <b>'.$nick.'</b> | Hasło: <b>'.$pass.'</b> - prosimy zapisać te dane.<br>
  83.  
  84. Należysz do grupy użytkowników!
  85.  
  86. <br><br>
  87.  
  88. Możesz się teraz <a href=?site=logowanie>zalogować</a> na swoje konto!');
  89.  
  90. }
  91.  
  92. else {
  93. echo ('Podane hasła są różne!'); }
  94. }
  95.  
  96. ?>
  97.  
  98. </div>


plik użytkownika zaraz po rejestracji (nie mylić z profilem):

  1. 1|danielwwa|abc123|danielwwa@o2.pl|Daniel


profil użytkownika po rejestracji:

  1.  
  2. <div class=post><br>
  3.  
  4. <div id=newstitle>Przeglądasz profil użytkownika: danielwwa</div>
  5.  
  6. <div id=newsbg>
  7.  
  8. <div id=userprofile>Informacje podstawowe:</div>
  9. <div id=userprofilebg>
  10.  
  11. Nick użytkownika: <b>danielwwa</b><br>
  12. Poziom: <b>1/4</b><br><br>
  13.  
  14. </div>
  15.  
  16. <div id=userprofile>O użytkowniku:</div>
  17. <div id=userprofilebg>
  18.  
  19. Imię: <b>Daniel</b><br>
  20.  
  21. </div>
  22.  
  23. </div>
  24.  


I to chyba będzie na tyle. Wiem, że trzeba będzie wczytać to inputa np. imię i zrobić <form> wtedy zadziała, ale nie wiem jak zacząć.

Z góry dziękuję za pomoc.
Zyx
Takiego prostego pliku profilu nie potrafisz wczytać? Jest funkcja explode(). Polecałbym jednak wybrać co innego, nawet serializację tablic PHP, bo teraz już Ci mogę powiedzieć, że nie przewidziałeś sytuacji, co będzie jak ktoś sobie wpisze znak "|" w formularzu. Sprawa jest prosta: masz wiele braków w podstawach programowania i dlatego nie potrafisz się z tym uporać. Podziel sobie kod na jakieś moduły, wydziel wspólne części oraz te, które się zmieniają. Masz trzy podstawowe rzeczy do zaprogramowania:

1. Dodawanie - wczytuje formularz, zapisuje do pliku.
2. Edycja - wczytuje plik, wstawia do formularza, odbiera formularz, zmienia możliwe do zmiany dane, zapisuje do pliku.
3. Usuwanie - kasuje plik.

W ogóle powinieneś to na bazach danych robić. Profile + pliki to lekko beznadziejny pomysł.

Kolejny mankament: co ma wspólnego rejestracja z sesją? I po co przechowujesz w niej tyle danych, skoro wystarczy Ci sam identyfikator i odczytanie całej reszty z pliku profilu?

Błędy typowo programistyczne:

1. if (($nick=='') - tak się nie pisze. Jakie $nick? Z jakiego to antycznego źródła się uczysz? Idź je wyrzuć, bo naucza takiego bałaganu i takich muzealnych rzeczy, że wstyd. $_POST, $_GET należy używać.

2. Dlaczego profil przechowujesz jako HTML? Co stoi na przeszkodzie, by go zapisać w takiej samej postaci, jak podstawowe dane? W ten sposób sam sobie zamknąłeś drogę do jego prostej edycji.

3. Po co tyle bezsensownych zmiennych tymczasowych?

  1. $adduserpa = "users/profile/".$nick.".php";


Wykorzystujesz ją tylko w jednym miejscu, wywal ją, albo bądź konsekwentny.
Kshyhoo
1. Sprawdzasz nadane prawa,
2. Ładujesz formularz (wyciągasz z bazy dane z rejestracji),
3. Dalej odbywa się tak, jak zwykle...

EDIT: Zyx jak zwykle szybszy ;p
danielwwa91
Zyx, wielkie dzięki, bardzo mi pomogłeś. Na bazach nie robie, bo nie potrafię, najpierw wole nauczyć się na plikach, a później stopniowo zaczynać z bazą danych smile.gif Przepisze to jeszcze raz wg. Twoich rad i zobaczymy co wyjdzie.
Kshyhoo
A w czym problem. Jest sporo kursów, gdzie można łatwo i bezboleśnie przyswoić sobie np. mysql'a
danielwwa91
Kshyhoo, dzięki ale nie smile.gif
Troszkę zmieniłem system działania, teraz inaczej zapisują się zmienne do pliku usera.
Mam kolejny problem, bo jak chcę się zalogować i wpisuję poprawny login, a hasło błędne, to mnie i tak poprawnie loguje.. jak wpiszę poprawny login i poprawne hasło, to także mnie loguje.
Coś tu musi być nie tak, tylko co?

logowanie2.php:

  1. <div class="post"><br>
  2. <div id="newstitle">Logowanie do panelu użytkownika</div>
  3. <div id="newsbg">
  4.  
  5. <?php
  6.  
  7. if ($pass=='') { echo ('Proszę wypełnić wszystkie pola!'); die;}
  8.  
  9. $userfile = "users/".$nick.".php";
  10.  
  11. if (file_exists($userfile)){
  12.  
  13. $plik = fopen ($userfile, "w");
  14. $zawartosc_pliku = fgets ($plik, 2048);
  15. fclose ($plik);
  16.  
  17. $nickp = $_POST['nick'];
  18. $passp = $_POST['pass'];
  19.  
  20. if(isset($nick) && isset($pass)) {
  21. if ($nick==$nickp && $pass==$passp) {
  22. $_SESSION['zalogowany']=true;
  23.  
  24.  
  25. echo ("<font color=green><b>Witaj $nick! Zostałeś poprawnie zalogowany do
  26.  
  27. serwisu fwsite.pl!</b></font>!<br>Masz teraz całkowity dostęp do serwisu!
  28.  
  29. <br><br>? <a href=index.php>przejdź na stronę główną</a>");
  30. }
  31. else {
  32. echo ('<font color=red>Wprowadzone hasło jest błędne!</font><br><br><a
  33.  
  34. href=java script:history.back();>? wróć i popraw</a>');
  35. die;
  36. }
  37. }
  38. }
  39. else {
  40. echo "<font color=red>Użytkownik <b>$nick</b> nie istnieje!</font>";
  41. };
  42. ?>
  43.  
  44. </div>


rejestracja2.php:

  1. <div class="post"><br>
  2. <div id="newstitle">Rejestracja w serwisie xxx - Krok 2</div>
  3. <div id="newsbg">
  4.  
  5. <?php
  6.  
  7.  
  8. if (($nick=='') && ($pass2=='') && ($pass=='')){
  9.  
  10. echo ('Pola oznaczone gwiazdką należy wypełnić!'); die;}
  11.  
  12. $nick = preg_replace("#\|#si", "", $nick);
  13. $nick = preg_replace("#\<#si", "", $nick);
  14. $nick = preg_replace("#\>#si", "", $nick);
  15.  
  16. $pass = preg_replace("#\|#si", "", $pass);
  17. $pass = preg_replace("#\<#si", "", $pass);
  18. $pass = preg_replace("#\>#si", "", $pass);
  19.  
  20. $pass2 = preg_replace("#\|#si", "", $pass2);
  21. $pass2 = preg_replace("#\<#si", "", $pass2);
  22. $pass2 = preg_replace("#\>#si", "", $pass2);
  23.  
  24. $email = preg_replace("#\|#si", "", $email);
  25. $email = preg_replace("#\<#si", "", $email);
  26. $email = preg_replace("#\>#si", "", $email);
  27.  
  28. $imie = preg_replace("#\|#si", "", $imie);
  29. $imie = preg_replace("#\<#si", "", $imie);
  30. $imie = preg_replace("#\>#si", "", $imie);
  31.  
  32. if (strpos($nick,' ')) {echo('Nick nie może zawierać spacji!'); die;}
  33. if (strlen($pass)<3){ echo('Podane hasło jest za krótkie!'); die;}
  34. if (strlen($pass)>8){ echo('Podane hasło jest za długie!'); die;}
  35.  
  36. if (strlen($nick)<3){ echo('Podany nick jest za krótki!'); die;}
  37. if (strlen($nick)>15){ echo('Podany nick jest za długi! (max 15 znaków)'); die;}
  38.  
  39. if ($_GET['nick']==''){ echo ('Pola oznaczone gwiazdką należy wypełnić!'); die;}
  40.  
  41. $usernew = "users/".$nick.".php";
  42. if (file_exists($usernew)) { print ("Login <b>$nick</b> jest już zarejestrowany w naszej bazie. Prosimy
  43. wybrać inny."); } else {
  44.  
  45. if ($pass == $pass2){
  46.  
  47. $dataut=date('d.m.Y, H:i:s');
  48. $adduser = fopen ("users/".$nick.".php", "w");
  49. $phpend = "?>";
  50. $zawuser = "<?php \$nick=\"$nick\"; \$pass=\"$pass\"; \$email=\"$email\"; \$imie=\"$imie\"; \$poziom=\"$poziom\"; $phpend";
  51.  
  52. fputs ($adduser, $zawuser);
  53. fclose ($adduser);
  54.  
  55. $adduserpa = "users/profile/".$nick.".php";
  56.  
  57. $_SESSION['usernick']=$nick;
  58. $_SESSION['username']=$imie;
  59. $_SESSION['usermail']=$email;
  60. $_SESSION['userlvl']=$poziom;
  61.  
  62. if (file_exists($adduserpa)) {
  63. print ("Login <b>$nick</b> jest już zarejestrowany w naszej bazie. Prosimy
  64.  
  65. wybrać inny."); } else {
  66.  
  67. $adduserp = fopen ("users/profile/".$nick.".php", "w");
  68. $zawuserp = "brak";
  69.  
  70. fputs ($adduserp, $zawuserp);
  71. fclose ($adduserp); }
  72.  
  73. echo ("");
  74.  
  75. echo ('<font color=green><b>Witaj '.$nick.'! Dziękujemy za rejestrację w
  76.  
  77. serwisie fwsite.pl!</b></font><br><br>
  78.  
  79. Twój nick: <b>'.$nick.'</b> | Hasło: <b>'.$pass.'</b> - prosimy zapisać te
  80.  
  81. dane.<br>
  82.  
  83. Należysz do grupy użytkowników!
  84.  
  85. <br><br>
  86.  
  87. Możesz się teraz <a href=?site=logowanie>zalogować</a> na swoje konto!');
  88.  
  89. }
  90.  
  91. else {
  92. echo ('Podane hasła są różne!'); }
  93. }
  94.  
  95.  
  96. ?>
  97.  
  98. </div>


i przykładowy plik usera:

  1. <?php $nick="daniel"; $pass="haslo"; $email="danielwwa@xx.pl"; $imie="Daniel"; $poziom="1"; ?>


kurcze już naprawdę nie wiem co może być nie tak.. proszę Was o pomoc.
Kshyhoo
Zobacz, jak się logujesz:
  1. $nickp = $_POST['nick'];
  2. $passp = $_POST['pass'];
  3.  
  4. if(isset($nick) && isset($pass)) {

Jeżeli login istnieje i hasło istnieje. To można wpisać cokolwiek... Prześledź ten kod:
  1. function autoryzacja($login, $haslo) {
  2. $plik = file("hasla.txt");
  3. foreach($plik as $linijka) {
  4. $dane = explode("|", $linijka);
  5. if (trim($login)==trim($dane[0]) and trim($haslo)==trim($dane[1]))
  6. return true;
  7. }
  8. return false;
  9. }
  10.  
  11. $login = "..."; //pobrane z formularza na stronie
  12. $haslo = "..."; //pobrane z formularza na stronie
  13.  
  14. if (autoryzacja($login, $haslo)) {
  15.  
  16. echo "autoryzacja poprawna...";
  17. // tutaj zawartość strony po autoryzacji
  18.  
  19. } else {
  20.  
  21. echo "login lub hasło podane błędnie...";
  22. // tutaj strona, z prośba o ponowne zalogowanie
  23.  
  24. }


danielwwa91
super, o to chodziło! po prostu zapomniałem o funkcjach blinksmiley.gif
jestem Ci bardzo wdzięczny, oczywiście + dla Ciebie smile.gif
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.