Witam.
Znowu mam problem z PDO. Otóż mam taki kod pliku login.php
<?php
require 'config.php';
require_once 'functions.php';
?>
<?
// Zabezpiecz zmienne odebrane z formularza
if ($_POST['send'] == 1) {
// Sprawdzamy czy wszystkie pola są uzupełnione
if (!$email or
empty($email)) { die ('<p class="error">Wypełnij pole z emailem!</p>'); }
if (!$pass or
empty($pass)) { die ('<p class="error">Wypełnij pole z hasłem!</p>'); }
$pass = sha1
(md5($pass)); // Zahasuj hasło
// Sprawdź, czy użytkownik o podanym emailu i haśle isnieje w bazie danych
$SQL = "SELECT COUNT(*) FROM users WHERE email = :email AND pass = :pass";
$exists = $pdo -> prepare($SQL, array(PDO
::ATTR_CURSOR => PDO
::CURSOR_FWDONLY)); $exists -> bindValue(':email', $email, PDO::PARAM_STR);
$exists -> bindValue(':pass', $pass, PDO::PARAM_STR);
$exists -> execute();
$count = $exists -> rowCount();
if ($count == 0) {
// Użytkownik nie istnieje w bazie
echo '<p class="error">Użytkownik o podanym emailu i haśle nie istnieje.</p>'; }
else {
$sql = "SELECT * FROM `users` WHERE `email` = :email and `pass` = :pass and `status`=0";
$query = $pdo -> prepare($sql, array(PDO
::ATTR_CURSOR => PDO
::CURSOR_FWDONLY)); $query -> bindValue(':email', $email, PDO::PARAM_STR);
$query -> bindValue(':pass', $pass, PDO::PARAM_STR);
$query -> execute();
$RES = $query -> fetchColumn();
// Jeżeli użytkownik zarejestrował się, a nie aktywował swojego konta, to wyświetla się komunikat
if ($RES == 1) {
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>'; }
// Użytkownik istnieje
$user = userData($email, $pass); // Pobierz dane użytknika do tablicy i zapisz ją do zmiennej $user
// Przypisz pobrane dane do sesji
$_SESSION['email'] = $email;
$_SESSION['pass'] = $pass;
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>'; }
}
else {
/**
* FORMULARZ LOGOWANIA
*/
?>
<form method="post" action="">
<p>Email: * <input id="email" type="email" name="email" required /><br>
<br>Hasło: * <input maxlength="32" id="pass" type="password" name="pass" required />
<br>
<input type="hidden" name="send" value="1" />
<input type="submit" id="submit" value="Zarejestruj" />
</form>
<?
}
?>
A taki kod pliku functions.php
<?php
/** Sprawdza czy użytkownik jest zalogowany
* jeżeli nie zwraca false
* jeżeli tak zwraca true
**/
function isLogged() {
if (empty($_SESSION['email']) || empty($_SESSION['pass'])) { return false;
} else {
return true;
}
}
// Pobiera wszystkie dane o użytkowniku
function userData($email, $pass) {
if ($email == '') $email = $_SESSION['email'];
if ($pass == '') $pass = $_SESSION['pass'];
$sql = "SELECT * FROM `users` WHERE `email` = :email AND `pass` = :pass LIMIT 1";
$data = $pdo -> prepare($sql, array(PDO
::ATTR_CURSOR => PDO
::CURSOR_FWDONLY)); $data -> bindValue(':email', $email, PDO::PARAM_STR);
$data -> bindValue(':pass', $pass, PDO::PARAM_STR);
$data -> execute();
$user_data = $data -> fetch();
return $user_data;
}
/** Pobiera wszystkie dane o użytkownika tak jak funkcja wyżej lecz
* rozpoznaje użytkownika nie po podanym emailu i haśle lecz po id
**/
function userDataById ($id) {
$data = $pdo -> query("SELECT * FROM `users` WHERE `id`='$id' LIMIT 1");
$user_data = $data -> fetch();
return $user_data;
}
?>
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)
<?php
$db_server = ''; // Serwer bazy danych
$db_user = ''; // Nazwa użytkownika
$db_pass = ''; // Hasło
$db_name = ''; // Nazwa bazy danych
$moja_strona = ''; //Adres naszej strony www. Prawidłowo ( <a href="http://dynamicwebs.zz.mu/" target="_blank">http://dynamicwebs.zz.mu/</a> )
// POŁĄCZ Z BAZĄ DANYCH
try {
$pdo = new PDO('mysql:host='.$db_server.';dbname='.$db_name.'', $db_user, $db_pass);
echo 'Połączenie nawiązane!'; } catch(PDOException $e){
echo 'Błąd:'.$e->getMessage(); }
?>
Demo:
http://dynamicwebs.zz.mu/demo/skrypty/login.phphasło: aaa
email: aaa@gmail.com