Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][MySQL]Logowanie
Forum PHP.pl > Forum > Przedszkole
Mike122
Przerabiając książkę o PHP5 w ćwiczeniach był skrypt logowania.
  1. <? // Pobiera od użytkownika nazwę i hasło. Jeżeli dane są prawidłowe, 
  2.  // wyświetla tajną informację, a jeżeli nie - informację o błędzie.
  3.  $hasla = array ('admin' => 'hasloadmina15', 'tester' => 'tester15',
  4.  'marek' => '1wgd7w3', 'henryk' => '56sghx');
  5.  
  6.  if (($_POST['uzytkownik']) && ($_POST['haslo'])) { // wartości w formularzu są wpisane
  7.  if ($hasla[$_POST['uzytkownik']] == $_POST['haslo']) {
  8.  print ("Tajna informacja to: <B>2*2=4</B>");
  9.  } else {
  10.  print ("Wpisano niepoprawne dane o użytkowniku i haśle.<BR>");
  11.  print ('<A HREF="4-04.php">Wróć</A> i spróbuj ponownie.');
  12.  }
  13.  } else { // nie ma wpisanych danych, wyświetlamy formularz
  14.  print '<FORM ACTION="4-04.php" METHOD=POST>';
  15.  print '<TABLE><TR><TD>użytkownik: </TD><TD><INPUT TYPE="text" ';
  16.  print "NAME="uzytkownik" VALUE="".$_POST['uzytkownik'].""></TD></TR>";
  17.  print '<TR><TD>haslo: </TD><TD><INPUT TYPE="password" ';
  18.  print 'NAME="haslo"></TD></TR></TABLE>';
  19.  print '<INPUT TYPE="submit" VALUE="Wyślij">';
  20.  print '</FORM>';
  21.  }
  22.  
  23. ?>

Ja go trochę przerobiłem jednak mam pewien problem skrypt wygląda tak:
  1. <?php
  2. $sesia = session_start();
  3. $login = htmlentities ($_POST['login']); 
  4. $pass = htmlentities ($_POST['pass']);
  5. $logincookie = htmlentities ($_COOKIE['clan_cod_login']); 
  6. $passcookie = htmlentities ($_COOKIE['clan_cod_pass']);
  7. setcookie ("clan_cod_login", "$login", time()+25920000);
  8. setcookie ("clan_cod_pass", "$pass", time()+25920000);
  9. setcookie ("clan_cod_sesia", "$sesia", time()+25920000);
  10. ?>
  11. <HTML>
  12. <HEAD>
  13. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2">
  14. <TITLE>Informacja na hasło</TITLE>
  15. </HEAD>
  16. <BODY>
  17. <?php
  18.  
  19.  
  20. mysql_connect ("localhost", "root", "*******") or 
  21.  die ("Błąd połączenia");
  22.  mysql_select_db ("basecod") or 
  23.  die ("Nie można połączyć się z bazą");
  24.  
  25.  
  26.  if (($_POST['login']) && ($_POST['pass'])) { // wartości w formularzu są wpisane
  27.  $query = mysql_query("SELECT * FROM gracze WHERE ksywa = '{$_POST['login']}' and pass = '{$_POST['pass']}'");
  28.  if (mysql_num_rows($query) < 1) {
  29.  print ("Wpisano niepoprawne dane o użytkowniku i haśle.<BR>");
  30.  print ('<A HREF="index.php">Wróć</A> i spróbuj ponownie.');
  31.  
  32.  } else {
  33. //tresc sajnej strony:)
  34.  
  35.  }
  36.  
  37.  } else { // nie ma wpisanych danych, wyświetlamy formularz
  38.  print '<FORM ACTION="index.php" METHOD=POST>';
  39.  print '<TABLE><TR><TD>użytkownik: </TD><TD><INPUT TYPE="text" ';
  40.  print "NAME="login" VALUE="".$logincookie.""></TD></TR>";
  41.  print '<TR><TD>pass: </TD><TD><INPUT TYPE="password" ';
  42.  print 'NAME="pass" VALUE=''.$passcookie.''></TD></TR></TABLE>';
  43.  print '<INPUT TYPE="submit" VALUE="Wyślij">';
  44.  print '</FORM>';
  45.  }
  46.  
  47. ?>
  48. </BODY>
  49. </HTML>

