Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Logowanie na sesjach + MySQL
Forum PHP.pl > Forum > PHP
trylas
Mam taki obiekt user_manager.php i on obsluguje wszelkie dzialania nowego uzytkownika tzn od stworzenia konta poprzez logowanie i uaktualnianie ostatniego logowania.... jest jedno ale ..... przy logowaniu na wysokosci funkcji clearLoginEntriesForUser funkcja lapie wyjatek i szuka w stosie catch'a ..... a jedyna chyba opcja napisac catch'a na poziomie skryptu process_login.php .... i ja probowalem napisac zeby mi ta sesje uzytkownika zapisywal ale wyrzuca syntax error, unexpected $end in process_login.php wiem ze blad skladni moze byc banalny ... ale ja jestem poczatkujacy i siedze nad tym dlugo tak wiec moze ktos bardziej doswiadczony looknie..... albo napisze co jest zle .... bo obiekt user_manager ma jeszcze funkcje processLogin i chyba najlepiej by bylo zeby ona dzialala ..... ale nie mam pojecia jak to posklejac <br>user_manager.php<br>
  1. <?php
  2. private function private function clearLoginEntriesForUser
  3.  
  4.  (
  5.    $in_userid,
  6.    $in_db_conn = NULL
  7.  )
  8.  {
  9.    if (!is_int($in_userid))
  10.      throw new InvalidArgumentException();
  11.  
  12.    //
  13.    // upewnia się, czy dysponujemy połączeniem z bazą danych
  14.    //
  15.    if ($in_db_conn == NULL)
  16.      $conn = connection();
  17.    else
  18.      $conn = $in_db_conn;
  19.  
  20.    try
  21.    {
  22.      //
  23.      // usuwa wszelkie wiersze odpowiadające temu użytkownikowi
  24.      // z tabeli LoggedInUsers
  25.  
  26.      $querystr = <<<EOQUERY
  27. DELETE FROM LoggedInUsers WHERE user_id = $in_userid
  28. EOQUERY;
  29.  
  30.      $results = @$conn->query($querystr);
  31.      if ($results === FALSE)
  32.        throw new DatabaseErrorException($conn->error);
  33.    }
  34.    catch (Exception $e)
  35.    {
  36.      if ($in_db_conn === NULL and isset($conn))
  37.        $conn->close();
  38.      throw $e;
  39.    }
  40.  
  41.    //
  42.    // porządkuje po sobie i wraca
  43.    //
  44.    if ($in_db_conn === NULL)
  45.      $conn->close();
  46. }
  47. public function processLogin($in_user_name,$in_user_passwd)
  48. {
  49.   if ($in_user_name == '' || $in_user_passwd == '')
  50.    throw new InvalidArgumentException();
  51.  
  52. $conn = connection();
  53.  
  54.   try
  55. {
  56.   $userid = $this->confirmUserNamePassword($in_user_name,
  57.              $in_user_passwd,
  58.           $in_db_conn);
  59.  
  60.   $session_id = session_id();
  61.  
  62.   $this->clearLoginEntriesForUser($userid);
  63.  
  64.   $query = <<<EOQUERY
  65. INSERT INTO loggedinusers(user_id,sessionid, last_update)
  66.   VALUES ('$userid', '$session_id', now())
  67.   EOQUERY;
  68.  
  69.    $result = @$conn->query($query);
  70. if($result === FALSE)
  71.  throw new DatabaseErrorException($conn->error);
  72. }
  73. catch (Exception $e)
  74. {
  75. if (isset($conn))
  76.  $conn->close();
  77.  throw $e;
  78. }
  79. $conn->close();
  80. }
  81. ?>

process_login.php
  1. <?php
  2.  
  3. require_once('user_manager.php');
  4.  
  5. //
  6. // kroki procesu przetwarzania logowania:
  7. //
  8. // 0. rozpoczęcie sesji
  9. // 1. weryfikacja danych użytkownika
  10. // 2. przesłanie danych do obiektu UserManager do przetwarzania.
  11. //
  12. // 6. przekierowanie na stosowną stronę.
  13. //
  14.  
  15. //
  16. // dla zachowania zwięzłości kodu pominiemy kilka
  17. // elementów zabezpieczających sugerowanych w rozdziale 15
  18. //
  19. //
  20. // 1. sprawdza, czy mamy wszystkie potrzebne dane.
  21. //
  22. if (!isset($_POST['username']) || $_POST['username'] == ''
  23.    || !isset($_POST['userpass']) || $_POST['userpass'] == '')
  24. {
  25.  throw new InvalidInputException();
  26. }
  27. else
  28. {
  29.  $user_name = $_POST['username'];
  30.  $user_pass = $_POST['userpass'];
  31. }
  32.  
  33. // 2.  UserManager przetwarza logowanie.
  34. //
  35. try
  36. {
  37. $usermgr = new UserManager();
  38. $usermgr->processLogin($user_name, $user_pass);
  39. }
  40. catch (Exception $e)
  41. {
  42.  
  43. }
  44. ?>
Zyx
Pierwszy raz widzę, żeby ktoś używał składni heredoc do definiowania treści zapytań SQL smile.gif. Właśnie to jest przyczyną problemu, bo ciąg kończący musi bezwzględnie rozpoczynać linijkę i nie może przed nim znaleźć się ani jedna spacja:

  1. <?php
  2. echo <<<EOF
  3. foo - to działa
  4. EOF;
  5. ?>


  1. <?php
  2. echo <<<EOF
  3. foo - a to nie
  4.  EOF;
  5. ?>


Ponadto zmienne skryptu w ciągach heredoc osadza się inaczej.
trylas
... hmmm smile.gif moze i smiesznie ale ja to zrobilem wraz z ksiazka PHP i Mysql Marc Wandschneider Tworzenie aplikacji www .... sam nie mam na tyle doswiadczenia ... a skrypt byl gotowy..... dzieki za pomoc przetestuje to za jakas chwile

dobra ..... ale w innej funkcji tego skryptu funkcje sql w heredocu dzialaja bo konto sie tworzy
Kod
public function createAccount

  (
    $in_uname,
    $in_pw,
    $in_fname,
    $in_email
  )
{

    if ($in_pw == '' or $in_fname == ''
        or !$this->isValidUserName($in_uname))
    {
      throw new InvalidArgumentException();
    }

    $conn = connection();

    try
{

      $exists = FALSE;
      $exists = $this->userNameExists($in_uname, $in_conn);
      if ($exists === TRUE)
  
           throw new UserAlreadyExistsException();

      $uname = $this->super_escape_string($in_uname, $conn);
      $fname = $this->super_escape_string($in_fname, $conn);
      $email = $this->super_escape_string($in_email, $conn);
      $pw = md5($in_pw);

      $qstr = <<<EOQUERY
INSERT INTO users
      (user_name, password, full_name, email)
     VALUES ('$uname', '$pw', '$fname', '$email')
EOQUERY;

      $results = @$conn->query($qstr);
      if ($results === FALSE)
        throw new DatabaseErrorException($conn->error);
      //
      // trzeba zwrócić identyfikator nowo utworzonego użytkownika.
      //
      $user_id = $conn->insert_id;
}
    catch (Exception $e)
{
      if (isset($conn))
        $conn->close();
      throw $e;
}

    //
    // zamyka połączenie i wychodzi
    //
    $conn->close();
    return $user_id;
}
Zyx
A faktycznie, sorry - tu była pomyłka z mojej strony. Dawno heredoca nie używałem (bo i po cholerę).
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.