Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Następny problem z PDO
Forum PHP.pl > Forum > Przedszkole
GandiFly
Witam.
Znowu mam problem z PDO. Otóż mam taki kod pliku login.php
  1. <?php
  2. require 'config.php';
  3. require_once 'functions.php';
  4. ?>
  5. <?
  6. // Zabezpiecz zmienne odebrane z formularza
  7. $email = htmlspecialchars($_POST['email']);
  8. $pass = htmlspecialchars($_POST['pass']);
  9.  
  10. if ($_POST['send'] == 1) {
  11. // Sprawdzamy czy wszystkie pola są uzupełnione
  12. if (!$email or empty($email)) {
  13. die ('<p class="error">Wypełnij pole z emailem!</p>');
  14. }
  15.  
  16. if (!$pass or empty($pass)) {
  17. die ('<p class="error">Wypełnij pole z hasłem!</p>');
  18. }
  19.  
  20.  
  21.  
  22. $pass = sha1(md5($pass)); // Zahasuj hasło
  23.  
  24. // Sprawdź, czy użytkownik o podanym emailu i haśle isnieje w bazie danych
  25. $SQL = "SELECT COUNT(*) FROM users WHERE email = :email AND pass = :pass";
  26. $exists = $pdo -> prepare($SQL, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
  27. $exists -> bindValue(':email', $email, PDO::PARAM_STR);
  28. $exists -> bindValue(':pass', $pass, PDO::PARAM_STR);
  29. $exists -> execute();
  30. $count = $exists -> rowCount();
  31.  
  32. if ($count == 0) {
  33. // Użytkownik nie istnieje w bazie
  34. echo '<p class="error">Użytkownik o podanym emailu i haśle nie istnieje.</p>';
  35. }
  36.  
  37. else {
  38. $sql = "SELECT * FROM `users` WHERE `email` = :email and `pass` = :pass and `status`=0";
  39. $query = $pdo -> prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
  40. $query -> bindValue(':email', $email, PDO::PARAM_STR);
  41. $query -> bindValue(':pass', $pass, PDO::PARAM_STR);
  42. $query -> execute();
  43. $RES = $query -> fetchColumn();
  44. // Jeżeli użytkownik zarejestrował się, a nie aktywował swojego konta, to wyświetla się komunikat
  45. if ($RES == 1) {
  46. echo '<p>Nie aktywowałeś jeszcze swojego konta. Aby to zrobić, wejdź na swojego maila, a następnie znajdź wiadmość z linkiem aktywacyjnym i aktywuj swoje konto</p>';
  47. }
  48. // Użytkownik istnieje
  49. $user = userData($email, $pass); // Pobierz dane użytknika do tablicy i zapisz ją do zmiennej $user
  50.  
  51. // Przypisz pobrane dane do sesji
  52. $_SESSION['email'] = $email;
  53. $_SESSION['pass'] = $pass;
  54.  
  55. echo '<p class="success">Zostałeś zalogowany. Możesz przejść na <a href="java script: history.go(-2)">poprzednią stronę</a> lub przejść na <a href="index.php">stronę główną</a></p>';
  56. }
  57. }
  58.  
  59. else {
  60. /**
  61.   * FORMULARZ LOGOWANIA
  62.   */
  63. ?>
  64. <form method="post" action="">
  65. <p>Email: * <input id="email" type="email" name="email" required /><br>
  66. <br>Hasło: * <input maxlength="32" id="pass" type="password" name="pass" required />
  67. <br>
  68. <input type="hidden" name="send" value="1" />
  69. <input type="submit" id="submit" value="Zarejestruj" />
  70. </form>
  71. <?
  72. }
  73. ?>


A taki kod pliku functions.php
  1. <?php
  2. /** Sprawdza czy użytkownik jest zalogowany
  3. * jeżeli nie zwraca false
  4. * jeżeli tak zwraca true
  5. **/
  6. function isLogged() {
  7. if (empty($_SESSION['email']) || empty($_SESSION['pass'])) {
  8. return false;
  9. } else {
  10. return true;
  11. }
  12. }
  13. // Pobiera wszystkie dane o użytkowniku
  14. function userData($email, $pass) {
  15. if ($email == '') $email = $_SESSION['email'];
  16. if ($pass == '') $pass = $_SESSION['pass'];
  17. $sql = "SELECT * FROM `users` WHERE `email` = :email AND `pass` = :pass LIMIT 1";
  18. $data = $pdo -> prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
  19. $data -> bindValue(':email', $email, PDO::PARAM_STR);
  20. $data -> bindValue(':pass', $pass, PDO::PARAM_STR);
  21. $data -> execute();
  22. $user_data = $data -> fetch();
  23. return $user_data;
  24. }
  25. /** Pobiera wszystkie dane o użytkownika tak jak funkcja wyżej lecz
  26. * rozpoznaje użytkownika nie po podanym emailu i haśle lecz po id
  27. **/
  28. function userDataById ($id) {
  29. $data = $pdo -> query("SELECT * FROM `users` WHERE `id`='$id' LIMIT 1");
  30. $user_data = $data -> fetch();
  31. return $user_data;
  32. }
  33. ?>

I problem taki że wyświetla taki błąd
Cytat
Fatal error: Call to a member function prepare() on a non-object in /home/u817225384/public_html/demo/skrypty/functions.php on line 18


Błąd na moje myślenie mówi że prepare() nie zostało użyte na obiekcie

Ale szukałem szukałem i szukałem i wszystko na moje oko jest tak jak powinno być.

To plik config.php (tutaj tworzę obiekt)

  1. <?php
  2.  
  3. $db_server = ''; // Serwer bazy danych
  4. $db_user = ''; // Nazwa użytkownika
  5. $db_pass = ''; // Hasło
  6. $db_name = ''; // Nazwa bazy danych
  7. $moja_strona = ''; //Adres naszej strony www. Prawidłowo ( <a href="http://dynamicwebs.zz.mu/" target="_blank">http://dynamicwebs.zz.mu/</a> )
  8.  
  9.  
  10. // POŁĄCZ Z BAZĄ DANYCH
  11. try {
  12. $pdo = new PDO('mysql:host='.$db_server.';dbname='.$db_name.'', $db_user, $db_pass);
  13. echo 'Połączenie nawiązane!';
  14. } catch(PDOException $e){
  15. echo 'Błąd:'.$e->getMessage();
  16. }
  17.  
  18. ?>


Demo: http://dynamicwebs.zz.mu/demo/skrypty/login.php
hasło: aaa
email: aaa@gmail.com
nospor
zmienna $pdo nie jest widoczna w funkcji.... zajrzyj do manuala i poczytaj o zasiegu zmiennych
GandiFly
Wielkie dzięki. Całkowicie zapomniałem o zasięgu zmiennych.
Już wszystko działa.
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.