Chciałbym żeby już jak ktoś się zaloguje raz to już będzie pamiętany na każdej stronie serwisu. I Dodatkowo zamiast formularza logowania wyświetlało się np. Witaj Mike122! i np. USTAWIENIA. Proszę o pomoc i o poprawienie skryptu jeśli jest coś źle.
gavron
na poczatku musisz wstawic aby sprawdzal ciasteczka i jesli sa ustawione to przypisywal ich wartosci do odpowiednich zmiennych,a nie na samym poczatku kodu je kasowal (bo zmienne sa zerowe).
Chemiq
możesz zrobić mniej więcej coś takiego:
po sprawdzeniu loginu i hasła jeżeli są prawidłowe wstaw takie coś
  1. <?php
  2. $_SESSION['login'] = $login;
  3. $_SESSION['pass'] = $pass;
  4. ?>

wtedy login i hasło będą zapamiętane na każdej podstronie do momentu aż użytkownik zamknie stronę.

a co do drugiej sprawy to w tym miejscu gdzie chcesz aby była wyświetlona informacja "witaj..." wstaw takie coś:
  1. <?php
  2. if (!isset($login)) { include_once 'login.php'; } /* zamiast login.php wstaw nazwę pliku ze skryptem logowania (ten który tu zamieściłeś) */
  3. if (isset($login)) {
  4. echo 'Witaj '.$login;
  5. /* możesz tutaj dodać jeszcze jakieś linki które będą dostępne dopiero po zalogow
    aniu */
  6. }
  7. ?>


WAŻNE!! drugi skrypt przeze mnie podany nie będzie działał bez pierwszego
Mike122
Witam ponownie odświeżę temat bo nadal coś źle robie i bardzo proszę o pomoc:
  1. <?
  2.  $login = htmlentities ($_POST['login']); 
  3.  $passgracza = htmlentities ($_POST['passgracza']);
  4.  $logincookie = htmlentities ($_COOKIE['logincookiexrayvc']); 
  5.  $passgraczacookie = htmlentities ($_COOKIE['passgraczacookiexrayvc']);
  6.  if (($passgracza) && ($login)) {
  7. setcookie ("logincookiexrayvc", "$login", time()+25920000);
  8. setcookie ("passgraczacookiexrayvc", "$passgracza", time()+25920000);
  9.  }
  10. ?>
  11. <HTML>
  12. <HEAD>
  13. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2">
  14. <TITLE>Informacja na hasło</TITLE>
  15. </HEAD>
  16. <BODY>
  17. <?php
  18.  
  19.  
  20. mysql_connect ("localhost", "root", "*****") or 
  21.  die ("Błąd połączenia");
  22.  mysql_select_db ("*****") or 
  23.  die ("Nie można połączyć się z bazą");
  24.  
  25.  if (($_POST['login']) && ($_POST['passgracza'])) { 
  26.  $query = mysql_query("SELECT * FROM gracze WHERE ksywa = '{$_POST['login']}' and pass = '{$_POST['passgracza']}'");
  27.  if (mysql_num_rows($query) < 1) {
  28.  print ("Wpisano niepoprawne dane o użytkowniku i haśle.<BR>");
  29.  print ('<A HREF="index.php">Wróć</A> i spróbuj ponownie.');
  30.  
  31.  
  32.  } else {
  33. //tresc sajnej strony:)
  34. print "tajna strona";
  35.  
  36.  }
  37.  
  38.  } else { 
  39. if (($passgracza) && ($login)) {
  40. print "Witaj ".$logincookie."";
  41. }else{
  42. print "<form method="POST" action="index.php">";
  43. print "<p>Login: <input type="text" name="login" size="20"><br/>";
  44. print "Hasło: <input type="password" name="passgracza" size="20"><br/>";
  45. print "<input type="submit" value="Prześlij"></p>";
  46. print "</form>";
  47. }
  48.  }
  49.  
  50. ?>
  51. </BODY>
  52. </HTML>

Chodzi o to że loguje użytkownika tylko zaraz gubi ciasteczka, i wyświetla się ponownie formularz. Chodzi mi o to że jak raz użytkownik się zaloguje to już formularz logowania się nie pokaże a wyświetli się np. Witaj Mike 122 i będzie się wyświetlać dopóki sam użytkownik nie wywali ciasteczek albo nie stracą one ważności. Proszę o pomoc..
Add
Próbowałem też tak:
  1. <?
  2.  $login = htmlentities ($_POST['login']); 
  3.  $passgracza = htmlentities ($_POST['passgracza']);
  4.  $logincookie = htmlentities ($_COOKIE['logincookiexrayvc']); 
  5.  $passgraczacookie = htmlentities ($_COOKIE['passgraczacookiexrayvc']);
  6.  if (($passgracza) && ($login)) {
  7. setcookie ("logincookiexrayvc", "$login", time()+25920000);
  8. setcookie ("passgraczacookiexrayvc", "$passgracza", time()+25920000);
  9.  }
  10. $_SESSION['login'] = $login;
  11. $_SESSION['passgracza'] = $passgracza;
  12. ?>
  13. <HTML>
  14. <HEAD>
  15. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2">
  16. <TITLE>Informacja na hasło</TITLE>
  17. </HEAD>
  18. <BODY>
  19. <?php
  20.  
  21.  
  22. mysql_connect ("localhost", "root", "******") or 
  23.  die ("Błąd połączenia");
  24.  mysql_select_db ("*******") or 
  25.  die ("Nie można połączyć się z bazą");
  26.  
  27.  if (($_POST['login']) && ($_POST['passgracza'])) { 
  28.  $query = mysql_query("SELECT * FROM gracze WHERE ksywa = '{$_POST['login']}' and pass = '{$_POST['passgracza']}'");
  29.  if (mysql_num_rows($query) < 1) {
  30.  print ("Wpisano niepoprawne dane o użytkowniku i haśle.<BR>");
  31.  print ('<A HREF="index.php">Wróć</A> i spróbuj ponownie.');
  32.  
  33.  
  34.  } else {
  35. //tresc sajnej strony:)
  36. print "tajna strona";
  37.  
  38.  }
  39.  
  40.  } else { 
  41.  if (!isset($login)) { include_once 'login.php'; } 
  42. if (isset($login)) {
  43. echo 'Witaj '.$login;
  44. }
  45.  }
  46.  
  47. ?>
  48. </BODY>
  49. </HTML>

Nadal proszę o pomoc.
Chemiq
Cytat
Chodzi o to że loguje użytkownika tylko zaraz gubi ciasteczka, i wyświetla się ponownie formularz. Chodzi mi o to że jak raz użytkownik się zaloguje to już formularz logowania się nie pokaże a wyświetli się np. Witaj Mike 122 i będzie się wyświetlać dopóki sam użytkownik nie wywali ciasteczek albo nie stracą one ważności.

napisz jednoznacznie bo pierwsze zdanie mówi o dokładnie przeciwnej sytuacji niż drugie.

jeżeli chodzi o pierwsze zdanie to nie wiem. a jeżeli o drugie to zrób skrypt wylogowujący:
  1. <?php
  2. setcookie ("logincookiexrayvc", "", time()-1);
  3. setcookie ("passgraczacookiexrayvc", "", time()-1);
  4. $_SESSION['login'] = "";
  5. $_SESSION['passgracza'] = "";
  6. unset($_SESSION['login']);
  7. unset($_SESSION['passgracza']);
  8. ?>

jeżeli nie wiesz po co tyle tego i dlaczego raz ustawiam zmienne sesyjne jako puste a później jeszcze je traktuję funkcją unset() to wyjaśniam że to dla większej pewności wylogwania. session_destroy() kończy sesję zaś "prowizoryczne" definiowanie cookies służy skróceniu czasu ich ważności

pewnie zaraz ktoś się doczepi że nie potrzeba aż tyle tego i skasuje mnie prostym skryptem ale ja tak lubię i tyle biggrin.gif
Mike122
Hmm dokładniej i na spokojnie to wytłumaczę.
Che zrobić "prosty" skrypt logowania oparty na cookie, mysql (mogą być też sesje).
I che żeby raz po zalogowaniu nie pokazywał mi się ten formularz logowania nie ważne na jaką podstronę serwisu wejdę. Tylko zamiast formularza logowania było Witaj Mike122 i tam dalej jakiś panel dry.gif
Chemiq mógłbyś pomóc mi to przerobić tak jak Ty sądzisz i żeby to działało bo ja za bardzo tego nie rozumie jak mam to zrobić. Proszę Cię o pomoc. sadsmiley02.gif rolleyes.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.